C++ 常量表达式中引用类型的变量
在这里,至少可以阅读 三,- 如果变量是constexpr变量,或是 引用类型或常量限定整数或枚举类型,以及 它的初始值设定项是常量初始值设定项 好吧,情况是,我无法为变量是引用类型的情况找到一个例子 在 Visual Studio 16.1.2投诉: 表达式必须具有常量值 变量的值(在第11行声明)不能用作常量C++ 常量表达式中引用类型的变量,c++,language-lawyer,C++,Language Lawyer,在这里,至少可以阅读 三,- 如果变量是constexpr变量,或是 引用类型或常量限定整数或枚举类型,以及 它的初始值设定项是常量初始值设定项 好吧,情况是,我无法为变量是引用类型的情况找到一个例子 在 Visual Studio 16.1.2投诉: 表达式必须具有常量值 变量的值(在第11行声明)不能用作常量 但是,为什么?您的代码在C++17中不合法,因为它包含一个constepr变量,其初始化请求从左值到右值的转换,并且它不是列出的异常之一:(C+17[expr.const]/2.7)
但是,为什么?您的代码在C++17中不合法,因为它包含一个
constepr
变量,其初始化请求从左值到右值的转换,并且它不是列出的异常之一:(C+17[expr.const]/2.7)
左值到右值的转换(7.1),除非应用于
- 整型或枚举型的非易失性glvalue,它引用具有先前初始化、使用常量表达式初始化或
- 引用字符串文字的子对象的非易失性glvalue,或
- 非易失性glvalue,指的是使用constexpr定义的非易失性对象,或指的是此类对象的不可变子对象,或
- 一种文本类型的非易失性glvalue值,指的是一个非易失性对象,其生存期开始于
的计算范围内李>e
double
,您应该会发现代码已编译
您引用的文本来自草稿,因此可能最终也可能不会成为某些标准的一部分。在编译器资源管理器gcc 9.1和msvc v19.20中可以编译它,而clang 8.0失败。(?)@Loreto这是提案草案的常见情况
int main()
{
static const double& ds = 0.5;
constexpr double cds = ds;
}