const int x=i;
const int *p1=&x;
// int * const p2=&x; 错误的
出来工作后,才发现原来C++的类成员变量可以是引用变量。下面通过一个例子来说明(虽然没多大意义):
- #include <iostream>
- using namespace std;
- class A
- {
- public:
- A(int i=3):m_i(i){}
- void print()
- {
- cout<<"m_i="<<m_i<<endl;
- }
- private:
- int m_i;
- };
- class B
- {
- public:
- B(){}
- B(A& a):m_a(a){}
- void display()
- {
- m_a.print();
- }
- private:
- A& m_a;
- };
- int main(int argc,char** argv)
- {
- A a(5);
- B b(a);
- b.display();
- return 0;
- }
其中,要注意的地方就是引用类型的成员变量的初始化问题,它不能直接在构造函数里初始化,必须用到初始化列表,且形参也必须是引用类型。
凡是有引用类型的成员变量的类,不能有缺省构造函数。原因是引用类型的成员变量必须在类构造时进行初始化。
如果两个类要对第三个类的数据进行共享处理,可以考虑把第三个类作为这两个类的引用类型的成员变量。
char array[] = "abcdefg";
printf("%d\n",sizeof(array)); // 8
char *p = "abcdefg";
printf("%d\n",sizeof(p)); // 4
void func(char p[10])
{
printf("%d\n",sizeof(p)); // 4
}
//引用一个大小为10的数组,故结果为10
void func(char (&p)[10])
{
printf("%d\n",sizeof(p)); // 10
}
int main(void)
{
printf("%d\n",sizeof(char[2])); // 2
printf("%d\n",sizeof(char&)); // 1
return 0;
}