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你说得对。我不知道为什么
+
的两个实例之间的空格导致lexer将它们视为两个单独的标记。因此,它们不能构成一个++
操作符(OP显然知道这一点,询问一元++
时,他已经确定了它是这样的,只是想知道为什么它可以应用于一个文本字符串)。你的回答没有解释(对我个人而言),我也不想给出一个完整的答案。编译的原因是因为“
”,这意味着“>”
(类型为const char[2]
衰减为const char*
,这意味着您只剩下message\u id+“>”
和“>”
作为一个常量字符*
。如果没有消息id
,表达式就不会工作。这就是我真正想知道的。我想知道允许指针上使用一元+
的理由是什么。它不是C语言,而是C++98语言。
"<" + message_id + "@" + network_domain + ">"