相关疑难解决方法(0)

当x是const int []时,x [0] == 1 C++ 11中的常量表达式?

以下C++ 11程序是否格式错误?

const int x[] = {1,2,3};

static_assert(x[0] == 1, "yay");

int main() {}
Run Code Online (Sandbox Code Playgroud)

gcc和clang似乎这么认为,但为什么不是x[0] == 1一个恒定的表达?

x[0] == 1
subscript operator
*(x+0) == 1
array-to-pointer conversion (int* p = x)
*(p+0) == 1
pointer addition
*p == 1
indirection (lvalue y = x[0])
y == 1
lvalue-to-rvalue conversion:
Run Code Online (Sandbox Code Playgroud)

一个非易失性glvalue(是的,x [0]是glvalue和非易失性)的整数(是的,它有类型const int)或枚举类型引用一个非易失性的const对象(是的它有类型const int)使用前面的初始化(是初始化为1),使用常量表达式初始化(​​是1是常量表达式)

似乎是真的,x数组的第一个元素满足这些条件.

1 == 1
Run Code Online (Sandbox Code Playgroud)

这是编译器错误,标准缺陷,还是我错过了什么?

5.19 [expr.const]的哪一部分说这不是一个常量表达式?

c++ const constexpr c++11

20
推荐指数
1
解决办法
642
查看次数

标签 统计

c++ ×1

c++11 ×1

const ×1

constexpr ×1