В этой презентации: http://qtconference.kdab.com/sites/default/files/slides/mutz-dd-speed-up-your-qt-5-programs-using-c++11.pdf
Автор предполагает, что N-арные конструкторы выигрывают от версии C ++ 11 explicit
ключевое слово.
Что изменилось в C ++ 11, что делает это ключевое слово полезным, если у вас есть более одного параметра конструктора?
В C ++ 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
Ключевое слово теперь имеет значение для всех конструкторов, а не только для конструкторов преобразования.
Других решений пока нет …