八月 8
今天昏昏沉沉的睡了一天,只是趁还清醒断断续续的看了两章而已,原计划的把Part1结束又泡汤了。教训是身体很重要啊,要注意锻炼一下,总在空调房里面不行的啊。

这两章的内容说实在的没有什么特别需要把握的地方,都是基础中的基础。(不过对这点有点怀疑,也有可能是因为不清醒忽略了一些细节吧。)

挑出的特别的地方不多:

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
and Operator

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 p>

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