【发布时间】:2020-04-11 21:02:35
【问题描述】:
我发现void(); 在三元运算符的“else”分支中用作“无所事事”,作为空指针检查的简写
if(var){ var->member(); }
作为
var ? var->member() : void();
但我似乎找不到以这种方式使用的void 关键字的任何引用,这是对void 关键字本身的函数或仿函数调用吗?或者它没有对void 类型进行任何转换?还是这只是 pass 之类的 c++ 语法?
编辑:
在这种情况下member() 的返回类型是void。
【问题讨论】:
-
如果你完全忘记你看过这段代码,你会帮自己一个忙,并保证你自己永远不会写出这么丑陋的东西。
-
你应该问的真正问题是,当前者像你永远需要的那样富有表现力且意图清晰时,这个替代方案是愚蠢的,而后者似乎有意向代码读者否认这两个属性。
-
@SamVarshavchik:某些语言(如 C#)具有空条件或空合并(或 Elvis)运算符。对于来自这种语言的人来说,在 c++ 中使用同一语言可能是有意义的。
-
为什么有人会写这个而不是
if (var) var->member();one-liner? -
@JosephSible-ReinstateMonica 原来我一定是记错了。作为@T.C.在我的(现已删除的)答案中正确指出,
void不允许作为 C++11 中constexpr函数的类型,这使我的答案毫无意义。