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

В этой презентации: 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, что делает это ключевое слово полезным, если у вас есть более одного параметра конструктора?

10

Решение

В 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 Ключевое слово теперь имеет значение для всех конструкторов, а не только для конструкторов преобразования.

16

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]