我遇到了一个奇怪的VS2008 C++问题,看起来运算符优先级不受尊重.
我的问题是这个的输出是什么:
int i = 0;
std::cout << ((i != 0) ? "Not zero " : "zero ") << ++i << std::endl;
Run Code Online (Sandbox Code Playgroud)
通常++优先于<<,对吧?或者被<<认为是一个函数调用,它的优先级高于++?100%正确的标准答案是什么?
为了检查,我创建了一个新的空项目(VS2008控制台应用程序),只在主要粘贴此代码,结果如下:
Debug|Win32: “zero 1”
Release|Win32: “zero 1”
Debug|x64: “zero 1”
Release|x64: “Not zero 1”
Run Code Online (Sandbox Code Playgroud)
顺便说一句,以下示例产生完全相同的结果:
i = 0;
printf("%s %d\n", ((i != 0) ? "Not zero" : "zero"), ++i);
Run Code Online (Sandbox Code Playgroud)
并且在发布中更改优化类型也没有效果,但禁用优化会像其他配置一样输出"零1".