C++:输入和输出流运算符:关联性

标签 c++ input operators associativity

理论上的输入/输出流运算符关联性:

从左到右

(例如,根据这个:Sait Mary's University website

输入/输出流运算符关联性实践:

#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 . . .

此示例演示函数是按从右到左的顺序调用的(尽管它们的值按预期从左到右打印)。

问题: 此代码示例如何与有关从左到右执行的标准词相关联?为什么函数执行以从右到左的顺序执行?

最佳答案

关联性定义了运算符<<调用的顺序,调用顺序如下:((((std::cout << func0()) << func1()) << func2()) << std::endl); .然而,iirc,评估 operator<< 的参数的顺序是实现定义的,这就是您在此处测试的内容。

关于C++:输入和输出流运算符:关联性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11354871/

相关文章:

c++ - 我在哪里可以找到与 Clang 假设的目录结构相同的 mingw32?

c++ - 可变数量的构造函数参数取决于整数模板

c++ - 为什么 `QDateTime`实现隐式共享?

c - C 程序中 STDIN 输入大小限制为 1k

jsf - 如何使数字输入区域最初为空而不是0或0.00?

c++ - 有没有标准的方法可以在没有 QCompleter 的情况下从 QLineEdit 创建下拉菜单?

c++ - 将导出的符号保留在共享库中

c++ - x += a 比 x = x + a 快吗?

c++ - 在 C++ 中定义类似 Matlab 的 .* 运算符?

c++ - —运算符的行为