2010-06-16 41 views
9
int *pi = new int(0); 

Ý nghĩa của 0 ở đây là gì? Nó có nghĩa là mảng số nguyên có chiều dài 0 không?Ý nghĩa của int (0) trong int * pi = new int (0) ;?

+0

Câu hỏi hay. Có một nền tảng cơ bản? Các bộ khởi tạo mảng cơ bản là parens trong khi các ngôn ngữ C khác sử dụng các dấu ngoặc vuông. –

Trả lời

12

Đây là trình khởi tạo (tham số hàm tạo). Int mới được tạo sẽ có giá trị là 0.

+6

Đây là bộ khởi tạo. Nhưng nó không phải là một tham số hàm tạo. Loại 'int' không có hàm tạo. – AnT

+1

@AndreyT: Bạn có thể giải thích? Nếu hàm tạo có một đối số, thì nó sẽ được phân biệt như thế nào với trình khởi tạo? Sự khác biệt thực sự giữa hai điều này là gì? – understack

+6

@understack: "Constructor" là một hàm thành viên đặc biệt có trong các loại * class *. Các loại không phải lớp (như 'int') không có hàm thành viên và, tất nhiên, không có hàm tạo. Quá trình bạn đang xử lý ở đây được gọi là * khởi tạo *. Khởi tạo là một khái niệm không tầm thường, nó được định nghĩa khác nhau cho các loại khác nhau. Để khởi tạo kiểu lớp thường (nhưng không phải luôn luôn) có nghĩa là một cuộc gọi hàm tạo. Đối với việc khởi tạo kiểu không phải lớp được định nghĩa mà không liên quan đến bất kỳ "hàm tạo" nào cho các lý do nói trên. – AnT

7

Nó có nghĩa là bạn muốn có một con trỏ đến một int, và cho giá trị của int rằng bằng 0.

Tôi đã từng bị mất quá lâu trên một lỗi mà hóa ra là một người nào đó đã viết new char(10) khi họ có nghĩa new char[10] . Trình biên dịch là tốt với nó nhưng nó gây ra vấn đề tham nhũng lớn, mà rất khó để phát hiện. Đây là cách đây hơn 10 năm và chúng tôi không có công cụ chúng tôi làm bây giờ. Sẽ không bao giờ quên nó.

-1

Đối với tôi, ý nghĩa của 0 cũng là ai đó đang nói,

tôi cố tình muốn đây là 0

hơn là một số 'giá trị mặc định' mà [sửa] trong nhiều trường hợp có khả năng cũng là 0 Trong nhiều bản biên dịch gỡ lỗi sẽ được đặt thành 0, nhưng trong bản biên dịch phát hành thường sẽ là giá trị đã có trong bộ nhớ chưa được khởi tạo.

+0

Giá trị mặc định chỉ là "chưa được khởi tạo", vì vậy không có thông báo gì sẽ ở đó. Hầu hết các triển khai không khởi tạo bộ nhớ động, được cấp phát động trước khi cung cấp cho bạn (ngoại trừ các triển khai gỡ lỗi, một số trong đó sử dụng các giá trị cờ để giúp bạn theo dõi lỗi). –

+0

Rất tiếc, khá đúng, tôi đã nghĩ về Int và các lớp khác như bool có giá trị mặc định như sai, khiến bản thân bị phân tâm. –

+0

Trên thực tế, có, có một giá trị mặc định ở đó - 'new int()' sẽ được khởi tạo giá trị. Nó chỉ là 'int' mới chưa được khởi tạo. –

Các vấn đề liên quan