Hin*_*sum 7 c++ double static const c++11
结构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;
}
Run Code Online (Sandbox Code Playgroud)
编译将导致错误:
$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.
Run Code Online (Sandbox Code Playgroud)
为什么这么奇怪为什么static int可以是const?double应该是constexpr?
const遵循 C++98 和 C++03 中定义的原始语言规范。通常不允许static const在 C++98 中为成员提供类内初始化器。static constC++98 中对整型和枚举类型的对象执行此操作的可能性是对这些类型进行特殊处理的一部分。
constexpr是 C++11 中引入的新功能。它的设计不同,并且适用于所有类型。
因此,您可以只使用constexpr整数和浮点类型,而无需考虑任何不均匀性。
如果继续在这样的上下文中使用const,您将不得不处理 C++98 遗留问题。然而,C++17 将引入内联变量,这也使得对任何类型的对象使用类内初始化器成为可能inline static const。