Если я это сделать:станд :: initializer_list и оператор =
MyClass a=b;
Это использует конструктор копирования для инициализации a
, и перегрузка =
оператор не участвует, не так ли?
Оператор =
будет использоваться, если a
уже был инициализирован, а затем я позже присвоил его чему-то еще.
Я видел this:
S(std::initializer_list<T> l) : v(l) {
Используется как:
S<int> s = {1, 2, 3, 4, 5}; // direct list-initialization
Это интересно. Это инициализация и использует оператор =
, но он вызывает конструктор, который не является конструктором копирования. Почему это не вместо принимать синтаксис так:
S<int> s {1, 2, 3, 4, 5};
Вот как std::vector
constructor с std::initializer_list
работ. Кажется запутанным использовать оператор =
для инициализации объекта, когда этот оператор не вызывает построение копии, не так ли?
[Тест] (http://coliru.stacked-crooked.com/view?id=32e42256c131b9f31d69b59d16ccecbf-50d9cfc8a1d350e7409e81e87c2653ba) –