Jednym z ciekawszych aspektów D w porównaniu z C lub C++ jest to, że zmienne są domyślnie inicjowane zgodnie z ich typem, gdy nie podano wartości przypisania.Czy pominięto redundantne domyślne inicjacje?
int foo() {
int o; // int.init == 0
o++;
return o; // returns 1
}
W przeciwieństwie do C i C++, które po prostu pozostawia zmienne z potencjalnymi śmieciami, D zapewnia, że śmieci nigdy nie są czytane z prawie wszystkich typów zmiennych. Jednak biorąc pod uwagę tę prostą, tylko hipotetyczną funkcję, r
nigdy nie jest czytany przed ustawieniem na i
i jest pewne, że zadanie to zostanie ostatecznie zrealizowane.
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;
}
- W przypadku, gdy jest pewne, że zmienna zostanie określony w przyszłości bez poprzedniego odczytu, będzie domyślnym inicjalizacji jeszcze zdarzyć, zgodnie z normą?
- Czy z kompilatorów DMD/GDC jest znana optymalizacja (jak w przypadku pominięcia domyślnej inicjalizacji , gdy ta domyślna wartość nigdy nie jest odczytywana ze zmiennej )?
- Jeśli żadna z powyższych opcji, nie ma niezłej pracy do o całkowicie niezainicjowanej zmiennej?