如何在 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)