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

Why can I not use a constexpr global variable to initialize a constexpr reference type?

本文关键字:constexpr 全局变量 初始化 引用类型 不能 为什么      更新时间:2023-10-16
#include <iostream>
using namespace std;
constexpr int r =100;
int main()
{
    constexpr int &k = r ;
    cout << k << endl;
}
编译

此代码会在编译时给出"错误:将'const int'绑定到类型'int&'的引用会丢弃限定符"。

编译在

int后添加const

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

问题是constepxr意味着const,所以当你定义r

constexpr int r =100;

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

但是你的k

constexpr int & k = r ;

不是对int constconst(由constexpr暗示)引用,而只是对intconst引用。

而且,不能使用int const值初始化对int变量的引用。

您可以通过使k成为对int constconst引用来解决此错误。