Явный для N-арных конструкторов?

В этой презентации: http://qtconference.kdab.com/sites/default/files/slides/mutz-dd-speed-up-your-qt-5-programs-using-c++11.pdf

Автор предлагает, чтобы конструкторы N-ary извлекали выгоду из версии ключевого слова explicit версии С++ 11.

Что изменилось в С++ 11, что делает это ключевое слово полезным, если у вас есть несколько параметров конструктора?

Ответ 1

В С++ 11, если у вас есть не явный конструктор для класса A, который имеет несколько параметров (здесь я использую A::A(std::string, int, std::string) в качестве примера), вы можете инициализировать аргумент этого типа с инициализацией скобки

void foo(A a);
foo({"the", 3, "parameters"});

Аналогично, вы можете сделать то же самое с возвращаемыми значениями:

A bar() {
  return {"the", 3, "parameters"};
}

Если конструктор, однако, explicit, они не будут компилироваться. Следовательно, ключевое слово explicit теперь имеет значение для всех конструкторов, а не только для конструкторов преобразования.