C ++:输入和输出流的操作符:关联(C++: input and output stream op

2019-07-30 06:21发布

输入/理论输出流运营商关联:

左到右

(例如,根据这个: Sait的圣玛丽大学网站

输入/输出流的运营实践相关性:

#include <iostream>

int func0() {
  std::cout << "func0 executed" << std::endl;
  return 0;
}

int func1() {
  std::cout << "func1 executed" << std::endl;
  return 1;
}

int func2() {
  std::cout << "func2 executed" << std::endl;
  return 2;
}

int main() {
  std::cout << func0() << func1() << func2() << std::endl;
  return 0;
}

输出(MSVCPP 2010,2012):

func2 executed
func1 executed
func0 executed
012
Press any key to continue . . .

此示例表明,函数被称为在从右到左的顺序(尽管它们的值被印刷按预期左到右)。

问题一:此代码示例如何与标准相关的话大约左至右执行? 为什么执行功能的过程中从右到左的顺序进行?

Answer 1:

关联定义了运营商<<调用的顺序,将为了这样发生的: ((((std::cout << func0()) << func1()) << func2()) << std::endl); 。 其中参数运算符<<的计算顺序是实现定义然而,IIRC,这是你正在测试在这里。



Answer 2:

此代码示例使用标准的话如何对相关从左到右执行?

从打印语句的输出是012,按要求。

为什么执行功能的过程中从右到左的顺序进行?

因为那是完全取决于执行。 除了少数例外,该标准说绝对没有关于它的参数来操作计算的顺序。 这些例外是逗号运算符,三元操作符a ? b : c a ? b : c ,且布尔短路运营商&&|| 。 (这些不是序列点,如果运营商过载)。 你不应该依赖于它的操作数计算的顺序。 关联性和其中的参数是不同的概念的顺序。



文章来源: C++: input and output stream operators: associativity