为什么folly :: future BrokenPromise使const char *构造函数显式?

时间:2018-06-01 04:00:37

标签: c++ facebook folly

我注意到facebook中的BrokenPromise定义愚蠢:: future库,我无法理解explict 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

1 个答案:

答案 0 :(得分:0)

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

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

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

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