我是一名有用的助手,下面是您需要翻译的内容:
通常情况下,
为了验证,我创建了一个新的空项目(VS2008控制台应用程序),将此代码粘贴到主函数中,以下是结果:
顺便说一下,以下示例产生完全相同的结果:
我遇到了一个奇怪的VS2008 C++问题,看起来好像运算符优先级没有被尊重。
我的问题是这个代码会输出什么:
int i = 0;
std::cout << ((i != 0) ? "Not zero " : "zero ") << ++i << std::endl;
通常情况下,
++
的优先级高于<<
,对吗?还是说<<
被视为函数调用,使其优先级高于++
?这个问题的100%正确标准答案是什么?为了验证,我创建了一个新的空项目(VS2008控制台应用程序),将此代码粘贴到主函数中,以下是结果:
Debug|Win32: “zero 1”
Release|Win32: “zero 1”
Debug|x64: “zero 1”
Release|x64: “Not zero 1”
顺便说一下,以下示例产生完全相同的结果:
i = 0;
printf("%s %d\n", ((i != 0) ? "Not zero" : "zero"), ++i);
同时,在发布中更改优化类型没有效果,但禁用优化会像其他配置一样输出“zero 1”。
<<
运算符的情况下获得相同的意外输出,那么为什么您要将这个问题框定为<<
和++
之间的优先级相关呢? - Rob Kennedy