constexpr在C++11和C++14中表示的是常量表达式,和常量关键字const并没有区别。
constexpr在C++11和C++14中表示的是常量表达式,和常量关键字const并没有区别。
这个问题已经在这里有了答案:
在Mike Isaacson的\"探索C++17及其以后版本\"演示中,有一个问题是关于写:
const constexpr ....
与单个const的区别。Mike说在C++11中constexpr隐含const,在C++14中不是这样的。
这是真的吗?
我试着寻找证明,但我找不到。
我不是在询问const和constexpr之间的区别(因为许多其他问题已经解答),而是在C++标准的两个版本中constexpr的区别。
admin 更改状态以发布 2023年5月23日
考虑以下代码片段:\n\n
struct T { int x; constexpr void set(int y) { x = y; } }; constexpr T t = { 42 }; int main() { t.set(0); return 0; }
\n\n在C++14中,它应该可以编译通过,但在C++11中会出现错误,就好像成员函数“set”被声明为“const”一样。这是因为在C++11中,constexpr
暗示着const
,而在后续版本的标准中,这种情况不再成立。\n\nconstexpr
关键字保证对象在运行时不会被动态初始化。对于函数而言,它保证函数可以在编译时进行求值。在C++11中,这与“存储在只读内存中”混淆了,但很快就被认为是一种错误。\n\n此外,在C++14中,constexpr
函数和成员的能力更为强大。例如,它们可以修改非const
对象,因此它们不能被隐式视为:const
。