Да, для встроенных типов int x = 1;
и int x(1);
такие же.
При построении объектов типа класса эти два разных синтаксиса инициализации отличаются друг от друга.
Obj x(y);
Это прямой инициализация и инструктирует компилятор искать однозначный конструктор, который принимает y
, или что-то, что y
может быть неявно преобразован в, и использует этот конструктор для инициализации х.
Obj x = y;
Это инициализации копии и инструктирует компилятор для создания временного Obj
путем преобразования y
и использует конструктор копирования Obj
«s для инициализации x
.
Copy инициализационные эквивалентно прямой инициализации когда тип y
такой же, как тип x
.
Для копирование initalization, так как временное использование является результатом неявного преобразования, конструкторы с пометкой explicit
не учитываются. Конструктор копирования для построенного типа должен быть доступен, но сама копия может быть исключена компилятором в качестве optmization.
Dupe: http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-between-copy-initialization-and-assignment-initializ –
Не совсем то же самое. Этот вопрос, по-видимому, особенно касается инициализации POD. – Boojum