Có, được xây dựng trong các loại int x = 1;
và int x(1);
giống nhau.
Khi xây dựng các đối tượng thuộc loại lớp thì hai cú pháp khởi tạo khác nhau khác nhau một cách tinh tế.
Obj x(y);
Đây là trực tiếp khởi và chỉ thị các trình biên dịch để tìm kiếm một nhà xây dựng rõ ràng rằng phải mất y
, hoặc cái gì đó y
có thể được ngầm chuyển đổi sang, và sử dụng constructor này để khởi tạo x.
Obj x = y;
Đây là bản sao khởi và chỉ thị các trình biên dịch để tạo ra một tạm thời Obj
bằng cách chuyển đổi y
và sử dụng bản sao constructor Obj
's để initalize x
.
Sao chép initalization tương đương với khởi trực tiếp khi loại y
cũng giống như các loại x
.
Đối với sao chép initalization, vì tạm thời được sử dụng là kết quả của chuyển đổi ngầm, nhà thầu được đánh dấu explicit
không được xem xét. Các nhà xây dựng bản sao cho kiểu xây dựng phải có thể truy cập được nhưng bản thân nó có thể bị loại bỏ bởi trình biên dịch như là một sự lựa chọn.
Nguồn
2009-10-03 06:38:38
Dupe: http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-between-copy-initialization-and-assignment-initializ –
Không hoàn toàn giống nhau. Câu hỏi này dường như đặc biệt về việc khởi tạo POD. – Boojum