【发布时间】:2014-02-27 10:41:26
【问题描述】:
我有一个函数,它返回一个指向给定名称的 bool 类型对象的指针。如果找不到对象,则返回nullptr。
现在我想将一个变量设置为返回的布尔值,如果没有找到,则设置为 false。可以这样写吗?
bool flag = *Get("name");
这是否等同于这个更长的实现?
bool *result = Get("name");
bool flag = result == nullptr ? false : *result;
【问题讨论】:
-
你最好用
bool Get(const char* identifier, bool if_missing)函数重载(或者get_with_default(...),如果你愿意的话),所以你可以说bool flag = Get("name", false);。许多接口都使用这种方法。 -
@TonyD 这听起来很有趣。不幸的是,get 函数实际上是像
Get<T>(std::string Key)这样模板化的,因此,对于所有类型来说,证明回退并不是那么容易。对于没有默认构造函数的类型,我不能像T *Fallback = new T()那样默认它。 -
@danijar:这仍然可以工作。考虑 C++03 中的
vector::resize函数(它在 C++11 中更改)。它有一个使用默认构造函数的默认参数。如果该类型没有默认构造函数,则该函数仍可编译,但调用者必须提供参数。 -
@danijar:
template <typename T> T Get(const char* identifier, const T& if_missing) { T* p = Get(identifier); return p ? *p : if_missing; }...不是吗?您不需要默认构造函数 - 您可以让调用者指定他们想要的后备值作为第二个if_missing参数(尽管有时为该参数提供默认构造的默认值会很好)。 (当我建议重载“Get”时,我想到了这一点,其中if_missing是强制性的以确保新行为,而get_with_default可以提供默认的第二个参数)。 -
@TonyD 这会使界面更复杂,这就是为什么我不会在这里使用这种方法。不过谢谢你告诉我这个有趣的概念。
标签: c++ pointers syntax shortcut nullptr