主题:【原创】猛批烂书 程序员面试宝典 上 -- 晨池
看得我手痒,也来说几句
这个得看编译器。对Borland的编译器,在优化全开的情况下,inline函数的调用,其形参和局部变量必须在栈上实际分配,而无论函数多么短小。这样,对短小的函数,inline不inline其实效率差不多。但宏就不一样了。
还有那个把fact(8)优化成push 40h,涉及到两个编译优化,其一是inline展开,其二是常数的扩展(即在编译状态下可确定为常数的变量被替换成相应常数)。单纯地说,inline展开是确实有的,只是两个编译优化共同作用下看不到了。
这里的中文翻译有点小问题。“used”应该是使用的意思,而不是声明。我的翻译是“不能在类成员函数显式使用this指针”。这显然是错误的,所以是该题的答案。
a1->push_back(d1);
delete a1;
这个,在我上课的时候被用于最经典的C++指针误用例子。为什么呢?我把正确的用法写出来大家应当就知道了:
vector<CDemo> a1;
a1.push_back(d1);
不过,几乎所有现在的C++语法书介绍指针的时候,竟然都是类似的例子......
另外上面的代码可能存在一个严重的问题,因为我从来不用STL所以不确定。“vector<CDemo>” 应当以CDemo对象为元素,那么push_back的时候,d1将被复制一份。而CDemo的复制函数,在第一个版本中,是编译器缺省生成的......第二个版本加了复制构造函数应当没有问题。当然,如果vector<CDemo>内部用指针来管理元素,那也可能没有这个问题,但会引发另外的问题......反正问题很严重。这也是我从来不用STL的原因:吖的封了一层又一层,谁知道你里面是怎么实现的?我用复杂的数据结构说明我的算法复杂,要对实现细节进行把握才能获得预期的高效,现在我啥都不知道了,谁敢保证我的算法不踩地雷?
还有这个:
d1.str = new char[32];
个人认为这个CDemo类实在是一个糟糕得不能再糟糕的例子......
- 相关回复 上下关系8
🙂应该是会报一个warning吧,编译还是编译通过的 晨池 字41 2010-11-09 05:09:12
🙂如果永远返回1,他们的编程风格还能得一分 1 晨池 字137 2010-11-08 04:22:30
😉呃 没在意,居然没有return- -! 重火力熊猫 字0 2010-11-08 17:11:56
🙂花你的认真哈
🙂The C++ standard library 假设 字218 2010-11-24 01:56:09
🙂嗯,关于inline那个,我确实不知道宝兰是如此处理的 晨池 字581 2010-11-11 06:39:02
🙂__forceinline 假设 字189 2010-11-24 02:11:47
🙂我只是对体系结构比较感兴趣 2 类反词典 字1199 2010-11-11 16:24:34