为啥我不能使用 constexpr 全局变量来初始化 constexpr 引用类型?
Posted
技术标签:
【中文标题】为啥我不能使用 constexpr 全局变量来初始化 constexpr 引用类型?【英文标题】:Why can I not use a constexpr global variable to initialize a constexpr reference type?为什么我不能使用 constexpr 全局变量来初始化 constexpr 引用类型? 【发布时间】:2019-02-04 02:39:32 【问题描述】:#include <iostream>
using namespace std;
constexpr int r =100;
int main()
constexpr int &k = r ;
cout << k << endl;
编译此代码会在编译时给出“错误:将‘const int’绑定到‘int&’类型的引用丢弃限定符”。
【问题讨论】:
【参考方案1】:编译在int
之后添加const
。
constexpr int const & k = r ;
// ...........^^^^^
问题是constepxr
暗示const
,所以当你定义r
时
constexpr int r =100;
您将constexpr
定义为int const
值(还要考虑const
应用于左侧的类型;仅当左侧没有类型时才应用于右侧;所以@987654331 @ 和 int const
是同一个东西)。
但是你的k
constexpr int & k = r ;
不是const
(由constexpr
暗示)对int const
的引用,而只是const
对int
的引用。
而且您不能使用int const
值初始化对int
变量的引用。
您可以通过使k
成为const
对int const
的引用来解决该错误。
【讨论】:
谢谢 max66 。我对 C++ 比较陌生,但据我了解 constexpr 是隐含的 const 。我明白一旦我们在指针上定义了一个 constexpr ,它基本上是***的 const ,即它自身的指针是 const 指针而不是指向 const 的指针。对于没有将其声明为 constexpr 的引用类型意味着它的 const 即对 const 的引用(在这种情况下为 int ?) @praveen 它是对非 const int 的 constexpr 引用,这至少有一定意义。您不能有 constexpr 非常量值。例如,template<int & x>struct foofoo()++x;;
是一种递增一些位于 constexpr 的 int 的类型,但该 int 没有 constexpr 值。参考是 constexpr;值不是。以上是关于为啥我不能使用 constexpr 全局变量来初始化 constexpr 引用类型?的主要内容,如果未能解决你的问题,请参考以下文章
使用 constexpr 成员函数初始化 constexpr 成员变量
当 const 有效时,为啥我不能声明 constexpr local?
c++11:为啥静态 constexpr 的类内初始化不是定义?