温故而知新-const应用

class专属常量的声明和定义有两种方式:
[b]一种是in-class initialization 方式[/b],这种方式只适用于: (三者同时满足)
[list]
[*]1.新式编译器
[*] 2.integral type(ints, chars, bools)(floats, doubles有些例外,它支持这种方式,但要求类外部一定要有定义式)
[*] 3.static const
[/list]这种定义方式只需要在类定义段中提供声明即可。 static const int maxSize = 10;
如果要取此成员的地址,需要在类定义外加上这个变量的定义式: const int maxSize; (sizeof不包括在内,也就是即使计算这个成员的sizeof也一样能不需要写定义式)
目前的Gun编译器支持这种方式的定义

[b]一种是非in-class initialization方式[/b]:
它适用于其他的类内的static const类型的定义.
定义方式: 在类定义内声明: static const string title;
然后在类外定义: const string title = "using const";


enum hack可以解决const 无法解决的一些问题,比如在类中声明数组,而数组的长度需要用const常量来表示,而编译器正好不支持in-class initialization定义方式,这时需要使用enum hack。enum{maxSize = 10}。 初始化的值必须是integer类型(不包括float, double),而且使用sizeof(maxSize)测试名字长度,有结果,而且总是4(eclipse3.3中验证通过)

对于const或者非const对象都可以调用const 成员函数,而非const成员函数则只能对非const对象调用。


[color=red]问: 如何定义const 类型的类内成员变量?(注意:非static的,虽然这种要求很荒谬)[/color]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值