可以"return a return statement"吗?

Is it possible to "return a return statement"?

本文关键字:return 可以 statement      更新时间:2023-10-16

是否可以在C++中返回返回语句或执行具有类似功能的操作?

例如,如果代码中有几个函数将指针作为输入,并且每个函数都检查指针是否为 nullptr,这将非常方便。如果它是一个 nullptr,函数应该停止它正在做的任何事情并返回 0 或任何适合其类型的函数。

inputPtr是给定返回int的函数的int*。而不是写这样的东西

    ...
    if(inputPtr == nullptr) {
        return 0;
    }
    ...

每次,只要有

    ...
    checkNull(inputPtr);
    ...

或类似的东西。在这个例子中,它当然不是太糟糕,但想象一个更复杂的测试功能。

从概念上讲,这似乎很奇怪。但通常有一种方法可以防止重复。

不,这是不可能的,在任何情况下隐藏控制流都可能被认为是一个坏主意。 如果你必须编写检查函数,那么让它返回一个布尔值就足够简单了:

if(checkNull(inputPtr)) return 0 ;

不幸的是,这是极少数只能在C++中用宏解决的事情之一。

也就是说,你真的无法忍受代码中的额外if,并且你有一个宽契约,它允许nullptr作为参数给出。

我个人不会使用宏,只会使用清晰的if语句。

我认为基本上有三种选择:

  1. 异常
  2. gsl::not_null

在这里,您有关于它的好帖子。 https://www.bfilipek.com/2017/10/notnull.html(当然这不是完美的解决方案,但它可以为您节省一些时间:((