首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

cout 的执行顺序有关问题

2012-04-19 
cout 的执行顺序问题#includestring#includeiostream#includestdio.husing namespace stdmain(){ch

cout 的执行顺序问题
#include<string>
#include<iostream>
#include<stdio.h>
using namespace std;
main()
{
char str[] = "Hapqy New year!";
char *s =str;
int a=4;
cout<<a<<a++<<endl;//为什么输出的是54而不是45
 *s++;
  cout<<(*s)++<<*s++<<endl;//为什么输出的是aa,而不是pa

cout<<*s<<endl;//输出的是Hbpqy New year!
//printf("%s\n",*str);
cout<<str<<endl;
return 0;
}

[解决办法]
这个与cout的输出顺序无关。cout的输出顺序是确定的。
问题在于表达式的求值顺序
cout<<expression1<<expression2<<endl;
输出肯定是从左到右。问题在于expression1和expression2的求值顺序是不确定的所以导致了你那样的输出结果。
[解决办法]
operator<<(operator<<(operator<<(cout, a), a++), endl)
具体说来是红色的那一层operator<<的两个参数operator<<(cout, a)a++的求值顺序由编译器自行决定。如果先求出前者输出就是44,如果先求出后者输出就是54。而45在正常情况下是不可能的。
后一个指针的例子,则还有编译器的乱序优化小聪明。
至于究竟什么才是“定义了的行为”,请自行网上搜索C++顺序点

热点排行