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

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

提问人:Casey 提问时间:1/26/2022 更新时间:1/26/2022 访问量:180

问:

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

C++ 命名空间 std c++20

评论

1赞 Marc Glisse 1/26/2022
为什么不将标准导入(使用)到您自己的 MyNumbers 命名空间中呢?

答:

7赞 eerorika 1/26/2022 #1

是否允许扩展 std::numbers 标头以包含尚未定义的标头?

不可以,您不能向命名空间或其子命名空间添加定义(除非未明确禁止此类专用化)。std

相反,您可以将它们全部放在您自己的命名空间中的一个位置,并带有声明:using

namespace Casey
{
    inline constexpr double missing_number = 123;

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

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

评论

0赞 Casey 1/26/2022
...whose names may potentially conflict with yours...;当我使用时,这已经发生了.我有一个在本地范围内命名的变量,并且存在冲突。是时候为所有值添加声明了!using namespace std::numberseusing