3 回答

TA貢獻1765條經驗 獲得超5個贊
我看不出技術原因
struct type {
static const double value = 3.14;
};
是禁止的。您發現它可以工作的任何地方都是由于非便攜式實現定義的功能。它們似乎也只有有限的用途。對于在類定義中初始化的整數常量,可以使用它們并將它們作為非類型參數傳遞給模板,并將它們用作數組尺寸的大小。但是對于浮點常量,您不能這樣做。允許浮點模板參數會帶來它自己的規則集,這確實不值得麻煩。
但是,下一個C ++版本將允許使用constexpr:
struct type {
static constexpr double value = 3.14;
static constexpr double value_as_function() { return 3.14; }
};
并且會做出type::value一個常量表達式。同時,最好的選擇是遵循以下模式std::numeric_limits:
struct type {
static double value() { return 3.14; }
};
它不會返回常量表達式(在編譯時未知值),但這僅在理論上重要,因為實際情況下無論如何都將內聯該值。請參閱constexpr建議。它包含
4.4
Floating-point constant expressions
傳統上,在編譯時評估浮點常量表達式是一個棘手的問題。為了統一性和通用性,我們建議允許使用任何浮點常量表達式初始化的浮點類型的常量表達式數據。這還將增強與C99 [ISO99,§6.6]的兼容性,從而允許
[#5]在多種情況下都需要一個計算結果為常量的表達式。如果在翻譯環境中評估浮動表達式,則算術精度和范圍至少應與在執行環境中評估表達式一樣大。
- 3 回答
- 0 關注
- 583 瀏覽
添加回答
舉報