C++ 一元加号(+;)对文字字符串

C++ 一元加号(+;)对文字字符串,c++,string-literals,unary-operator,C++,String Literals,Unary Operator,今天我写了一句话: "<" + message_id + "@" + + ">" ^ | \____ see that extra '+' here! 现在我想知道为什么+一元运算符对字符串文本有效 一元+可应用于算术类型值、非范围枚举值和指针值,因为 C++标准定义了这种方式,在C++ 11中5.3.1/7。< /P>

今天我写了一句话:

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

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

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

C++标准定义了这种方式,在C++ 11中5.3.1/7。< /P> 在本例中,字符串文字(类型为数组的

char const
)衰减为指向
char const
的指针

当人们对某些东西的功能产生疑问时,查看文档总是一个好主意


“一元
+
运算符的操作数应具有算术、非作用域枚举或指针类型以及 结果是参数的值。对整数或枚举操作数执行整数提升。
结果的类型是提升的操作数的类型。“

什么类型是消息id?指针算法可能是。@klm123我更新了这个问题。你能引用C++11§5.3.1/7吗?@Alexiswillke你说得对。我不知道为什么 ++/<代码>正在编译,这个答案真的不能回答它。@ Rapptz:C++遵循“最大蒙克”规则,只要有有效的令牌,Listar就会扫描。
+
的两个实例之间的空格导致lexer将它们视为两个单独的标记。因此,它们不能构成一个
++
操作符(OP显然知道这一点,询问一元
++
时,他已经确定了它是这样的,只是想知道为什么它可以应用于一个文本字符串)。你的回答没有解释(对我个人而言),我也不想给出一个完整的答案。编译的原因是因为
”,这意味着
“>”
(类型为
const char[2]
衰减为
const char*
,这意味着您只剩下
message\u id+“>”
“>”
作为一个
常量字符*
。如果没有
消息id
,表达式就不会工作。这就是我真正想知道的。我想知道允许指针上使用一元
+
的理由是什么。它不是C语言,而是C++98语言。
"<" + message_id + "@" + network_domain + ">"