std::cout功能的特殊行为
Peculiar behavior of std::cout functionality
我试图习惯指针算法,在指针指向的地址和值上都使用增量运算符。
我用std::cout来检查我的理解,我发现了我无法轻易消化的东西,让我们看看(这是函数main内部的代码):
int R = 0;
std::cout << 0 << 1 << 2 << 3 << endl;
std::cout << R++ << R++ << R++ << R++ << endl;
R = 0; // R value reset to Zero;
std::cout << ++R << ++R << ++R << ++R << endl;
结果将是:
0123
3210
4444
我试着用后缀++来理解cout的行为,但当我考虑到它前缀为++的行为时,我完全崩溃了。并简单地意识到:这是一个堆叠式流动的问题。提前谢谢大家。
std::cout << R++ << R++ << R++ << R++ << endl;
翻译为:
std::cout.operator<<(R++).operator(R++).operator(R++).operator(R++).operator<<(endl);
由于该语言不保证函数参数的求值顺序,因此您的代码具有未定义的行为。
如果要强制排序,请使用圆括号强制编译器按您期望的顺序计算表达式;
((((std::cout << R++) << R++) << R++) << R++) << endl;
这是C++未定义的行为之一:在同一序列点修改同一变量。
您应该使用单独的cout语句(用;
分隔)来获得有保证的结果:
int R = 0;
std::cout << 0;
std::cout << 1;
std::cout << 2;
std::cout << 3 << std::endl;
std::cout << R++;
std::cout << R++;
std::cout << R++;
std::cout << R++ << std::endl;
R = 0; // R value reset to Zero;
std::cout << ++R;
std::cout << ++R;
std::cout << ++R;
std::cout << ++R << std::endl;
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- std::cout.imbue()多重调用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 错误:在尝试检测 std::cout 是否<< t 时,功能强制转换为数组类型;有效
- Cuda 基本程序 (将值写入矩阵和 std:cout 不起作用) ;主功能不启动
- 尽管我的功能和cout语句的放置错误,但我的程序为什么会起作用
- & 字符在重载 std::cout 中的功能是什么?
- 为什么COUT在朋友函数中不起作用,该功能超载了操作员&lt;&lt;这是一个iStream运算符
- C++在主功能之外使用"cout"?
- std::cout 可防止功能中的段错误
- 具有类功能的cout
- Win32 C++从类返回 cout 功能
- std::cout功能的特殊行为