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