分享
 
 
 

c++ primer(第四版)学习札记 9-25

王朝c/c++·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

1、21 % -5; // machine-dependent: result is 1 or -4

21 / -5; // machine-dependent: result -4 or -5

在%和/这两种操作中,如果仅有一个操作数是负数,则要根据不同机器来判断,拿/来说,如果结果的符号同分母,那么结果截断就靠近负无穷,而如果结果符号同分子,则结果截断后就靠近0。

2、如果在程序中这么写:

if (i < j < k) { /* ... */ }

那么会先计算i < k,然后返回一个bool型和k比较,结果就是oops!

3、位运算符:&,|,^

&:如果两个操作数都是1,那么结果就为1,否则结果均为0

|:只要操作数中有1,那么结果就是1,否则结果为0

^:只要操作书不同时为1,那么结果就是1,否则为0

要注意的是,不要和逻辑与和逻辑或混淆,位元算与和或是不同的

4、看了下面的两个例子就知道,直接使用位运算符和bitset的区别了,和使用C-style字符串与string的区别差不多:

bitset_quiz1.reset(27); // student number 27 failed

int_quiz1 &= ~(1UL<<27); // student number 27 failed

bitset的方式很容易懂,但是,用底层位运算符呢?先将一个值为1的unsigned long用<<运算符左移27位,就相当于一个32bit的整数,它的第27bit为1,然后再取反,再和int_quiz1和,最后才得到想要的结果(好辛苦啊~~)

5、cout << 10 < 42; // error: attempt to compare cout to 42!

<<操作符优先级比逻辑运算符高,所以,以上的例子是将cout同42做比较。。。

6、ex5_12给了我们一个很好的提醒:

if (42 = i) // . . .

if (i = 42) // . . .

虽然vc的编译器会给出警告,但是如果编译器不提供,后一个语句都是可以通过编译的,如果从pascal转到c++的程序员就容易犯这样的错误,将赋值当作==用,而如果写成第一种,如果是==可以通过编译,而赋值就不可以,所以可以避免一些低级错误的发生。

7、书中给出一个建议:

对于++和--,当需要的时候才使用后缀的方式(i++)。出于对性能的考虑,i++会造成除了要储存增加后的版本还要保存未增加的版本以便使用,这样就有不必要的开销。所以,书中推荐使用前缀模式(++i)

8、(*p).foo; p是一个类的指针,在使用的时候还要对p进行dereference,而且很容易把()忘记,所以c/c++提供了-〉,这样看起来更简洁些:p->foo;

9、ex5_23

int x[10]; int *p = x;

cout << sizeof(x)/sizeof(*x) << endl;

cout << sizeof(p)/sizeof(*p) << endl;

结果是:

10

1

因为x是一个数组名,sizeof返回一个数组的大小,而*p仅返回一个int型指针的大小

10、

// oops! language does not define order of evaluation

if (ia[index++] < ia[index])

结果是:

if (ia[0] < ia[0]) // execution if rhs is evaluated first

if (ia[0] < ia[1]) // execution if lhs is evaluated first

又是根据编译器决定的,不说什么了,不用就是了,避免这样模棱两可的语句

避免这些复杂问题的方法:

(1)使用括号

(2)避免在同一个语句中改变操作数后又使用它(有例外)

所以,以上的例子应该这样做:

if (ia[index] < ia[index + 1]) {

// do whatever

}

++index;

---end--- next: 5.11. The new and delete Expressions

time:05-9-26 0:22am

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有