今天我写了一个表达式:
"<" + message_id + "@" + + ">"
^
|
\____ see that extra '+' here!
并且对它实际编译感到惊讶。 (PS message_id
是QString
,它也适用于std::string
)
我经常这样做,在我工作的时候遗漏变量,我希望编译器能告诉我哪些地方仍然缺少条目。决赛看起来像这样:
"<" + message_id + "@" + network_domain + ">"
现在我想知道为什么+
一元运算符对字符串文字有效!?
答案 0 :(得分:9)
一元+
可以应用于算术类型值,未范围的枚举值和指针值,因为......
C ++标准以这种方式定义它,在C ++11§5.3.1/ 7中。
在这种情况下,字符串文字(类型为char const
的数字)会衰减到char const
的指针。
当人们对某事物的功能感到奇怪时,查看文档总是一个好主意。
“一元+
运算符的操作数应具有算术,无范围枚举或指针类型,以及
结果是参数的值。对整数或枚举操作数执行整体提升。
结果的类型是提升的操作数的类型。“