首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

成员常量的理解!该怎么解决

2012-03-07 
成员常量的理解!!我在The C++ Programming Language中,对成员常量有下面的描述:对于那些静态整型成员,可以

成员常量的理解!!
我在The C++ Programming Language中,对成员常量有下面的描述:
对于那些静态整型成员,可以给他的成员声明加上一个常量表达式作为初始式,如:
class Curious{
public:
static const int c1=7;//OK,但记得要去定义
static int c2=11;错误,非const
 const int c3=13;错误,非static
  //.....
};
当且仅当你用到某个被初始化的成员,而且需要将它作为对象存入存储器时,这个成员就必需在某处有(唯一)的定义,初始式不必重复写:
const int Curious::c1;//必须,但这里不必重复初始式


上面这段话该怎么理解啊???
最开始那个类里面那个不是声明和定义一起的嘛?怎么他说不是定义啊。。
还有说那个c2和c3的错误。。怎么理解啊??

[解决办法]
1. 定义写在类外 写在类里是声明
2. static定义要在类外
3. const定义只能使用初始化列表
[解决办法]
static const int c1=7;//这就是所谓的in-class初值设定,是声明而不是定义,且只允许对整数常量进行(所以必须是const修饰的int,char,bool等)

有些编译器不支持这个语法,你就必须在类外定义初值const int Curious::c1=7;//此时类中只能声明static const int c1而不能获取初值。

有些编译器虽然支持该语法却依然坚持要看到一个定义式,你就必须在类外提供定义式const int Curious::c1//因为类中已经获得初值,故这时不要重复定义
[解决办法]
记住,要直接在类中获取初值(不用构造函数)只有用上面说的in-class规则,即要求该数据成员为static+const+整数类型

热点排行