【问题标题】:Convert if with init-statement (c++17) to c++14使用 init 语句 (c++17) 将 if 转换为 c++14
【发布时间】:2022-09-20 12:27:55
【问题描述】:

这仅适用于 c++17。有没有办法将其转换为 c++14?

if (auto user = static_cast<CUser*>(pMover); user && !user->UserState())
        return;
  • 使用 2 个语句。
  • @prapin 和一些 {} 是迂腐的
  • 一种思考方式C++17是它是一种新的、独立的、改进的语言,不同于它的前身C++14.大多数或所有 C++14-isms 都可以在 C++17 中工作(因为力求尽可能保持向后兼容性),但 C++17-isms 很少或根本不能在 C 中工作++14。
  • 你可能想在这里dynamic_cast
  • @TheDreamsWind 大胆声称没有更大的背景。

标签: c++ c++17 c++14


【解决方案1】:

您必须将 if 拆分为2 条语句.
为了将user 的范围限制为if 语句,您可以附上{...}

{
    auto user = static_cast<CUser*>(pMover);
    if (user && !user->UserState())
        return;
}

【讨论】:

    【解决方案2】:

    在这种情况下,很简单:

    if (pMover && static_cast<CUser*>(pMover)->IsRecordBookOptIn()) return;
    

    static_cast&lt;CUser*&gt;(pMover) 是 nullptr当且仅当pMover 是 nullptr。在这种情况下,&amp;&amp; 不会评估右侧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 2013-04-14
      • 2015-03-29
      • 1970-01-01
      • 2016-08-03
      • 2022-01-01
      相关资源
      最近更新 更多