繁体   English   中英

constexpr 变量不是编译时值吗?

[英]Constexpr variable is not a compile time value?

根据https://docs.microsoft.com/en-us/cpp/cpp/constexpr-cpp?view=vs-2019

“constexpr 表示值或返回值是常量,如果可能,在编译时计算。”

此外, constexpr 和 static constexpr 全局变量之间的区别

“在变量声明中,constexpr 表示 const,并且命名空间 scope 中的 const 变量默认具有内部链接(因此添加 static 不会改变任何内容)。”

我认为这意味着constexpr意味着const意味着static

但是,这个问题的答案让我感到困惑: 您何时以及为什么将 static 与 constexpr 一起使用?

它指出

  1. “constexpr 变量不是编译时值”
  2. “看起来,在某些极端情况下,我们可以从 static constexpr 变量的 static 存储持续时间中受益。”

我有什么误解?

您缺少的是使用严格的 C++ 术语的地方和不使用的地方。

constexpr变量不是编译时值,因为它不是 value 变量是 object 或对 object 的引用。 对象可能包含值,但对象不是值。 42 是一个值。 int i = 42; 创建一个名为i且类型为int的 object,并将值 42 分配给该 object。

Microsoft 文档使用白话语言,而不是严格的 C++ 术语。

一个constexpr变量定义了一个不可变 ( const ) object ,其初始化程序应为常量表达式,因此变量本身可用于需要常量表达式的地方。


我认为这意味着constexpr意味着const意味着static

请记住static是 C++ 中的一个极度重载的关键字,在不同的上下文中具有非常不同的含义。 您引用的答案是响应static的非常具体的用法:用于命名空间范围的变量。 在这种情况下, static是不必要的,因为constexpr命名空间范围的变量默认为内部链接。

但是您引用的另一个答案是谈论static其他用途,特别是功能static 因此,将该语句归结为“ const意味着static ”过于简化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM