09 2013 档案

摘要:学过基本程序课的同学都知道,inline是内联的关键字,它可以建议编译器将函数的每一个调用都用函数本体替换。这是一种以空间换时间的做法。把每一次调用都用本体替换,无疑会使代码膨胀,但可以节省函数调用的成本,因为函数调用需要将之前的参数以堆栈的形式保存起来,调用结束后又要从堆栈中恢复那些参数。但注意inline只是对编译器的一个建议,编译器并不表示一定会采纳,比如当一个函数内部包含对自身的递归调用时,inline就会被编译器所忽略。对于虚函数的inline,编译器也会将之忽略掉,因为内联(代码展开)发生在编译期,而虚函数的行为是在运行期决定的,所以编译器忽略掉对虚函数的inline。对于函数指针 阅读全文
posted @ 2013-09-21 21:27 Jerry19880126 阅读(1356) 评论(5) 推荐(3) 编辑
摘要:还是举书上的例子:1 void PrettyMenu::changeBackground(std::istream& imgSrc)2 {3 lock(&mutex);4 delete bgImage;5 ++ imageChanges;6 bgImage = new Image(imgSrc);7 unlock(&mutex);8 }这段代码大致的意思就是改变背景图片,删掉旧的背景图片,记录修改次数,然后创建新的背景图片。考虑到多线程操作,所以这里用了lock和unlock。但这里会出现问题,因为并不是每次new都会成功的,有可能抛出异常,一旦抛出异常... 阅读全文
posted @ 2013-09-08 20:24 Jerry19880126 阅读(1137) 评论(0) 推荐(0) 编辑