问个有关const初始化的问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 00:17:05
class Base{
private:
double x,y;
const double p;
public:
Base(double m,double,n,double c):p(d)
{x=m;y=n;}
}

请问p为什么要以p(d)的方式来初始化,不能在{}里用p=d的方式来初始化吗?请高手解答

这个叫构造函数初始化列表。
从概念上讲,C++的构造函数分两个阶段执行:第一是初始化阶段,也就是初始化列表里的执行;第二个是普通的执行阶段,就是构造函数的函数体里面的语句。
从功能上将,他们的结果是相同的。
这个特性是很容易迷惑也是很多人都够不清楚的。

C++是通过构造函数建立一个对象的时候,执行构造函数的时候总是先执行初始化列表再执行函数体。并且最重要的一点是,执行到初始化列表的时候,当前对象其实还没有完全建立,所以绝对不能在初始化的变量前加上this(自己可以试试).
然后,初始化列表只能用在定义而不能是声明里。

const 初始化时必须要显示赋初值