读书人

关于:C++ Primer,该怎么解决

发布时间: 2012-02-04 15:43:08 作者: rapoo

关于:C++ Primer
在当当上看到的和在china-pub上看到的
同样是C++ Primer 第四版,中文版
出版社不同,目录里的内容也不同

到底应该买那本?
请看过的大侠指点一下
当当里的网址:
http://product.dangdang.com/product.aspx?product_id=9157098
作者:(美)Stanley B. Lippman Barbara E. Moo Josée LaJoie 著,李师贤 等译

china-pub里的网址:
http://www.china-pub.com/computers/common/info.asp?id=28767
是图灵出版社的
【译  者】 李师贤[同译者作品] 蒋爱军 梅晓勇 林瑛

好像译者都一样,作者也一样
为什么目录内容会不同?

[解决办法]
印刷排版不一。
[解决办法]
哈哈,接分
[解决办法]
yeah~~~~~~
[解决办法]
接分
[解决办法]
jf
[解决办法]

[解决办法]
据说第四版翻译的很烂。
lz三思。
[解决办法]
还是啃原版吧,原滋原味
[解决办法]
当当 我就是在当当买的~~~
[解决办法]
还是看原版吧。
曾看过这几位译者同步写的《C++ Primer习题解答》,其中有解答不怎么正确。

比如习题2.12关于左值和右值的解答,原文中明明不是那样说的,有将译者的意图加入的感觉。
他们是这样说的:
"...(前面是原文根本没有的对左/右值的定义,属于译者自己的认识,就不说了)
变量名出现在赋值运算符的左边,就是一个左值;而出现在赋值运算符的右边的变量名或字面常量就是一个右值。例如: val1=val2/8
这里val1是一个左值,而val2和8都是右值。 "

我觉得这样说是错的。右值不是val2和8,而是val2/8这个表达式。val2/8不能放在等式左边,所以它是右值。同样的,如果是 a = b = 8 这样的式子,用上面的说法根本解释不通,b是左值还是右值呢?

注意原文是:
lvalue: An expression that is an lvalue may appear as either the left-hand or right hand side of an assignment.
rvalue: An expression that is an rvalue may appear on the right- but not left-hand side of an assignment.

有两点是不同的,
1、lvalue/rvalue指的是表达式,而不是变量名或字面常量
2、并不是出现在赋值运算符右边就是右值,而是只能出现在右边才是右值

所以,对于 val1=val2/8,可以肯定的是 val2/8 是右值。这也不是单从这个式子就可以看出来的,而是 / 运算返回的是右值,所以 val2/8 是右值。至于8是右值,这是正确的,因为8是字面常量,只能做右值。而val2则是不确定的。
对于 a = b = 8 ,表达式 b 是左值,因为它作为一个表达式出现在 = 8 的左边。而表达式 b = 8 仍然是左值!因为你也可以这样写:(b = 8) = 10 [这里括号只是为了改变优先级]。左值也可以放在赋值运算符右边。当左值处于需要右值的环境时,如 a = (b = 8) 时,将发生lvalue to rvalue 的标准转换。但是不可以因此说 b = 8 就是右值;更不能相对于 a = 拆出表达式 b = 8 中的变量,说b是一个右值!

虽然目前为止只发现这个问题(我也只看了一点点),但是让人很不放心。正文的翻译版没看过,不知道这段会翻译成什么样。总之还是看原版比较好。而且C++ Primer的行文看上去不难,应该比较容易读的。

读书人网 >C++

热点推荐