代码:
#include <iostream>
using namespace std;
int main()
{
int a = 1;
cout << a << " " << a++ << " " << ++a << endl;
}
查了相关资料我知道了,输出流的规律
- 计算顺序:自右至左
- 输出顺序:自左至右
理想运行结果:3 2 2
实际运行结果:3 2 3
问题:
请教下为什么 ++a这里会输出3
代码:
#include <iostream>
using namespace std;
int main()
{
int a = 1;
cout << a << " " << a++ << " " << ++a << endl;
}
查了相关资料我知道了,输出流的规律
理想运行结果:3 2 2
实际运行结果:3 2 3
问题:
请教下为什么 ++a这里会输出3
root@lui-pc:~/CLionProjects/test01# g++ -std=c++11 main.cpp
root@lui-pc:~/CLionProjects/test01# ./a.out
1 1 3
root@lui-pc:~/CLionProjects/test01# cat main.cpp
#include <iostream>
using namespace std;
int main()
{
int a = 1;
cout << a << " " << a++ << " " << ++a << endl;
} root@lui-pc:~/CLionProjects/test01#
root@lui-pc:~/CLionProjects/test01#
上面那个仁兄说的很好,我在ubuntu18.04下测的结果是1 1 3
,确实这个是未定义行为。
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
一条表达式语句中对同一个变量使用多次副作用语法(题目中的前缀自增和后缀自增)是未定义行为,输出什么都不算错。
请不要写这种代码。
关于表达式的求值顺序请参考:求值顺序