根据https://docs.microsoft.com/zh-cn/cpp/cpp/constexpr-cpp?view=vs-2019
“ constexpr表示该值或返回值是恒定的,并且,如果可能,在编译时进行计算。”
此外,constexpr和静态constexpr全局变量之间的区别
“在变量声明中,constexpr隐含const,并且默认情况下,名称空间范围内的const变量具有内部链接(因此,添加static不会更改任何内容)。”
我认为这constexpr意味着const隐含static。
但是,这个问题的答案使我感到困惑:什么时候以及为什么在constexpr中使用static?
它指出
- “ constexpr变量不是编译时值”
- “看来,在某些特殊情况下,我们可以受益于静态constexpr变量的静态存储持续时间。”
我有什么误会?
您缺少的是在哪里使用了严格的C ++术语,而没有在哪里使用。
一个constexpr变量是不是编译时间价值,因为它是不是一个值。变量是对象或对对象的引用。对象可以包含值,但对象不是值。42是一个值。int i = 42;创建一个名为itype 的对象int,并将值42分配给该对象。
Microsoft文档使用的是本地语言,而不是严格的C ++术语。
甲constexpr变量定义一个不可变(const)对象,其初始化应是常量表达式,因此变量本身可以在需要的常量表达式地方使用。
我认为这
constexpr意味着const隐含static。
请记住,这static是C ++中一个非常重载的关键字,在不同的上下文中它的含义非常不同。您引用的答案是对static:的特殊用法的回应,该用法用于命名空间范围的变量。在那种情况下,这static是不必要的,因为constexpr命名空间范围的变量默认为内部链接。
但是,您引用的另一个答案是谈论功能的其他用途static,特别是function- static。因此,将该陈述简化为“ const暗含static”是太过简化了。
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |