"cout <<(a,b)"的输出是什么?为什么?

Joh*_*nes 8 c++ comma

可以将布尔表达式与逗号分隔符组合在一起.我在代码中看到了它,我不确定这会解决什么问题.我写了一些示例代码.

int BoolStatement(void)
{
    using std::cout;
    using std::endl;

    cout << "(0, 0) => " << (0, 0) << endl;
    cout << "(0, 1) => " << (0, 1) << endl;
    cout << "(1, 0) => " << (1, 0) << endl;
    cout << "(1, 1) => " << (1, 1) << endl;
    cout << "(0, 0) => " << (0, 0) << endl;
    cout << "(0, 3) => " << (0, 3) << endl;
    cout << "(5, 0) => " << (5, 0) << endl;
    cout << "(7, 1) => " << (7, 1) << endl;

    cout << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个输出是:

(0, 0) => 0
(0, 1) => 1
(1, 0) => 0
(1, 1) => 1
(0, 0) => 0
(0, 3) => 3
(5, 0) => 0
(7, 1) => 1
Run Code Online (Sandbox Code Playgroud)

我不确定这是否仅适用于我的系统,并且此调用实际上与布尔语句组合相同.

什么是输出,是否在所有系统上都相同?为什么这个陈述是可能的并且有关于它的文件?

dje*_*lin 10

逗号运算符返回右侧.

维基百科:

在C和C++编程语言中,逗号运算符(由标记表示)是一个二元运算符,它计算其第一个操作数并丢弃结果,然后计算第二个操作数并返回该值(和类型).


Mik*_*our 8

什么是输出,是否在所有系统上都相同?

输出如您所述:两个值中的第二个.它定义明确.

为什么这个陈述可能?

因为逗号运算符允许您在单个表达式中评估多个事物.

有文件吗?

它在C++标准[expr.comma]中有记录.在C++ 11中,那是5.18.

总结一下,逗号运算符:

  • 在逗号之前计算表达式;
  • 抛弃那个价值;
  • 在逗号后评估表达式;
  • 将该值作为整体表达值.

您可以从输出中看到:在每种情况下,输出都是逗号后面的值.

在这种情况下,这完全没有意义; 但是,如果第一个表达式具有您希望在第二个表达式之前排序的副作用,则在仅允许单个表达式的情况下非常有用.例如:

for (int i = 0, j = n; i < j; ++i, --j)
Run Code Online (Sandbox Code Playgroud)

运算符允许最终表达式执行两项操作,即使您只能在其中放置一个表达式.


das*_*ght 7

一个看起来像这样的表达式

(a, b)
Run Code Online (Sandbox Code Playgroud)

是一个逗号表达式,它的值是它的最右边的操作数,即

(a, b, ..., z)
Run Code Online (Sandbox Code Playgroud)

会产生价值z.

请注意,链中的所有表达式都会被评估,包括带有副作用的表达式.此外,逗号充当序列点,这意味着在评估下一个操作数之前应用副作用.