可能重复:
Can a string literal be subscripted in a constant expression?
如果我下标一个字符串文字,结果是编译时常量吗?换句话说,以下代码是否有效?
constexpr char x = "a"[0];
GCC 4.7说它是,但标准在这个问题上有什么意义?
对于好奇:我不能只写'a'
,因为字符串文字是字符串化运算符的结果。有些编译器确实有一个charizing运算符,但它只是一个扩展。
答案 0 :(得分:3)
我想你正在看5.19 [expr.const]:
2 - 条件表达式是核心常量表达式,除非它涉及以下[...]
之一
- 左值 - 右值转换(4.1),除非适用于
- 整数或枚举类型的非易失性glvalue,它引用非易失性const对象 前面的初始化,用常量表达式初始化[注意:字符串文字(2.14.5) 对应于这样的对象的数组。 - 后注] [...]
因此,字符串文字下标操作的结果可能会转换为核心常量表达式中的右值。
这在为用户定义的文字和用户定义的字符串文字定义constexpr运算符时很有用,尽管在某些情况下可变参数形式可能更有用。