我遇到了一个奇怪的 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);
并且在发布中更改优化类型也没有效果,但禁用优化会像其他配置一样输出“零 1”。