3 回答

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