Разница между разными способами инициализации std::string

В последнее время я видел довольно много людей, которые инициализируют свои std::string следующим образом:

std::string a{ "test" }; // Yes they do it with a single value

Теперь я бы не стал использовать это, если это не массив или не для передачи списка инициализации.
Но мне стало любопытно, есть ли смысл делать это предпочтительно поверх:

std::string a = "test";
std::string a ( "test" );

Все три работают без сомнения, и я понимаю разницу между двумя последними.

Дает ли это какое-то улучшение производительности?

Код


person deW1    schedule 07.05.2015    source источник
comment
Найдите униформную инициализацию С++ 11. Умеренно связанный вопрос   -  person Borgleader    schedule 07.05.2015


Ответы (1)


Дает ли это какое-то улучшение производительности?

No.

В конце вызывается один конструктор std::string. Единственная разница заключается в том, как компилятор выбирает конструктор.

Разработчики, вероятно, выберут стиль в соответствии с использованием с классами, где это ДЕЙСТВИТЕЛЬНО важно, возможно, из-за наличия конструкторов списка инициализации или из-за сужающих преобразований или конструкторов explicit. А затем используйте тот же стиль для строк только ради единообразия.

Для std::string все три пути через компилятор заканчиваются выбором одного и того же конструктора.

person Ben Voigt    schedule 07.05.2015