可以"return a return statement"吗?
Is it possible to "return a return statement"?
是否可以在C++中返回返回语句或执行具有类似功能的操作?
例如,如果代码中有几个函数将指针作为输入,并且每个函数都检查指针是否为 nullptr,这将非常方便。如果它是一个 nullptr,函数应该停止它正在做的任何事情并返回 0
或任何适合其类型的函数。
设inputPtr
是给定返回int
的函数的int*
。而不是写这样的东西
...
if(inputPtr == nullptr) {
return 0;
}
...
每次,只要有
...
checkNull(inputPtr);
...
或类似的东西。在这个例子中,它当然不是太糟糕,但想象一个更复杂的测试功能。
从概念上讲,这似乎很奇怪。但通常有一种方法可以防止重复。
不,这是不可能的,在任何情况下隐藏控制流都可能被认为是一个坏主意。 如果你必须编写检查函数,那么让它返回一个布尔值就足够简单了:
if(checkNull(inputPtr)) return 0 ;
不幸的是,这是极少数只能在C++中用宏解决的事情之一。
也就是说,你真的无法忍受代码中的额外if
,并且你有一个宽契约,它允许nullptr
作为参数给出。
我个人不会使用宏,只会使用清晰的if
语句。
我认为基本上有三种选择:
- 宏
- 异常
-
gsl::not_null
在这里,您有关于它的好帖子。 https://www.bfilipek.com/2017/10/notnull.html(当然这不是完美的解决方案,但它可以为您节省一些时间:((
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数向量_指针有不同的原型,我可以构建一个吗
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 在Linux中哪里可以找到互斥、未来等的源代码
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 与互斥锁相比,旋转锁可以保证上下文切换
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 是否可以通过C++扩展强制多个python进程共享同一内存
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 我们可以访问一个不存在的联盟的成员吗
- 导入库可以跨dll版本工作吗
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 可以"return a return statement"吗?
- 为什么我不能在我的三元表达式中使用 return,但我可以在常规的 if-else 语句中使用?
- C2059 'return'错误,编程新手,有人可以看看这个吗?
- return语句中可以省略return关键字