Mở rộng trên Sparr's answer
Khởi tạo và phân công là hai hoạt động riêng biệt mà xảy ra để sử dụng các nhà điều hành cùng ("=") ở đây.
nghĩ về nó như thế này:
Hãy tưởng tượng rằng có 2 chức năng, gọi InitializeObject
và AssignObject
.Khi trình biên dịch thấy thing = value
, nó xem xét ngữ cảnh và gọi một InitializeObject
nếu bạn đang tạo một thing
mới. Nếu không, thay vào đó, hãy gọi số AssignObject
.
Thường thì điều này là tốt như InitializeObject
và AssignObject
thường hoạt động theo cùng một cách. Ngoại trừ khi giao dịch với mảng char (và một vài trường hợp cạnh khác), trong trường hợp này chúng hoạt động khác nhau. Tại sao làm điều này? Vâng đó là một bài viết khác liên quan đến ngăn xếp so với đống và vv và vv.
PS: Là một sang một bên, suy nghĩ về nó theo cách này cũng sẽ giúp bạn hiểu nhà xây dựng bản sao và những thứ khác như vậy nếu bạn đã từng dấn thân vào C++
Nguồn
2009-02-23 22:59:03
Câu trả lời hay, ngoại trừ bạn không bao giờ nên sử dụng đồng bằng strcpy nữa. Sử dụng strncpy hoặc strlcpy. – dwc
Ngoài ra, s phải là const char *, không phải char *. – aib
's [0] = 'x'; s [1] = 'y'; s [2] = 'z'; s [3] = 'm'; 'hoạt động nếu người ta muốn thay thế các ký tự chuỗi từng cái một ngay cả sau khi khởi tạo. – RBT