我在我的代码中发现了这个,这是我的错字,但它仍然编译。谁知道为什么? 我不知道。
#include <string>
#include <iostream>
int main()
{
std::string x;
std::string b = "Bryan";
x += '|' + b, x;
std::cout << x << std::endl;
}
答案 0 :(得分:21)
x += '|' + b, x;
这里,
基本上是一个运算符,其左操作数首先被计算,然后是右操作数。就这么简单。
由于+=
和+
的优先级高于,
运算符,因此它等同于:
(x += '|' + b) , x;
下面:
left operand => (x += '|' + b)
right operand => x
尝试另一个例子:
int f() { ... }
int g() { ... }
f(), g();
首先调用f()
,然后调用g()
。
希望有所帮助。
答案 1 :(得分:3)
x += '|' + b, x;
这个编译是因为这里的逗号充当了右边操作数无效的操作符(而不是分隔符)。
来自Wikipedia:
在C和C ++编程语言中,逗号运算符(由标记表示)是一个二元运算符,它计算第一个操作数并丢弃结果,然后计算第二个操作数并返回该值(和类型)。
...
逗号运算符具有任何C运算符的最低优先级......
在x += '|' + b, x;
中,运算符+=
的优先级高于,
,运算符+
的优先级高于+=
,这意味着它等同于(x += ('|' + b)), x
{1}};
此外,如果您编写带有警告的代码,您可能会收到类似这样的警告:
warning: right-hand operand of comma has no effect
答案 2 :(得分:2)
x += '|' + b, x;
这是一个逗号运算符,其优先级最低。它需要两个操作数,从左到右评估它们。在这个例子中,它的两个操作数都是完全合法的:
请注意,逗号运算符具有右操作数的值,但它通常没用,就像在此示例中一样。所以它与:
相同x += '|' + b;
x; // no effect
答案 3 :(得分:2)
x += '|' + b, x;
这是因为,
运算符之前的表达式生效了。例如 -
std::string y("Hello");
x += '|' + b, y;
上述内容仍会在您的计划中提供结果|Bryan
。