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