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

时间:2015-02-04 16:12:13

标签: 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;
}

这个输出是:

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

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

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

5 个答案:

答案 0 :(得分:10)

逗号运算符返回右侧。

Wikipedia

  

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

答案 1 :(得分:8)

  

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

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

  

为什么这个陈述可能?

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

  

有关于它的文件吗?

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

总结一下,逗号运算符:

  • 评估逗号之前的表达式;
  • 丢弃该值;
  • 在逗号后评估表达式;
  • 将该值作为整体表达值。

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

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

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

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

答案 2 :(得分:7)

表达式如下

(a, b)

comma expression,其值是其最右边的操作数,即

(a, b, ..., z)

会产生z的值。

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

答案 3 :(得分:4)

这是因为它在您的示例中返回表达式序列的最后一个值:

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

答案 4 :(得分:2)

在C ++中,逗号运算符为编译器提供评估顺序。通常,编译器可以按照自己喜欢的方式自由地评估任何表达式。但是逗号运算符在右手操作数之前计算其左手操作数并返回右手操作数的值。

在由逗号运算符链接的操作数链中,返回的值是最右边的操作数。