Gri*_*inV -4 c++ language-lawyer
可能重复:
使用std :: cout评估参数的顺序
我现在已经知道了!这是'cout' 的全部代码:
#include <iostream>
using namespace std;
int main()
{
int i = 3;
cout <<-i++<<endl<<i<<endl<<-(i++)<<endl<<i<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我用VC++ 6.0编译,输出是:-4 4 -3 3
但我用g ++编译,输出是:-4 5 -3 5
为什么?我认为他们应该是一样的:-4 4 -4 4
PS:我试试看:
int main()
{
int i = 3;
cout <<-i++<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和
int main()
{
int i = 3;
cout <<-?i++?<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我逐个编译它们,结果是一样的:-3 3想到所有的答案,我可能有一个错误的测试-i ++和 - (i ++)莫名其妙
就目前而言,您的代码具有未定义的行为.您既可以使用值,也可以在没有插入序列点1的情况下进行i修改.这给出了未定义的行为.i
两条线之间的结果差异并不是来自括号的使用 - 它纯粹源于++第一行中的值修改了它的值i,所以当你到达第二行时,它的值已经递增.
总而言之,由于您有未定义的行为,因此任何输出都是完全合理且允许的,但这-4 4 -3 3是非常合理和可理解的.
| 归档时间: |
|
| 查看次数: |
542 次 |
| 最近记录: |