gpt4 book ai didi

c++11 - 如何定义 constexpr 变量

转载 作者:行者123 更新时间:2023-12-03 17:42:10 24 4
gpt4 key购买 nike

我想使用一个简单的编译时间常量,例如:

double foo(double x) { return x + kConstDouble; }

现在我至少看到以下定义该常量的方法
namespace { static constexpr double kConstDouble = 5.0; }
namespace { constexpr double kConstDouble = 5.0; }
static constexpr double kConstDouble = 5.0;
constexpr double kConstDouble = 5.0;

哪条路是正确的? kConstDouble时有区别吗是在头文件还是源文件中定义的?

最佳答案

使用静态或匿名命名空间将导致变量具有内部链接;它只会在同一个翻译单元中可见。因此,如果您在 .cpp 文件中使用其中之一,您将无法在其他任何地方使用该变量。如果常量是该代码单元的实现细节,则通常会这样做。如果要将其公开给其他翻译单元,则需要将其放入头文件中。这样做的典型方法是将其声明为静态(或将其放在匿名命名空间中),因为它是一个微不足道的常量变量。另一种方法是在头文件中将其声明为 extern,并在 .cpp 中定义它以获得一个真正的全局变量(而不是实际上每个 tu 都有自己的副本的顶部变量)。

静态和匿名命名空间之间;好吧,您首先不需要两者。他们都做同样的事情 AFAIK。但我认为此时在 cpp 文件中使用匿名命名空间更为惯用,因为它们还可用于提供函数、类等内部链接。另一方面,当您想使用它使变量全局可用时,使用静态更常见;我从不在头文件中使用匿名命名空间,因为我发现它具有误导性。

关于c++11 - 如何定义 constexpr 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33537634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com