constexpr在C++11和C++14中表示的是常量表达式,和常量关键字const并没有区别。

22 浏览
0 Comments

constexpr在C++11和C++14中表示的是常量表达式,和常量关键字const并没有区别。

这个问题已经在这里有了答案:

constexpr和const之间有什么区别?

在Mike Isaacson的\"探索C++17及其以后版本\"演示中,有一个问题是关于写:

const constexpr ....

与单个const的区别。Mike说在C++11中constexpr隐含const,在C++14中不是这样的。

这是真的吗?

我试着寻找证明,但我找不到。

我不是在询问const和constexpr之间的区别(因为许多其他问题已经解答),而是在C++标准的两个版本中constexpr的区别。

admin 更改状态以发布 2023年5月23日
0
0 Comments

考虑以下代码片段:\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

0