c – “cout <<(a,b)”的输出是什么?为什么?

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

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;
}

这个输出是:

(0, 0) => 0
(0, 1) => 1
(1, 0) => 0
(1, 1) => 1
(0, 0) => 0
(0, 3) => 3
(5, 0) => 0
(7, 1) => 1

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

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

最佳答案

What is the output, is it the same on all systems?

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

Why is that statement possible?

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

is there documentation on it?

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

总结一下,逗号运算符:

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

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

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

for (int i = 0, j = n; i < j; ++i, --j)

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

转载注明原文:c – “cout <<(a,b)”的输出是什么?为什么? - 代码日志