【发布时间】:2014-12-09 09:12:59
【问题描述】:
N3337 标准草案第 2.14.5/8 条规定:
普通字符串字面量和 UTF-8 字符串字面量也被引用 作为窄字符串文字。窄字符串文字的类型为“数组 n const char”,其中 n 是字符串的大小,定义如下, 并具有静态存储持续时间 (3.7)。
第 4.2 节
“N T 数组”或“未知边界数组”类型的左值或右值 of T”可以转换为“pointer to T”类型的纯右值。结果 是指向数组第一个元素的指针。
我预计 ++"hello world!" 会衰减 "hello world!" 到 char* 但这不会发生。必须使用额外的加号+++"hello world!" 强制它。在某些情况下不应用数组到指针的转换,例如sizeof 运算符。
第 5.3.2 节简单地说:
前缀++的操作数加1修改,如果加1则设置为true 是布尔型(不推荐使用此用法)。操作数应为可修改的 左值。操作数的类型应为算术类型或 指向完全定义的对象类型的指针。结果是更新了 操作数;它是一个左值,如果操作数是一个位域 位域。如果 x 不是 bool 类型,则表达式 ++x 等价 到 x+=1
那么为什么没有发生这种转换呢?
【问题讨论】:
标签: c++ language-lawyer