define宏定义和const常变量区别:
是宏定义,程序在预处理阶段将用define定义的内容并且了替换。
所以程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。const定义的常量,在程序正常运行时在常量表中,系统为它分配内存。
定义的常量,预处理时只是因为就通过了替换。所以才编译程序时肯定不能参与数据类型检验。const定义的常量,在编译时进行不是很严的类型检验,也可以以免出错。
定义方法表达式时要再注意“边缘效应”,例如如下定义:#definen23//我们想像的n值是5,我们这样使用nintan/2//我们想象之外的a的值是2.5,可实际上a的值是3.5
不是的,在对象生存期内是不可以哦决定的,过了生存期那是大多数变量了。
在c中,const成员变量也没法在类定义处重新初始化,不能是从构造函数重新初始化列表参与,因此要有构造函数。
const数据成员只在某个对象生存期内是常量,而这对整个类而言却是几何涡轮的。毕竟类可以创建多个对象,相同的对象其const数据成员的值是可以不同。因此不能在类的声明中系统初始化const数据成员,毕竟类的对象没被创建战队时,编译器到底const数据成员的值是什么。
const数据成员的初始化只能在类的构造函数的初始化列表中进行。要想建立起在整个类中都恒定的常量,肯定用类中的枚举常量来实现,的或staticcosnt。
classtest
{
welfare:
test():a(0){}
enum{size1100,size2200}private:
constinta//只能在构造函数初始化设置列表中初始化
staticintb//在类的利用文件中定义方法并初始化操作
conststaticintc//与staticconstintc同一。
}
inttest::b0//static成员变量不能在构造函数重新初始化列表中初始化操作,因为它属于什么某个对象。
cosntinttest::c0//注意一点:给动态和静态成员变量变量时,不是需要加static修饰符。但要加cosnt