Объявление переменных C ++ и правила инициализации - PullRequest
3 голосов
/ 03 августа 2010

Рассмотрим следующие способы объявления и инициализации переменной типа C:

C c1;

C c2;
c2 = C();

C c3(C());

C c4 = C();

Все ли они полностью эквивалентны друг другу или некоторые из них могут отличаться в зависимости от точного определения C? (при условии, что у него есть публичные конструкторы по умолчанию и конструкторы копирования).

1 Ответ

10 голосов
/ 03 августа 2010

Это означает:

C c1;   // default constructor

C c2;   // default constructor
c2 = C(); // default constructor followed by assignment

C c3(C());   // default constructor possibly followed by copy constructor

C c4 = C();  // default constructor possibly followed by copy constructor

Обратите внимание, что компилятор может исключить вызовы конструктора копирования.Они эквивалентны?- ну, это зависит от того, что делают конструктор копирования и оператор присваивания.

...