【发布时间】:2019-11-01 16:51:57
【问题描述】:
在 C# 中有一个空条件运算符?.:
MyObject o = null;
o?.doSomeThing();
这意味着:
if(o != null)
o.doSomeThing();
我想在 C++ 中有类似的东西:
MyObject* o = nullptr;
o?>doSomeThing(); // or o?->
这样写会很有用:
o?.getO()?.getO()?.doSomeThing();
所以我有两个问题:
- 今天我们使用宏进行单行条件执行。 C++14 中是否有不使用宏的简便方法?
- 是否有任何讨论或建议?我什么都没找到。
【问题讨论】:
-
不,@oznog std::optional 不会做任何此类或任何类似的事情。
-
@PaulR 如果 doSomeThing 返回无法转换为 bool 的内容(我认为),则该操作不起作用。但否则这是一个很好的解决方案,因为链接可以工作。
-
@JesperJuhl
if(o && o->getO() && o->getO()->getO()) o->getO()->getO()->doSomeThing();好吧,这是语法糖... -
我对 Jesper 的回答是否定的,必须是:
if(o) if(auto o1 = o->getO()) if(auto o2 = o1->getO()) o2->doSomeThing();否则 getter 会执行两次,第二次执行可能会返回 nullptr 或其他对象。我不会把它写成一个班轮。