C++:输入和输出流运算符:关联性
C++: input and output stream operators: associativity
理论上的输入/输出流运算符关联性:
从左到右
(例如,根据这个:Sait Mary's University网站
实践中的输入/输出流运算符关联性:
#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,这是您在此处测试的内容。
此代码示例如何与有关从左到右执行的标准字词相关联?
打印语句的输出根据需要为 012。
为什么函数执行按从右到左的顺序执行?
因为这完全取决于实现。除了少数例外,该标准完全没有说明计算运算符参数的顺序。这些例外是逗号运算符、三位一体运算符a ? b : c
和布尔短路运算符 &&
和 ||
。(如果运算符重载,则这些不是序列点)。不应依赖于计算操作数的顺序。结合性和参数是不同概念的顺序。
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 运算符重载关联性编译器优化
- C++STL字符串运算符+关联性
- 是否违反 C/C++ 运算符优先级和关联性规则?
- 是否可以在C++中重载运算符关联性?
- C/C++ 中的运算符优先级和关联性
- 二进制布尔运算符是否具有关联性
- C++:输入和输出流运算符:关联性
- C++ 中的运算符优先级和运算符关联性规则