CppPrimer4::Chapter V&VI
这两章的内容说实在的没有什么特别需要把握的地方,都是基础中的基础。(不过对这点有点怀疑,也有可能是因为不清醒忽略了一些细节吧。)
挑出的特别的地方不多:
Because bool converts to one, is almost never right to write an equality test that tests against the bool literal true.
这句话我没理解,true就是系统定义的保留字啊,表示的就是bool的true啊。为什么不建议使用呢?而且还说是不对的呢?当然用0来false用其他整形数字来true,是对的,可是没人说过不要用true啊。三版里面也不记得有这个beware啊。
Use postfix operator only when necessary.
这个可以理解,可以节省cost。而且统一使用prefix可以避免混淆。不过这点要求只能做建议,或者是一个好习惯。听人劝,吃饱饭。以后特殊考虑一下是否真的需要postfix再用好了。
Don’t use an increment or decrement operator on the same object in more than two subexpressions of the same expression.
这点很利于保持代码的可读性和可控性,如果一个表达式内有两个表达式包含对一个对象的增减操作,代码会很容易因为思维混乱。保持一个清醒的头脑对程序员来说很重要。
至于*p++ 和 *(p++)的区别,这对一个新手来说算是个混淆点,不过对我来说已经习惯了。
注意到运算符优先级列表,4版的Primer中Lippman特意加上了对于了连带者是Lvalue还是Rvalue的注明,在本版中,Lippman很重视每个语句产生一个值这一点,而且经常用这一点来解释一些原理和原则。对Lvalue和Rvalue的掌握的要求显得格外的突出。
|
Associativity |
Function |
Use |
|
|---|---|---|---|
|
L |
:: |
global scope |
:: name |
|
L |
:: |
class scope |
class :: name |
|
L |
:: |
namespace scope |
namespace :: name |
|
L |
. |
member selectors |
object . member |
|
L |
-> |
member selectors |
pointer -> member |
|
L |
[] |
subscript |
variable [ expr ] |
|
L |
() |
function call |
name (expr_list) |
|
L |
() |
type construction |
type (expr_list) |
|
R |
++ |
postfix increment |
lvalue++ |
|
R |
-- |
postfix decrement |
lvalue-- |
|
R |
typeid |
type ID |
typeid (type) |
|
R |
typeid |
run-time type ID |
typeid (expr) |
|
R |
explicit cast |
type conversion |
cast_name <type>(expr) |
|
R |
sizeof |
size of object |
sizeof expr |
|
R |
sizeof |
size of type |
sizeof(type) |
|
R |
++ |
prefix increment |
++ lvalue |
|
R |
-- |
prefix decrement |
-- lvalue |
|
R |
~ |
bitwise NOT |
~expr |
|
R |
! |
logical NOT |
!expr |
|
R |
- |
unary minus |
-expr |
|
R |
+ |
unary plus |
+expr |
|
R |
* |
dereference |
*expr |
|
R |
& |
address-of |
&expr |
|
R |
() |
type conversion |
(type) expr |
|
R |
new |
allocate object |
new type |
|
R |
delete |
deallocate object |
delete expr |
|
R |
delete[] |
deallocate array |
delete[] expr |
|
L |
->* |
ptr to member select |
ptr ->* ptr_to_member |
|
L |
.* |
ptr to member select |
obj .*ptr_to_member |
|
L |
* |
multiply |
expr * expr |
|
L |
/ |
divide |
expr / expr |
|
L |
% |
modulo (remainder) |
expr % expr |
|
L |
+ |
add |
expr + expr |
|
L |
- |
subtract |
expr - expr |
|
L |
<< |
bitwise shift left |
expr << expr |
|
L |
>> |
bitwise shift right |
expr >> expr |
|
L |
< |
less than |
expr < expr |
|
L |
<= |
less than or equal |
expr <= expr |
|
L |
> |
greater than |
expr > expr |
|
L |
>= |
greater than or equal |
expr >= expr |
|
L |
== |
equality |
expr == expr |
|
L |
!= |
inequality |
expr != expr |
|
L |
& |
bitwise AND |
expr & expr |
|
L |
^ |
bitwise XOR |
expr ^ expr |
|
L |
| |
bitwise OR |
expr | expr |
|
L |
&& |
logical AND |
expr && expr |
|
L |
|| |
logical OR |
expr || expr |
|
R |
?: |
conditional |
expr ? expr : expr |
|
R |
= |
assignment |
lvalue = expr |
|
R |
*=, /=, %=, |
compound assign |
lvalue += expr, etc. |
|
R |
+=, -=, |
||
|
R |
<<=, >>=, |
||
|
R |
&=,|=, ^= |
||
|
R |
throw |
throw exception |
throw expr |
|
L |
, |
comma |
expr , expr |
六章真的没啥可说的了,那些个语句再熟悉不过了。值得提提的是四版把预处理那块的一部分放到了这一章才给出。结构上的调整是本版的重点。
还有说说goto,我中午整理东西的时候发现了一张软盘,里面居然是我大概在小学时候编的程序,用的是QB,里面goto很多啊^_^,看起来蛮有意思的。顺便感慨一下,那么早接触计算机,我应该有机会成为牛人的,不过我还是选择了跟着课堂走。选择啊,挺有意思的。另外,那时候的软盘好像就没坏过,为啥现在的软盘用一两次就废掉了呢?吃药,睡觉,明天还得去实验室干活呢……头晕哦
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=499113


Recent Comments