关于初始化列表和构造函数的问题
类中有const修饰的变量,所以只能用初始化列表对其进行初始化,而不能用备注释的那个构造函数进行初始化,谁能说说初始化列表的机制是什么?它到底是怎么实现的?我用反汇编看了,2钟方法的汇编是一样的,如果没看错的话一模一样啊。
#include <iostream>using namespace std;class HasPtr{public: HasPtr(int *p, int i):ptr(p), val(i){ }// HasPtr(int *p, int i)// {// ptr = p;// val = i;// } int get_ptr_val() const { return *ptr; } void set_prt_val(int val) const { *ptr = val; }private: int *ptr; const int val;};int main(void){ int i = 42; HasPtr p1(&i, i); HasPtr p2(p1); cout << p2.get_ptr_val() << endl; p1.set_prt_val(4); cout << p2.get_ptr_val() << endl; cout << p1.get_ptr_val() << endl; p2.set_prt_val(5); cout << p1.get_ptr_val() << endl; return 0;}