我遇到了这个C ++代码:
if (Foo f = "something")
{
...
}
究竟检查if
子句是什么?构造函数可以评估为NULL吗?
修改
Foo是一个班级
答案 0 :(得分:7)
究竟是什么if子句检查?构造函数可以评估为NULL吗?
该行相当于:
// Create a new scope
{
// Create the object in the new scope
Foo f = "something";
// Use if
if ( f )
{
...
}
}
如果存在将Foo
转换为bool
的用户定义函数,那将会有效。否则,它就不会起作用。与NULL没有直接关系。但是,如果有用户定义的转换为任何类型的指针,那么
if ( f ) { ... }
与
相同if ( f != NULL ) { ... }
如果使用C ++ 11,那也与
相同if ( f != nullptr ) { ... }
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";
}
}
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";
}
}
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";
}
}