c++ - 在编译时常量中为字符串文字添加下标

标签 c++ c++11 language-lawyer constexpr

Possible Duplicate:
Can a string literal be subscripted in a constant expression?

如果我为字符串文字添加下标,结果是编译时常量吗?换句话说,下面的代码有效吗?

constexpr char x = "a"[0];

GCC 4.7 是这么说的,但标准对此有何规定?

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

最佳答案

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

2 - A conditional-expression is a core constant expression unless it involves one of the following [...]

  • an lvalue-to-rvalue conversion (4.1) unless it is applied to
    • a non-volatile glvalue of integral or enumeration type that refers to a non-volatile const object with a preceding initialization, initialized with a constant expression [ Note: a string literal (2.14.5) corresponds to an array of such objects. —end note ] [...]

因此字符串文字下标运算的结果可能会转换为核心常量表达式中的右值。

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

关于c++ - 在编译时常量中为字符串文字添加下标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12530408/

相关文章:

c++ - 关于在 winsock 的 addrinfo 结构中使用智能指针的问题

c++ - 使用 `std::greater` 通过 `priority_queue` 创建最小堆的原因

c++ - std::forward 用法比较

c++ - "A case label may only be used within a switch"

c++ - 错误 : expected type-specifier before ‘Number’

c++ - 另一个 C++ 列表问题

c++ - 以下包扩展有什么问题?

c++ - 是否需要对具有格式错误的默认模板参数的未使用成员模板进行诊断?

c++ - 通过 C 强制转换访问结构的第一个字段是否违反了严格的别名?

c++ - 为什么调用纯虚拟链接器错误而不是编译错误?