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

Adv*_*sus 10 c++ string comma parentheses

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

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

#include <iostream>

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

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

2
Run Code Online (Sandbox Code Playgroud)

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

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

Lyu*_*lev 13

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


Jam*_*nze 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
Run Code Online (Sandbox Code Playgroud)

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