看C++primer里面关于引用的一段话如何理解

pzp 2006-06-16 09:38:06
第三版里面287页7.3.2 引用和指针参数的关系一节指出:
引用必须被初始化为指向一个对象,一但初始化了,就不能再指向其它对象。

如何理解,因为在vs.net中我发现如下代码也可以编译过去的
class CPeople
{
public:
CPeople(){};
~CPeople(){};
protected:
CString m_strName;
int m_nAge;
};


void TestRef()
{
CPeople my1,my2;
CPeople& pTmp = my1;
pTmp = my2;
}
...全文
122 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sarh2os 2006-06-16
  • 打赏
  • 举报
回复
引用必须被初始化为指向一个对象,一但初始化了,就不能再指向其它对象。
......................................................................
就是说引用一旦被初始化,它就和被引用对象绑定。之后对引用做的所有操作均发生在被引用对象身上。
lz还应该区分初始化和赋值的区别(这很重要!)
CPeople& pTmp = my1;//初始化
pTmp = my2;//赋值
虽然用的都是“=”,但是意义完全不同。初始化只发生在对象被定义的时刻。赋值可以发生在对象被定义之外的任何时刻。
所以不能把pTmp = my2;理解成pTmp指向my2。只能理解成my2对pTmp赋值。实际上就是通过pTmp对my1赋值。
magicalking 2006-06-16
  • 打赏
  • 举报
回复
错误的情况比如
CPeople& pTmp = my1;
CPeople& pTmp = my2;
Cccufo 2006-06-16
  • 打赏
  • 举报
回复
#include<iostream>
#include<string>
using namespace std;
class CPeople
{
public:
CPeople(){};
CPeople(string name, int age)
{
m_strName=name;
m_nAge=age;
}
~CPeople(){};
string m_strName;
int m_nAge;
};
void main()
{
CPeople my1("tom",30),my2("jake",20);
CPeople& pTmp = my1;
cout<<pTmp.m_strName<<" "<<pTmp.m_nAge<<endl;
pTmp = my2;
cout<<pTmp.m_strName<<" "<<pTmp.m_nAge<<endl;
cout<<my1.m_strName<<" "<<my1.m_nAge<<endl;
}
//lz这里的类的应用,可以指向其它对象的??大家解释下吧
yuyuan830705 2006-06-16
  • 打赏
  • 举报
回复
一楼是正确的。就是引用。顺便补充一下。C++里可以用引用作为参数。这时候和指针就是不一样了。指针可以传递NULL。而引用不可以传递NULL,相对比较安全。而且速度不影响,和指针传递不相上下。
pzp 2006-06-16
  • 打赏
  • 举报
回复
恩,可能是这个意思,就是说如果pTmp仍旧指向my1,对pTmp的操作仍旧是对my1的操作.
lucky_huastar 2006-06-16
  • 打赏
  • 举报
回复
楼上正解!
希望有人能把C++ Primer的那段文字“一但初始化了,就不能再指向其它对象”描述的错误情况,举个例子!
freshairfly 2006-06-16
  • 打赏
  • 举报
回复
这个的意思并不是说:pTmp已经指向了my2,而是调用CPeople的缺省拷贝构造函数将my2拷贝倒pTmp指向得对象(也就是my1)里面了。
hsilz 2006-06-16
  • 打赏
  • 举报
回复
CPeople& pTmp = my1;
这句是引用
pTmp = my2;就是my1= my2;的意思

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧