【发布时间】:2021-04-03 13:30:23
【问题描述】:
我想知道在这种情况下如何从 getter 方法返回错误?
class A
{
private:
int a;
int b;
public:
const int& get(int i)
{
if (i == 1) return a;
else if (i == 2) return b;
// else... what to do here? I get a warning if I don't put anything.
}
};
【问题讨论】:
-
Throwing exceptions 可能是。
-
throw std::invalid_argument("i should equal 1 or 2");也许 -
如果经常使用该方法,抛出异常是否会产生很大的开销?
-
你可以
throw。你可以assert。您可以将返回更改为std::optional。如果无法将 out_value 指针设置为a或b,您可以将签名更改为bool try_get(int i, int*& out_value)并返回false。您可以创建两个吸气剂,int& get_a() { return a; }和int& get_b() { return b; }。这是一个经常出现的糟糕情况,还是只有当有人发出 oops 时才会出现“从未发生”的情况? -
吹毛求疵:将
int作为const int&返回在我看来有点过度设计。假设const int&将在内部编译为一种指针,这可能会导致不必要的间接(访问 const 引用的内容)以及返回更多字节(例如在 64 位拱形上。其中int通常仍然有 32 位)。此外,假设您在错误情况下不能或不想throw:使用int只是return一个积分。使用const int&,您需要一些可寻址的东西,例如static int dummy;.
标签: c++ exception return getter