今天我写了一个表达:

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

并惊讶地发现它实际上已编译。 (PS message_idQString,它也可以与std::string一起使用)

我经常做这样的事情,在工作时忽略变量,我希望编译器告诉我我仍然缺少条目。决赛看起来像这样:
"<" + message_id + "@" + network_domain + ">"

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

最佳答案

一元+可以应用于算术类型值,无作用域枚举值和指针值,因为...

C++标准在C++ 11§5.3.1/7中以这种方式定义它。

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

当人们对某事物的功能感到疑惑时,查看文档始终是一个好主意。

“一元+运算符的操作数应具有算术,无作用域枚举或指针类型,并且
结果是参数的值。积分提升是对积分或枚举操作数执行的。
结果的类型就是提升的操作数的类型。”

关于c++ - 一元加号(+)对文字字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20439442/

10-11 16:46