为什么不能使用constexpr全局变量初始化constexpr引用类型?

时间:2019-02-04 02:39:32

标签: c++ c++11 constexpr

#include <iostream>
using namespace std;

constexpr int r =100;
int main()
{
    constexpr int &k = r ;
    cout << k << endl;
}

编译此代码会在编译时产生“错误:将'const int'绑定到类型为'int&'的引用的限定符”。

1 个答案:

答案 0 :(得分:6)

编译在const之后添加int

constexpr int const & k = r ;
// ...........^^^^^

问题在于constepxr暗示着const,因此当您定义r

constexpr int r =100;

您将constexpr定义为int const的值(还要考虑到const应用于左侧的类型;仅当右侧没有类型时,才将其应用于右侧)。左侧;因此const intint const是同一事物)。

但是您的k

constexpr int & k = r ;

不是对const的{​​{1}}(由constexpr表示)引用,而是对int const的{​​{1}}引用。

而且您无法使用const值初始化对int变量的引用。

您可以通过将int引用为int const的{​​{1}}来解决错误。