Một trong những khía cạnh tò mò của D khi so sánh với C hoặc C++ là các biến được khởi tạo mặc định theo loại của chúng khi giá trị gán không được cung cấp.Các khởi tạo mặc định dư thừa có bị bỏ qua không?
int foo() {
int o; // int.init == 0
o++;
return o; // returns 1
}
Ngược lại với C và C++, chỉ đơn giản là để lại biến với rác tiềm năng, D đảm bảo rằng rác không bao giờ được đọc từ gần như tất cả các loại biến. Tuy nhiên, xem xét chức năng đơn giản này, chỉ là giả thiết, r
không bao giờ được đọc trước khi được đặt thành i
và chắc chắn rằng nhiệm vụ sẽ xảy ra sau cùng.
int foo2(int n) {
assert(n > 0 && n < 20);
int r;
for (int i = n ; ; i+=7) {
if (i % 3 == 0) {
r = i;
break;
}
}
return r;
}
- Trong một trường hợp chắc chắn rằng một biến sẽ được xác định trong tương lai mà không đọc trước, sẽ khởi tạo mặc định vẫn xảy ra, theo tiêu chuẩn?
- Được biết từ trình biên dịch DMD/GDC để tối ưu hóa chúng (như trong, bỏ mặc định khởi tạo khi giá trị mặc định đó không bao giờ đọc từ biến số )?
- Nếu không có điều nào ở trên, có một công việc tốt đẹp xung quanh để có biến hoàn toàn chưa được khởi tạo không?