Почему 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*
был неявным.
Случай неявного может быть построением комплексного числа из одного числа с плавающей запятой; Реалы являются подмножеством комплекса.