可能重复:
C++ 逗号运算符
我今天遇到了意想不到的(至少对我而言)C++ 行为,如下所示:
#include <iostream>
int main()
{
std::cout << ("1", "2") << std::endl;
return 0;
}
输出:
2
这适用于括号之间的任意数量的字符串。在 Visual Studio 2010 编译器和键盘上测试。
我想知道为什么首先要编译,这个“功能”有什么用?
可能重复:
C++ 逗号运算符
我今天遇到了意想不到的(至少对我而言)C++ 行为,如下所示:
#include <iostream>
int main()
{
std::cout << ("1", "2") << std::endl;
return 0;
}
输出:
2
这适用于括号之间的任意数量的字符串。在 Visual Studio 2010 编译器和键盘上测试。
我想知道为什么首先要编译,这个“功能”有什么用?
啊,这是逗号运算符。当你使用一个逗号和两个(或更多)表达式时,会发生什么是所有表达式都被执行,结果作为一个整体是最后一个表达式的结果。这就是为什么你得到“2”的原因。请参阅此处以获得更大的解释。
它被称为逗号运算符:在表达式x, y
中,编译器首先计算x
(包括所有副作用),然后y
; 表达式的结果是 的结果y
。
在您引用的表达式中,它绝对没有用;第一个字符串被简单地忽略。但是,如果第一个表达式有副作用,它可能会很有用。(在我看来,主要是为了混淆,最好避免。)
还要注意,这仅在逗号是运算符时才有效。如果它可以是其他任何东西(例如分隔函数参数的标点符号),它就是。所以:
f( 1, 2 ); // Call f with two arguments, 1 and 2
f( (1, 2) ); // Call f with one argument, 2
(看。我告诉过你它有利于混淆。)
逗号运算符 ( , ) 逗号运算符 (,) 用于分隔两个或多个表达式,这些表达式包含在只需要一个表达式的情况下。当必须对一组表达式求值时,只考虑最右边的表达式。
例如,下面的代码:
a = (b=3, b+2);
参考:http://www.cplusplus.com/doc/tutorial/operators/
逗号 (",") 的结果是右子表达式。我在 stl 容器的循环中使用它:
for( list<int>::iterator = mylist.begin(), it_end = mylist.end(); it != it_end; ++it )
...
逗号运算符计算逗号两边的表达式,但返回第二个的结果。