почему folly :: future BrokenPromise делает конструктор const char * явным? - PullRequest
0 голосов
/ 01 июня 2018

Я заметил определение 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 Ответ

0 голосов
/ 01 июня 2018

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

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

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

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

...