【发布时间】:2016-07-21 16:00:05
【问题描述】:
考虑使用 Visual Studio 2015 编译的以下代码:
#include <iostream>
#include <cassert>
void foo( bool b )
{
std::cout << b;
}
int main()
{
int a;
foo( a = 2 ); // getting warning #4800
foo( !(a = 2) ); // not getting any warning
return 0;
}
foo( a = 2 ) 产生警告 4800 'int': forcing value to bool 'true' or 'false',很好。
但foo( !(a = 2) ) 不会产生警告。为什么?在某些时候,有一个 int 到 bool 转换!
【问题讨论】:
-
编译器不保证会向您发出任何警告。彻底的 C++ 错误,是的,警告,不是。