如何在 C++ 布尔表达式中评估指针?
How are pointers evaluated in a C++ boolean expression?
我正在将旧的 Borland C++ 应用程序转换为 C# .NET
有一个 class 看起来基本上只是一个双向链表。
其中一种方法如下所示:
MessagePtr CheckMessageList::First(MessageSourceTable _source)
{
MessagePtr
message = First();
bool
done = false;
while (message && !done)
{
done = (bool) (message->SourceTable() == _source);
if (!done)
message = Next();
}
return (message);
}
虽然我不明白 while (message)
是如何评估的。
在 C# 中我有这个:
public CheckMessage Fist(enums.MessageSourceTable table)
{
CheckMessage message = First();
bool done = false;
while (message && !done)
{
done = message.SourceTable.Equals(table);
if (!done)
message = Next();
}
return message;
}
这是无效的,因为它不知道如何处理 while 语句。
我几乎没有使用 C++ 的经验。谁能指出我正确的方向?
编辑;这基本上是一回事吗?
public CheckMessage Fist(enums.NYMSMessageSourceTable table)
{
foreach (CheckMessage cm in _list)
{
if (cm.SourceTable.Equals(table))
return cm;
}
return Last();
}
在 C++ 中,指针隐式转换为 bool
,如果指针等于 nullptr
,则指针为 "falsy",否则为 "truthy"。所以
while(message)
等同于
while(message != nullptr)
我正在将旧的 Borland C++ 应用程序转换为 C# .NET
有一个 class 看起来基本上只是一个双向链表。
其中一种方法如下所示:
MessagePtr CheckMessageList::First(MessageSourceTable _source)
{
MessagePtr
message = First();
bool
done = false;
while (message && !done)
{
done = (bool) (message->SourceTable() == _source);
if (!done)
message = Next();
}
return (message);
}
虽然我不明白 while (message)
是如何评估的。
在 C# 中我有这个:
public CheckMessage Fist(enums.MessageSourceTable table)
{
CheckMessage message = First();
bool done = false;
while (message && !done)
{
done = message.SourceTable.Equals(table);
if (!done)
message = Next();
}
return message;
}
这是无效的,因为它不知道如何处理 while 语句。
我几乎没有使用 C++ 的经验。谁能指出我正确的方向?
编辑;这基本上是一回事吗?
public CheckMessage Fist(enums.NYMSMessageSourceTable table)
{
foreach (CheckMessage cm in _list)
{
if (cm.SourceTable.Equals(table))
return cm;
}
return Last();
}
在 C++ 中,指针隐式转换为 bool
,如果指针等于 nullptr
,则指针为 "falsy",否则为 "truthy"。所以
while(message)
等同于
while(message != nullptr)