温故而知新-const应用

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

一种是非in-class initialization方式
它适用于其他的类内的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对象调用。



问: 如何定义const 类型的类内成员变量?(注意:非static的,虽然这种要求很荒谬)

你可能感兴趣的:(Const,effective c++)