Tôi muốn biết, trong c + +, khi nào việc khởi tạo các đối tượng diễn ra?
Có phải lúc biên dịch hoặc thời gian liên kết không?
Đối với ví dụ:khởi tạo các đối tượng trong C++
//file1.cpp
extern int i;
int j=5;
//file2.cpp (link with file1.cpp)
extern j;
int i=10;
Bây giờ, những gì hiện biên dịch làm: theo tôi, nó phân bổ lưu trữ cho các biến.
Bây giờ tôi muốn biết:
hiện nó cũng đặt giá trị khởi tạo trong bộ nhớ đó hoặc được thực hiện tại thời gian liên kết?
Còn các thành viên "const tĩnh" (không phải lớp học) thì sao? Chúng thực sự tồn tại như một 'biến'? Tôi nghĩ rằng mọi cách sử dụng chúng chỉ đơn giản được thay thế bằng giá trị và biến "const tĩnh" biến mất. Đúng? Đối với phần còn lại, tổng quan tốt, +1. – Patrick
Ok..Vì vậy, ở trên mã..vì những điều sau đây có xảy ra không? 1. trong khi biên dịch file1.cpp, trình biên dịch để lại i vì nó không phân bổ lưu trữ cho i. 2. trình biên dịch phân bổ lưu trữ cho j, nhưng không khởi tạo nó. 3. Trong khi biên dịch file2.cpp, trình biên dịch rời khỏi j vì nó là i.e không phân bổ dung lượng lưu trữ cho nó. 4. trình biên dịch phân bổ lưu trữ cho i, nhưng không khởi tạo nó. 5. Trong khi liên kết file1.o và file2.o, bây giờ hãy để file2.o được khởi tạo trước, vì vậy bây giờ: Liệu j có giá trị ban đầu là 0 không? hoặc không được khởi tạo? –
@ Patrick, điểm tốt, tôi không biết chắc chắn. Tôi đoán bạn là đúng, vì chi phí có một biến cao hơn giá trị nội tuyến cho các loại cơ bản. Tuy nhiên không chắc chắn 100% nếu tất cả các trình biên dịch hoạt động theo cách đó ... – jdehaan