经常碰到这类问题,以前也记录过,不过都留在原公司拿不出来,现在再记录一些基本的知识,以备不时之需。
c++各种不同类型成员初始化总结,可以初始化的情况有如下四个地方:
1、在类的定义中进行的,只有const 且 static 且 integral 的变量(还得看编译器是否支持,VC6.0就不支持)。
2、在类的构造函数初始化列表中, 包括const对象和Reference对象。
3、在类的定义之外初始化的,包括static变量。因为它是属于类的唯一变量。
4、普通的变量可以在构造函数的内部,通过赋值方式进行。当然这样效率不高。
//-----------------Static.h----------------------------
#pragma once
class Test
{
private :
int var1;
// int var11 = 11; 错误的初始化方法
const int var2 ;
// const int var22 = 22222; 错误的初始化方法
static int var3;
// static int var33 = 33333; 错误,只有静态常量成员才能直接赋值来初始化
// static const int var4 = 4444; //正确,静态常量成员可以直接初始化,因编译器不同吧,VC6.0就不行。
static const int var44;
int& var5; // 引用型成员变量
public:
Test(void);
};
//--------------------Static.cpp-----------------------------------
#include "Static.h"
// int Test::var1 = 1;; 错误 静态成员才能初始化
// int Test::var2 = 2; 错误
// int Test::var44 = 4; // 错误的方法,提示重定义
int Test::var3 = 3; //静态成员的 正确的初始化方法
const int Test::var44 = 44; // 正确的初始化方式
Test::Test(void)
: var1(1)
, var2(2) //正确的初始化方法 , var3(3) 不能在这里初始化
, var5(var1)
{
var1 = 1; //正确, 普通变量也可以在这里初始化
// var2 = 2; 错误,因为常量不能赋值,只能在 “constructor initializer (构造函数的初始化列表)” 那里初始化
var3 = 3; //这个赋值时正确的,不过因为所有对象一个静态成员,所以会影响到其他的,这不能叫做初始化了吧
// var5 = var1; // 错误,引用型成员变量只能在构造函数初始化列表中初始化
}