C++常成员的赋值问题

有这样的一个类
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){}//a不是常成员吗?不是常成员的赋值要在类外吗?

第一个问题解释如下:
把形参定义为引用类型&可以提高参数传递的效率。引用类型的形参与相应的实参占有相同的空间,其取得是该变量的地址,所以引用类型又称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; //静态数据成员的定义
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-12-03
static成员要在类外部定义和初始化.
引用,没有默认构造函数的类成员,必须在初始化列表里初始化.
另外,赋值和初始化是两码.
详见C++ Primer第四版.
第2个回答  2009-12-03
谁说常成员赋值要在外面。 是 static成员要在外面实现和初始化
第3个回答  2009-12-03
不懂,学习中。。。。。。
相似回答