12

可能重复:
C++ 逗号运算符

我今天遇到了意想不到的(至少对我而言)C++ 行为,如下所示:

#include <iostream>

int main()
{
  std::cout << ("1", "2") << std::endl;

  return 0;
}

输出:

2

这适用于括号之间的任意数量的字符串。在 Visual Studio 2010 编译器和键盘上测试。

我想知道为什么首先要编译,这个“功能”有什么用?

4

5 回答 5

15

啊,这是逗号运算符。当你使用一个逗号和两个(或更多)表达式时,会发生什么是所有表达式都被执行,结果作为一个整体是最后一个表达式的结果。这就是为什么你得到“2”的原因。请参阅此处以获得更大的解释。

于 2012-08-10T09:42:20.293 回答
8

它被称为逗号运算符:在表达式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

(看。我告诉过你它有利于混淆。)

于 2012-08-10T09:47:13.013 回答
3

逗号运算符 ( , ) 逗号运算符 (,) 用于分隔两个或多个表达式,这些表达式包含在只需要一个表达式的情况下。当必须对一组表达式求值时,只考虑最右边的表达式。

例如,下面的代码:

a = (b=3, b+2);

参考:http://www.cplusplus.com/doc/tutorial/operators/

于 2012-08-10T09:44:05.197 回答
1

逗号 (",") 的结果是右子表达式。我在 stl 容器的循环中使用它:

for( list<int>::iterator = mylist.begin(), it_end = mylist.end(); it != it_end; ++it )
  ...
于 2012-08-10T09:45:33.023 回答
0

逗号运算符计算逗号两边的表达式,但返回第二个的结果。

于 2012-08-10T09:44:03.410 回答