因题目虽然简短,但很有意思。有点小坑,表面看上去觉得是正确的,实际是错误的。所以在做题时多费了点时间,故在此记录一下,以便以后查阅。
解题是基于第7章 类的静态成员 的知识点、VS2017环境。
题目:下面的静态数据成员的声明和定义有错误吗?请解释原因。
//Example.h
class Example{
public:
static double rate = 6.5;
static const int vecSize = 20;
static vector<double> vec(vecSize);
};
//Example.c
#include"Example.h"
double Example::rate;
vector<double> Example::vec;
解:
1、static double rate = 6.5; //错误,带类内初始化的表达式的静态数据成员 必须具有不可变的 常量整型类型。
知识点1:一般来说,不能在类的内部初始化静态成员。相反,必须在类的外部定义和初始化每个静态成员。
知识点2:然而,可以为静态成员提供const 整数类型的类内初始值,不过要求静态成员必须是字面值常量类型的constexpr。(以上两点摘至C++Primer第五版 第七章 270页)
故: 应该类内声明,类外定义和初始化静态成员 。static double rate = 6.5修改为 static do