Den*_*vov 2 c++ if-statement conditional-statements
在C++中,有一种!!适用于非bool值的结构,可将其转换为bool.例如:
int n = 12;
if ( !!n )
std::<<cout << "n is true";
else
std::<<cout << "n is false";
Run Code Online (Sandbox Code Playgroud)
是否有可以应用的限制,或适用的类型:POD,指针等?
限制是operator!必须为类型定义(并且它必须产生一个operator!也定义的类型)
它适用于可在布尔上下文中计算的任何类型.算术类型,指针类型(包括指向(成员)(函数)),以及转换为其中之一的任何东西.加上枚举类型的可能性和结束std::nullptr_t,以及可能是我忘记的其他东西.C++ 11中的4/3定义了上下文转换为bool的含义,这就是内置operator!函数的作用.
对于所有这些类型,写入if(!!n)是多余的,您可以if(n)用相同的含义编写.!!n对于这些类型意味着与bool(n)或相同static_cast<bool>(n);.
它也适用于任何具有重载operator!的类型,它返回一个可以转换为bool的类型(或返回一个带有operator!重载的类型返回bool).
如果最左边operator!的类型返回bool以外的类型,那么你仍然可以写if(!!n),但!!不能作为转换bool.它充当转换为返回的任何类型.