C++常数据成员的赋值问题 const int a,static const int b

来源:百度知道 编辑:UC知道 时间:2024/09/25 22:31:07
有这样的一个类
class A
{
public:
A(int i);
const int& r;//设这个r有什么用?而且用 const int& r !是什么意思?常引用???
private:
const int a;
static const int b;
};
const int A::b=10;
A::A(int i):a(i),r(a){}//对r的赋值为什么不能r(i)直接赋值?
假如我定义个对象A oo(4);那么这个oo中的r是不是就不能再赋值了?

引用当然就是不能变的, 这个const是修饰int的, 就是说这是一个const int的变量的引用
因为i不是 const int, 另外i的生存期也不够(函数调用内的变量)。

是的

实际编译的时候对const变量是特殊处理的, 内容会被直接替换而根本不经过读内存的过程, 所以就算你想办法给一个const的东西直接赋值了, 再用这个东西也很可能还是初始值(因为这个在编译期就已经确定了)

第一个问题解释如下:
把形参定义为引用类型&可以提高参数传递的效率。引用类型的形参与相应的实参占有相同的空间,其取得是该变量的地址,所以引用类型又称hidden point(隐藏的指针)。
当把形参定义为引用类型时,为了防止通过引用类型改变相应实参的值,可以在引用形参时加上const,表示不能修改所引用的值。如:
void f(const int &x)
{......
x=1; //error
......
}

第二个问题:
常成员的赋值可以在类内,const int x=3;可以在任何地方写,只不过强调x不可以改变之而已。你想表达的是static的用法。
在c++中,采用静态数据成员是来解决同一个类的对象共享数据的问题。
静态数据的成员必须要在类的外部给出它的定义,定义时可以初始化。如:
class A
{ int x,y;
static int shared;
public:
A(){x=y=0;}
......
};
int A::shared=0; //静态数据成员的定义