理论上输入/输出流运算符的关联性:
左转
(例如,根据: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 . . .
此示例演示了以向右下方顺序调用函数(尽管它们的值按预期向右打印)。
问题: 此代码示例如何与关于LEFT TO RIGHT执行的标准词相关联?为什么函数执行是按照左右顺序执行的?
答案 0 :(得分:3)
关联性定义了运算符的顺序&lt;&lt;通过这种方式发生的呼叫:((((std::cout << func0()) << func1()) << func2()) << std::endl);
。运算符&lt;&lt;的参数的顺序评估是实现定义但是,iirc,这是你在这里测试的。
答案 1 :(得分:1)
此代码示例如何与关于LEFT TO RIGHT执行的标准词相关联?
根据需要,print语句的输出为012。
为什么函数执行是按照左到右的顺序执行的?
因为这完全取决于实施。除了少数例外,标准完全没有说明计算运算符的参数的顺序。这些例外是逗号运算符,三元运算符a ? b : c
以及布尔短路运算符&&
和||
。 (如果运算符过载,则这些不是序列点)。您不应该依赖于计算操作数的顺序。关联性和参数是不同概念的顺序。