C++ 标准对单个if语句中单个变量的双重比较有何规定?
我在Visual Studio 2013上尝试了以下代码:C++ 标准对单个if语句中单个变量的双重比较有何规定?,c++,C++,我在Visual Studio 2013上尝试了以下代码: int main() { int x = 5; if(4 < x < 6) { return 1; } return 0; } intmain() { int x=5; 如果(4代码> C,并且 BOOL被升级到int >代码>,用于后续比较,给出值 0 < /C>或 1 < /COD>,始终.< /P> 由于0和1都小于6,因此条件始终为真。本·沃伊特的回答当然是正
int main()
{
int x = 5;
if(4 < x < 6)
{
return 1;
}
return 0;
}
intmain()
{
int x=5;
如果(4
它在ideone上产生运行时错误,但在VS上工作得非常好
标准对这种不一致行为有何规定。我知道有编译警告,但我想知道为什么这不是天生的/官方支持的? 这是C和C++中的有效代码,但不符合你的意思。这与:
bool temp = (4 < x);
if (temp < 6) // always true
return 1; // this is EXIT_FAILURE
// dead code here returning EXIT_SUCCESS
bool-temp=(4
原始类型关系运算符的结果为:代码> BoOL < /C> >(C++中,<代码> int >代码> C,并且<代码> BOOL被升级到
由于
和0
都小于1
,因此条件始终为真。6
它在Visual Studio中的效果与在ideone上的效果一样好。VisualStudio具有相同的返回值;它只是不像ideone那样大声抱怨。你检查过VS上的返回值了吗?它应该返回1。它在ideone上运行良好。“运行时错误”表示您的程序从
main
返回的值不是0
。也就是说,您的程序正在报告有错误。是否保证按该顺序执行?如果是这样的话,这是有意义的,但是优化编译器是否可以决定执行bool temp=(x<6);如果(4
取而代之?@wolfPack88:顺序由关联性规则保证。如果你有f()
你不知道是f()
还是g()
首先被调用,但是x
会被与f()
的结果进行比较。可能应该补充一点,如果(4stdlib.h
中的EXIT\u SUCCESS
被定义为0
,而该代码采用另一个分支。