0

我注意到 facebook folly::future 库中的 BrokenPromise 定义,我在这里无法理解显式 BrokenPromise(const char* type) 构造函数的目的?有必要吗?

class FOLLY_EXPORT BrokenPromise : public PromiseException {
 public:
  explicit BrokenPromise(const std::string& type)
      : PromiseException("Broken promise for type name `" + type + '`') {}

  explicit BrokenPromise(const char* type) : BrokenPromise(std::string(type)) {}
};

https://github.com/facebook/folly/blob/master/folly/futures/Promise.h#L47

4

1 回答 1

0

1 参数构造函数是转换构造函数。如果操作不仅仅是重新解释(并且无损),大多数编码标准都会说你让它明确。

字符串的 BrokenPromise 不仅仅是对字符串的无损重新解释。因此,明确的。

避免隐式转换还有其他原因;例如,如果是隐式的,则BrokenPromise可以0意外构造。char const*

非显式的情况可能是从单个浮点构造复数;实数是复数的一个子集。

于 2018-06-01T04:08:15.760 回答