问个钱能书上的问题

milkbread 2004-07-16 01:35:19
钱能书上188页9.3节有这样一段话:
---------------------------
“如果引用类型T的初始值不是一个左值,那么将建立一个T类型的目标并用初始值初始化,那个目标的地址变成引用的值。”
----------------------------
这里不明白,怎么说是“那个目标的地址”作为引用的值呢???应该就是那个
目标作为引用的值啊?!
...全文
100 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
erwinrommel 2004-07-17
  • 打赏
  • 举报
回复
一个笨办法就是把取地址和引用分开想,这样就不会混淆了
Dong 2004-07-16
  • 打赏
  • 举报
回复
楼上的,其实double& rr=1;是错的啦。(一些编译器为了方便有支持)。

不过上面的理解却是对的。
milkbread 2004-07-16
  • 打赏
  • 举报
回复
钱能书上这句话后有这么个例子:
---------------------
double& rr=1;
这种情况下:
(1)、首先作必要的类型转换;
(2)、然后将结果置于临时变量;
(3)、最后,把临时变量的地址作为初始化的值。
所以上面的语句解释为:

double temp;
temp=double(1);
double& rr=temp;
---------------------------
第(3)步怎么说是将临时变量temp的地址赋给rr呢,引用是变量的别名,应该就是将
temp的值赋给rr吧?

Dong 2004-07-16
  • 打赏
  • 举报
回复
to erwinrommel(平沙落雁)
void f(int &j)
{
}
void main()
{
f(1);
}
这样会是错误的,因为1就不是左值了。
Dong 2004-07-16
  • 打赏
  • 举报
回复
“如果引用类型T的初始值不是一个左值,那么将建立一个T类型的目标并用初始值初始化,那个目标的地址变成引用的值。”


左值:一个可以被付值的变量(本人自己理解的:知道至少不全面)
本人认为(引号)这一句是错误的,因为引用类型T是要被引用的变量的别名,一定要存在一个变量(引用认为是有效的左值),如果没有会是错误的,虽然那一句话现在在JAVA里是可以实现的。但对c++来说不可以的。还请指点!!

先说明:本人菜鸟
erwinrommel 2004-07-16
  • 打赏
  • 举报
回复
&i 是传引用,但实际上,它传递的还是i的地址!比如:
void f( int& i )
{
//
}
f(j)
传入的是j的地址 将他付给i的地址,这样i和j就是同一个东东了。
具体点就是 j 的地址如果是 0x0001 那么 当调用 f(j)时, &i = 0x0001
所以此时i和j就是同一个元素了,明白了楼主,这个东西说起来很难说,我的表达能
力不好,呵呵

64,642

社区成员

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

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