首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当x为常量时,C++11中的x[0] == 1常量表达式?

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

Stack Overflow用户
提问于 2013-09-20 03:18:31
回答 2查看 671关注 0票数 19

下面的C++11程序是不是格式错误?

代码语言:javascript
复制
const int x[] = {1,2,3};

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

int main() {}

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

代码语言:javascript
复制
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:

非易失性glvalue (是的,x是glvalue且非易失性的)整数(是的,它具有const int类型)或枚举类型,引用具有先前初始化(是的,用1初始化)的非易失性const对象(是的,它具有const int类型),用常量表达式初始化(yes 1是常量表达式)

看起来是真的,x数组的第一个元素满足这些条件。

代码语言:javascript
复制
1 == 1

这是一个编译器错误,标准缺陷,还是我遗漏了什么?

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

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18903113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档