关于c ++:一元加(+)对文字字符串

Unary plus (+) against literal string

今天我写了一个表达:

1
2
3
4
"<" + message_id +"@" +  +">"
                          ^
                          |
                          \____  see that extra '+' here!

很惊讶它居然被编译了。(ps message_id是一个QString,它也可以与std::string一起工作)

我经常这样做,在工作时去掉一个变量,我希望编译器告诉我哪里仍然缺少条目。决赛将是这样的:

1
"<" + message_id +"@" + network_domain +">"

现在我想知道为什么+一元运算符对字符串文字有效!?


一元+可应用于算术类型值、非范围枚举值和指针值,因为…

C++标准是这样定义的,在C++ 11中5.3.1/7。

在这种情况下,类型为char const数组的字符串文字衰减为指向char const的指针。

当人们怀疑某个东西的功能时,查看文档总是一个好主意。

&ldquo;一元+运算符的操作数应具有算术、非运算范围的枚举或指针类型,并且结果是参数的值。整数提升是对整数或枚举操作数执行的。结果的类型是提升操作数的类型。