亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我不能在類中有一個非整數靜態const成員?

為什么我不能在類中有一個非整數靜態const成員?

C++
人到中年有點甜 2019-10-17 10:17:26
我注意到C ++不會編譯以下內容:class No_Good {  static double const d = 1.0;};但是,它很樂意允許將double更改為int,unsigned或任何整數類型的變體:class Happy_Times {  static unsigned const u = 1;};我的解決方案是將其更改為:class Now_Good {  static double d() { return 1.0; }};并認為編譯器將足夠聰明,可以在需要時進行內聯...但是,這使我感到好奇。為什么C ++設計人員可以讓我將const靜態地設置為int或unsigned,而不允許double?編輯:我在Windows XP上使用Visual Studio 7.1(.net 2003)。編輯2:問題已經回答,但是為了完成,我看到的錯誤是:error C2864: 'd' : only const static integral data members can be initialized inside a class or struct
查看完整描述

3 回答

?
POPMUISE

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]在多種情況下都需要一個計算結果為常量的表達式。如果在翻譯環境中評估浮動表達式,則算術精度和范圍至少應與在執行環境中評估表達式一樣大。


查看完整回答
反對 回復 2019-10-17
  • 3 回答
  • 0 關注
  • 583 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號