Есть ли проблемы с эффективностью Brace-init в C ++ 11?

Я рассматриваю возможность рефакторинга кодовой базы среднего размера, чтобы всегда использовать инициализацию скобок. Есть ли какие-либо проблемы с эффективностью, о которых я должен знать?

Несколько примеров могут быть POD-типами и встроенными типами, а как насчет больших классов с множеством параметров построения?

4

Решение

Это зависит от того, что вы подразумеваете под «всегда использовать инициализацию скобок». Если вы конвертируете конструктор как

X x(a, b, c);

в

X x{a, b, c};

(и поведение не меняется из-за выбора другого конструктора), тогда сгенерированный код не должен становиться более или менее эффективным. С другой стороны:

std::vector<std::string> v{
"long character string a",
"long character string b",
"long character string c"};

вполне может быть менее эффективным, чем

std::vector<std::string> v;
v.push_back("long character string a");
v.push_back("long character string b");
v.push_back("long character string c");

из-за упомянутой проблемы @dyp, что вектор не может выйти из initializer_list,

1

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector