C++ 字符串连接,为什么要编译?

C++ 字符串连接,为什么要编译?,c++,C++,我在我的代码中发现了这一点,这是我的错别字,但它仍然被编译。有人知道为什么吗? 我不知道 #include <string> #include <iostream> int main() { std::string x; std::string b = "Bryan"; x += '|' + b, x; std::cout << x << std::endl; } #包括 #包括 int main() { std::字符串x;

我在我的代码中发现了这一点,这是我的错别字,但它仍然被编译。有人知道为什么吗? 我不知道

#include <string>
#include <iostream>

int main()
{
  std::string x;
  std::string b = "Bryan";
  x += '|' + b, x;
  std::cout << x << std::endl;
}
#包括
#包括
int main()
{
std::字符串x;
std::string b=“Bryan”;
x+='|'+b,x;
标准::cout
这里的
基本上是一个运算符,其左操作数先求值,右操作数后求值。就是这么简单

由于
+=
+
的优先级高于
运算符,因此它相当于:

(x += '|' + b) ,  x;
在这里:

再举一个例子:

int f() { ... }
int g() { ... }

f(), g();
这里将首先调用
f()
,然后调用
g()

希望有帮助

x += '|' + b, x;
这是一个具有最低优先级的逗号运算符。它接受两个操作数,从左到右求值。在本例中,它的两个操作数都是完全合法的:

请注意,逗号运算符的值为右操作数,但它通常是无用的,如本例中所示。因此,它与:

x += '|' + b;
x;  // no effect
这是因为
运算符前面的表达式生效-

std::string y("Hello");
x += '|' + b, y;
以上内容仍然会在您的程序中给出结果
| Bryan

x += '|' + b, x;
之所以编译,是因为此处的逗号用作运算符(而不是分隔符),而右侧操作数不起作用

发件人:

<>在C和C++编程语言中,逗号运算符(由令牌表示)是一个二进制算符,它计算其第一个操作数并丢弃结果,然后计算第二个操作数并返回这个值(和类型)。

逗号运算符的优先级是所有C运算符中最低的

x+='|'+b,x;
中,运算符
+=
的优先级高于
,而运算符
+
的优先级高于
+=
,这意味着它相当于
(x+=('.'+b)),x

此外,如果在编译代码时启用了警告,则可能会收到类似以下内容的警告:

warning: right-hand operand of comma has no effect

非常棒的帮助人员,非常感谢您为meSide清理这些注意:如果您使用警告编译
g++-Wall
生成
警告:逗号运算符的右操作数无效[-Wunused value]
如果你启用了警告,你应该会得到一个编译器警告。编译器可以发现
,x
什么都不做,这意味着这可能是一个错误。好的,我将启用警告。为什么这里对
+=
的处理方式与
=
不同?@mohit:我不知道你所说的“不同”是什么意思但是我想你还是想知道:
+=
=
有相同的优先级。只是
的优先级比它们都低!明白了。我有个错误的印象,
a=4,5;
会把
a设置为
5
。谢谢。@mohit:不,
a=4,5
会把
a设置为
4
。如果您希望它是
5
,那么就写
a=(4,5)
或者干脆写
a=5
。这样做有合法的理由吗?这个操作符的目的是什么?
std::string y("Hello");
x += '|' + b, y;
x += '|' + b, x;
warning: right-hand operand of comma has no effect