Скажем, у вас есть переменная типа std::vector<std::string>
, и вы инициализируете ее списком инициализаторов:
using V = std::vector<std::string>;
V v = { "Hello", "little", "world", "of", "move", "semantics" };
Компилятор создаст временный std::string
для каждого строкового литерала, создаст список инициализаторов по ним, а затем вызовет ctor для V
и создаст вектор. Ctor не знает, что все эти строки являются временными, поэтому копировать каждую строку.
Я не нашел ничего в стандарте, который позволяет вектору ctor перемещать элементы, когда они являются временными.
Я что-то упустил или с помощью списков инициализаций приводит к ненужным копиям? Я пишу классы, где эта проблема может привести к значительно неэффективному коду. Было бы полезно оценить любую технику, чтобы избежать ненужных копий.