2

可能重复:
字符串文字可以在常量表达式中下标吗?

如果我下标字符串文字,结果是编译时常量吗?换句话说,以下代码是否有效?

constexpr char x = "a"[0];

GCC 4.7 说它是,但是标准在这个问题上必须说什么?

对于好奇的人:我不能只写'a',因为字符串文字是字符串化运算符的结果。一些编译器确实有一个字符化运算符,但它只是一个扩展。

4

1 回答 1

3

我认为您正在查看 5.19 [expr.const]:

2 - 条件表达式是核心常量表达式,除非它涉及以下 [...]

  • 左值到右值的转换(4.1),除非它应用于
    • 整数或枚举类型的非易失性左值,它引用具有先前初始化的非易失性 const 对象,用常量表达式初始化 [注意:字符串文字 (2.14.5) 对应于此类对象的数组。——尾注] [...]

因此,字符串文字下标操作的结果可以转换为核心常量表达式中的右值。

这在为用户定义的文字和用户定义的字符串文字定义 constexpr 运算符时很有用,尽管在某些情况下可变参数形式可能更可行。

于 2012-09-21T12:19:27.873 回答