列表初始化(initialization list)与赋值(assignment)

哪些情况只能用 initialization list,而不能用 assignment

  • const 和 reference类型成员变量,由于只能被初始化而不能做赋值操作,因此只能用初始化列表
  • 类的构造函数需要调用基类的构造函数时
  • 数据成员是对象,并且这个对象只有含参数的构造函数,没有无参数的构造函数
class Base {
private:
	int a;
public:
	Base(){}
	Base(int i): a(i){}
    void printA(){
        cout << "a = " << a << endl;
    }
};

class D: public Base{
private:
	int b;
public:
	D(int x, int y): Base(x){
		// a = x;     // 编译错误,a为private,无法在子类中访问
		// Base(x);   // 编译错误,调用方式错,应列表初始化
		b = y;
	}
    void printB(){
        cout << "b = " << b << endl;
    }
};

  • 还有一种构造函数的使用情况
struct CLS {
    int m_i;
    CLS(int i): m_i(i) {}
    CLS() {
    	/**
    	 * 不报错,此处调用CLS(0)只是在栈上产生一个新的临时对象,
    	 * 对自己本身毫无用处,所以m_i也不会为0.
    	 */
        CLS(0);
    }
};

// 以下方法确可以使m_i为0. gcc version 7.4.0
struct CLS {
    int m_i;
    CLS(int i): m_i(i) {}
    CLS(): CLS(0){}
};
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值