Почему folly::future BrokenPromise делает конструктор const char* явным?

Я заметил определение BrokenPromise в facebook folly::future library, я не могу понять цель конструктора 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 ответ

Конструкторы с 1 аргументом являются конструкторами преобразования. Если операция не является простой реинтерпретацией (и при этом без потерь), большинство стандартов кодирования говорят, что вы делаете это явно.

BrokenPromise строки - это не просто реинтерпретация строки без потерь. Таким образом, явный.

Есть и другие причины, чтобы избежать неявного преобразования; например, BrokenPromise может быть построен из 0 случайно если char const* был неявным.

Случай неявного может быть построением комплексного числа из одного числа с плавающей запятой; Реалы являются подмножеством комплекса.

Другие вопросы по тегам