tao-of-rust-codes icon indicating copy to clipboard operation
tao-of-rust-codes copied to clipboard

[第二章] 2.7 关于临时值的概念

Open fengzixu opened this issue 5 years ago • 2 comments

页码与行数

  • 第17页,代码清单2-7
  • 第2行

文本或排版错误

关于临时值的解释,我觉得讲述的是很模糊的。这里我看到了两个版本

第一个版本来自书中,2-7代码清单我没看懂,看完完全不知道作者想表达什么 第二个版本来自作者给出的代码示例 image

最后我自己理解起来,其实想说明的就是

函数返回值是一个临时值,我们不能对临时值进行写入操作。但是我们可以对字面量或者说是临时值取地址,构造另外一个内部保存的是内存地址的临时值·

一个建议是,最好对这里修改一下。既然书中出现了临时值的概念就应该讲解清楚。而不是在书中强调“对字面量取地址构造的就是临时值”,然后又在代码示例中给出一个看起来不太相关的例子。这对于读者来说,是一个非常大的障碍。

不过,如果我的理解本身就是错的,也请大家指证。


@ZhangHanDong

fengzixu avatar Nov 23 '19 09:11 fengzixu

@fengzixu 感谢反馈。「临时值」是指提前Drop,没有明确使用let绑定的一个值。在第二版中考虑把这个描述再增加一下。 欢迎更多反馈。

ZhangHanDong avatar Nov 25 '19 03:11 ZhangHanDong

确实,这里我看的时候,觉得特别奇怪,为什么Rust还能这么玩? 然后我试了一下,确实可以,我把x的值打印出来,看来这里的取引用会导致Rust把一个临时值存放在栈上。 作为对比,我还用C++试了一下,C++是不行的,学Rust我经常用C++去交叉对比,要是书上有一些这样的内容就好了。

ilpam avatar Dec 09 '22 09:12 ilpam