是否允许使用新定义扩展 std::numbers 命名空间?

Is it allowed to extend the std::numbers namespace with new definitions?

我在大型代码库中定义了几个数学数字常量。其中一些(但不是全部)现在在新的 C++20 <numbers> header 中重复了。我想把它们都放在一个地方;是否允许扩展 std::numbers header 以包含尚未定义的内容?

is it allowed to extend the std::numbers header to include the ones not already defined?

不,您不能向 std 命名空间及其子命名空间添加定义(class 模板特化除外,在没有明确禁止的情况下)。

您可以使用 using 声明将它们全部放在您自己的命名空间中的一个位置:

namespace Casey
{
    inline constexpr double missing_number = 123;

    using std::numbers::e;
    // ...
}

您可以使用 using namespace std::numbers,而不是单独 using 每个数字,但需要注意的是,未来的标准版本可能会添加名称可能与您的冲突的数字,从而破坏您的未来兼容性header.