[英]C++ and C++11 class static member, double should use “constexpr” while int can be “const”, why?
結構C定義了幾個靜態const成員,如下所示:
代碼如下:
#include<stdio.h>
struct C{
static int i;
static const int j=1;
static constexpr double d=1;
static const double d1=1.0;
};
int main(){
return 0;
}
編譯會導致錯誤:
$g++ testStatic.cpp -std=c++11
testStatic.cpp:6:25: error: in-class initializer for static data member of
type 'const double' requires 'constexpr' specifier
[-Wstatic-float-init]
static const double d1=1.0;
^ ~~~
testStatic.cpp:6:5: note: add 'constexpr'
static const double d1=1.0;
^
constexpr
1 error generated.
為什么這么奇怪為什么static int可以是const,double應該是constexpr,什么是理性的
const
遵循C ++ 98和C ++ 03中定義的原始語言規范。 通常不允許在C ++ 98中為static const
成員提供類內的initalizer。 在C ++ 98中對整數和枚舉類型的static const
對象執行此操作的可能性是對這些類型的特殊處理的一部分。
constexpr
是C ++ 11中引入的新功能。 它的設計不同,適用於所有類型。
因此,您可以將constexpr
用於整數和浮點類型,並忘記任何非均勻性。
如果在這種情況下繼續使用const
,則必須處理C ++ 98遺留問題。 但是,C ++ 17將引入內聯變量 ,這也應該可以為任何類型的inline static const
對象使用類內初始化器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.