检查构造函数是否为NULL? 我浏览了C++代码: if (Foo f = "something") { ... }

检查构造函数是否为NULL? 我浏览了C++代码: if (Foo f = "something") { ... },c++,C++,什么是if子句?构造函数可以计算为NULL吗 编辑: 福是一个班级 if子句究竟是什么?构造函数可以计算为NULL吗 这条线相当于: // Create a new scope { // Create the object in the new scope Foo f = "something"; // Use if if ( f ) { ... } } 如果有一个用户定义的函数可以将Foo转换为bool,那么这将起作用。否则,它将不起作用。与

什么是
if
子句?构造函数可以计算为NULL吗

编辑:

福是一个班级

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 ) { ... }
if ( f != nullptr ) { ... }
如果您使用C++11,这与

if ( f != NULL ) { ... }
if ( f != nullptr ) { ... }
示例1(这不起作用):
structfoo
{
Foo(字符常量*){}
};
int main()
{
Foo f=“某物”;
//不起作用。
//没有什么可以把Foo转换成bool
如果(f)
{
标准::cout
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 ) { ... }
if ( f != nullptr ) { ... }
如果您使用C++11,这与

if ( f != NULL ) { ... }
if ( f != nullptr ) { ... }
示例1(这不起作用):
structfoo
{
Foo(字符常量*){}
};
int main()
{
Foo f=“某物”;
//不起作用。
//没有什么可以把Foo转换成bool
如果(f)
{

std::你能给我们提供更多关于
Foo
的上下文吗?@EdHeal他说他“偶然发现”了代码,暗示不是他写的。@JoelFan我相信它正在将结果
Foo
转换为布尔表达式,并将其作为
if
@ColinBasnett的条件进行计算-我接受“偶然发现”有点言过其实为什么这个问题不清楚?我看起来很清楚。你能给我们提供更多关于
Foo
的上下文吗?@EdHeal他说他“遇到了”代码,暗示不是他写的。@JoelFan我相信它正在将结果
Foo
转换为布尔表达式,并将其作为
if
@ColinBasnett的条件进行计算-我接受“穿越”有点夸张为什么这个问题不清楚?我看起来很清楚。它还要求
Foo
有一个接受
const char*
或可转换的复制/移动赋值运算符type@Olipro,是的。我假设OP理解这一部分。@RSahu,不,我不知道……我以为会用=语法。我认为=语法相当于
Foo f(“something”);
我认为用这种奇怪的情况编写一个编译程序可能是个好主意。@Olipro:“赋值运算符”?此代码不使用赋值运算符。它要求
Foo
具有来自
const char*
或来自
const char[10]的转换构造函数
。它还要求
Foo
具有接受
const char*
或可转换的复制/移动赋值运算符type@Olipro,是的。我假设OP理解这一部分。@RSahu,不,我不知道……我以为用=syntax调用常规构造函数。我认为=syntax相当于
Foo f(“something”);
我认为用这种奇怪的情况编写一个编译程序可能是个好主意。@Olipro:“赋值运算符”?这段代码不会使用赋值运算符。它要求
Foo
const char*
或从
const char[10]
中有一个转换构造函数。