存档

  • 为什么C++程序跑不过C程序?

    C++程序的性能问题往往来源于程序员的误用。比如在不知不觉中创建和销毁很多(不必要的)对象,而程序员往往并不能意识到这一点。当然,容易误用的语言不是一门好的语言。

    没有评论
    2011年11月17日 | 归档于 C/C++
    标签: ,
  • MOC读码笔记

    MOC(Music on Console),顾名思义,就是控制台下的音乐播放器(详见http://moc.daper.net/),因为我比较好奇它的client/server结构,所以抽空读了它的源码。 MOC以标准的C语言写成,代码质量之高出乎我的意料,也让我感叹C语言的简洁和强大。 如下附件PDF文档,是读码过程中的一点记录,涉及配置、server/client的启动过程、通信协议、音频相关知识、播放流程,和插件机制(未分析完全)。 MOC.pdf

    2 条评论
    2011年11月11日 | 归档于 Code Reading
    标签: ,
  • std::vector<bool>之罪

    以vector为例来介绍C++的模板偏特化,不失为一个讨巧的选择。说它讨巧,一是因为来自STL标准库,现取现用;二是因为vector确实特化得厉害,较一般的vector有很大不同。这一次C++大会上(指2009年在上海举办的第二届C++技术大会),侯捷在讲C++泛型编程时,就用了vector这个例子。

    没有评论
    2011年11月10日 | 归档于 C/C++, Programming
    标签:
  • Inline Functions In C++

    大概两个月前,有人就我写的代码问:为什么把inline实现在头文件中?在头文件里声明,然后在源文件里定义时同时也指定inline不也可以吗?一时被问住了,因为一直没仔细想过这个问题。顺手写了两行代码让编译器帮忙验证,发现"确实如其所说"。今天发现,那是错的。当时顺手写的测试代码之所以骗过编译器也骗过链接器,原因可能是那个inline函数根本就没有被调用。 这里假定你的inline函数会被多个源文件引用。如果只会被一个源文件所用,那么便不必放在头文件中,而直接放在使用它的那个源文件里就可以了。比如通常在一个源文件里我们会写一些短小的static函数来辅助操作,这些static函数如果足够短小,就可以顺便把它inline。 对于非类成员函数,如下inline定义是错误的: [code lang="cpp"] // .h inline const std::string& shoter_string(const std::string& a, const std::string& b); // .cpp // 这里有没有inline不影响结果 inline const std::string& shoter_string(const std::string& a, const std::string& b) { return a.size() < b.size() ? a : b; } [/code] 链接错误:shoter_string未定义。 对于类成员函数,如下inline定义也是错误的: [code lang="cpp"] // .h struct C { // inline可省略, 缺省就是inline inline const std::string& [...]

    没有评论
    2011年11月8日 | 归档于 C/C++, Programming
    标签:
  • C++中的局部类(Local Classes)

    C++不允许定义局部函数(local functions),但是可以定义局部类(local classes)。局部类可以用来保证异常安全,隐藏不必暴露给用户的实现,或者在新标准中实现lambda表达式和闭包(closures)。

    没有评论
    2011年11月8日 | 归档于 C/C++, Programming
    标签: ,
文章标签 ‘C++’