7
與C或C++相比,D的好奇之處在於,當未提供賦值時,變量將根據其類型進行默認初始化。是否忽略了多餘的默認初始化?
int foo() {
int o; // int.init == 0
o++;
return o; // returns 1
}
相比於C和C++,它只是留下變量與潛在的垃圾,d可以確保垃圾不會從幾乎所有類型的變量中讀取。但是,考慮到這個簡單的假設函數r
在設置爲i
之前從未讀取,並且可以肯定最終會進行分配。
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;
}
- 在可以確定的是一個變量將在 將來定義之前沒有讀,會默認初始化 仍然發生的情況下,根據標準?
- 從DMD/GDC編譯器中得知它是否優化它們(如從中忽略默認值 初始值,當從 變量讀取默認值時)?
- 如果以上都不是,是否有一個很好的解決方案 有一個完全未初始化的變量?