当前位置: 首页 > 知识库问答 >
问题:

变量上的const vs constexpr

百里朝
2023-03-14

以下定义有区别吗?

const     double PI = 3.141592653589793;
constexpr double PI = 3.141592653589793;

如果不是,在C++11中首选哪种样式?

共有1个答案

牟正真
2023-03-14

我相信这是有区别的。让我们重新命名它们,以便更容易地谈论它们:

const     double PI1 = 3.141592653589793;
constexpr double PI2 = 3.141592653589793;

pi1pi2都是常量,这意味着您不能修改它们。但是,只有pi2是编译时常数。它应在编译时初始化。pi1可以在编译时或运行时初始化。此外,在需要编译时常数的上下文中只能使用pi2。例如:

constexpr double PI3 = PI1;  // error

但是:

constexpr double PI3 = PI2;  // ok
static_assert(PI1 == 3.141592653589793, "");  // error
static_assert(PI2 == 3.141592653589793, "");  // ok

至于你该用哪一种?只要符合你的需要就用。是否要确保您有一个可用于需要编译时间常量的上下文中的编译时间常量?您希望能够在运行时进行计算来初始化它吗?等。

 类似资料:
  • 我有一个超类看起来像这样 扩展类 科目类 尝试将从强制转换为时,出现无法强制转换的异常。 原因:java.lang.ClassCastException:com.example.bean.hrs.ProviderAccount无法强制转换为com.triphop.bean.hrs.CustomProviderAccount(位于com.triphop.service.hrsServiceImpl.

  • 我在Windows10机器上运行Docker1.12.0。我正在开发一个Java程序,使用Maven 3.3.9作为依赖项管理器。我有一个maven docker插件(https://github.com/fabric8io/docker-maven-plugin),它在干净安装时会出现以下错误。 [ERROR]未能执行目标IO.fabric8:docker-maven-plugin:0.15.1

  • 问题内容: 我知道在PHP中可能有“变量”变量。例如 是否可以在JavaScript中将变量的名称引用为字符串?怎么做? 问题答案: 对此没有单一的解决方案(当然,有,但是请不要认真考虑)。可以通过来动态访问 一些 全局变量,但这不适用于函数本地的变量。 不会 成为属性的全局变量是使用和和定义的变量。 几乎总是比使用可变变量更好的解决方案! 相反,您应该查看数据结构并为您的问题选择正确的结构]。

  • 我是最近一个R的转换者,正在努力寻找下面的R等价物:循环使用一个公共前缀加上一个数字(var1,var2,...,varn)命名的变量。 假设我有一个数据集,其中每行是一个商店,每列是该商店在第1个月、第2个月...第6个月的收入值。一些虚构的数据,例如: 你能提出一个适当的方法吗?

  • 用户可以在Playbook中,通过vars关键字自定义变量,使用时用{{ }}引用以来即可。 Playbook中定义和使用的变量的方法 例如下面的例子中,用户定义变量名为http_port,其值为为80。在tasks firewalld中,通过{{ http_port }}引用。 --- - hosts: web vars: http_port: 80 remote_user: r

  • 在presto的上下文中,我认为我所能做的就是运行SQL。有经验的人吗?