括号中的两个字符串在C ++中用逗号分隔

时间:2012-08-10 09:38:26

标签: c++ string comma parentheses

  

可能重复:
  C++ Comma Operator

我今天遇到了意外(至少对我来说)C ++行为,由以下snippit显示:

#include <iostream>

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

  return 0;
}

输出:

2

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

我想知道为什么这首先编译,这个'功能'的用途是什么?

5 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:8)

它被称为逗号运算符:在表达式x, y中,编译器 首先评估x(包括所有副作用),然后y;结果 表达式是y的结果。

在你引用的表达中,它绝对没用;第一个字符串 简直被忽略了。但是,如果第一个表达式有副作用, 它可能有用。 (在我看来,主要用于混淆,而且是 最好避免。)

另请注意,这仅在逗号为运算符时有效。如果可以的话 是别的东西(例如分隔a的参数的标点符号) 功能),它是。所以:

f( 1, 2 );      //  Call f with two arguments, 1 and 2
f( (1, 2) );    //  Call f with one argument, 2

(参见。我告诉过你,混淆是好事。)

答案 2 :(得分:3)

逗号运算符(,)   逗号运算符(,)用于分隔两个或多个表达式,这些表达式只包含一个表达式。当必须为一个值计算表达式集时,只考虑最右边的表达式。

例如,以下代码:

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

价:HTTP://www.cplusplus.com/doc/tutorial/operators/

答案 3 :(得分:1)

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

for( list<int>::iterator = mylist.begin(), it_end = mylist.end(); it != it_end; ++it )
  ...

答案 4 :(得分:0)

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