我跑过这个C++代码:
if (Foo f = "something")
{
...
}
Run Code Online (Sandbox Code Playgroud)
究竟是什么if条款检查?构造函数可以计算为NULL吗?
编辑:
Foo是一个班级
什么是if子句检查?构造函数可以计算为NULL吗?
该行相当于:
// Create a new scope
{
// Create the object in the new scope
Foo f = "something";
// Use if
if ( f )
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
如果有用户定义的函数将a转换Foo为a ,那将会有效bool.否则,它将无法正常工作.与NULL没有直接关系.但是,如果有用户定义的转换为任何类型的指针,那么
if ( f ) { ... }
Run Code Online (Sandbox Code Playgroud)
是相同的
if ( f != NULL ) { ... }
Run Code Online (Sandbox Code Playgroud)
如果你使用C++ 11,那也是一样的
if ( f != nullptr ) { ... }
Run Code Online (Sandbox Code Playgroud)
struct Foo
{
Foo(char const*) {}
};
int main()
{
Foo f = "something";
// Does not work.
// There is nothing to convert a Foo to a bool
if ( f )
{
std::cout << "true\n";
}
}
Run Code Online (Sandbox Code Playgroud)
struct Foo
{
Foo(char const*) {}
// A direct conversion function to bool
operator bool () { return true; }
};
int main()
{
Foo f = "something";
if ( f )
{
std::cout << "true\n";
}
}
Run Code Online (Sandbox Code Playgroud)
struct Foo
{
Foo(char const*) {}
// A direct conversion function to void*
operator void* () { return this; }
};
int main()
{
Foo f = "something";
if ( f )
{
std::cout << "true\n";
}
// Same as above
if ( f != NULL )
{
std::cout << "true\n";
}
// Same as above
if ( f != nullptr )
{
std::cout << "true\n";
}
}
Run Code Online (Sandbox Code Playgroud)