Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “的输出是什么?”;库特<&书信电报;(a、b)“;为什么?_C++_Comma - Fatal编程技术网

C++ “的输出是什么?”;库特<&书信电报;(a、b)“;为什么?

C++ “的输出是什么?”;库特<&书信电报;(a、b)“;为什么?,c++,comma,C++,Comma,可以将布尔表达式与逗号分隔符组合。我在一个代码中看到过它,我不确定这会导致什么结果。我写了一些示例代码 int BoolStatement(void) { using std::cout; using std::endl; cout << "(0, 0) => " << (0, 0) << endl; cout << "(0, 1) => " << (0, 1) << endl;

可以将布尔表达式与逗号分隔符组合。我在一个代码中看到过它,我不确定这会导致什么结果。我写了一些示例代码

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;
}
我不确定这是否仅适用于我的系统,并且这个调用是否实际上与布尔语句组合相同

输出是什么,在所有系统上都一样吗?
为什么该语句是可能的,并且上面有文档吗?

逗号运算符返回右侧

:

<>在C和C++编程语言中,逗号运算符(由令牌表示)是一个二进制算符,它计算其第一个操作数并丢弃结果,然后计算第二个操作数并返回这个值(和类型)。
这是因为在示例中,它返回表达式序列的最后一个值:

    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-------------------------------^

cout看起来像这样的表达式

(a, b)
是a,其值是其结果是其最右边的操作数,即

(a, b, ..., z)
将产生
z
的值

请注意,将对链中的所有表达式进行求值,包括具有副作用的表达式。此外,逗号充当序列点,这意味着在计算下一个操作数之前应用副作用

输出是什么,在所有系统上都一样吗

输出如您所述:两个值中的第二个。它定义得很清楚

为什么这种说法是可能的

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

有相关文件吗

它在C++标准[EXPR.CAMA]中被记录。在C++11中,这是5.18

总之,逗号运算符:

  • 计算逗号前的表达式
  • 丢弃该值
  • 计算逗号后的表达式
  • 将该值作为整体表达式值生成
您可以从输出中看到:在每种情况下,输出都是逗号后的值

在这种情况下,这是完全没有意义的;但是,如果第一个表达式有副作用,并且您希望在第二个表达式之前排序,那么在只允许一个表达式的情况下,它是有用的。例如:

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

操作符允许最终表达式做两件事,即使只能在其中放置一个表达式。

< P> C++中,逗号运算符给编译器提供了评估顺序。通常,编译器可以按照自己喜欢的方式计算任何表达式。但逗号运算符先计算其左操作数,再计算右操作数,并返回右操作数的值


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

您正在组合哪些布尔表达式
0
1
3
等都是整数,而不是布尔值。@Barmar我的意思是将整数用作布尔值,其中0为false,and!0是真的。但是看看答案,你是对的——这与布尔无关。也许值得指出的是,尽管它们看起来一样,逗号表达式和函数调用却不是一回事。特别是,函数参数的求值顺序完全没有定义。欢迎使用stackoverflow。
for (int i = 0, j = n; i < j; ++i, --j)