zoukankan      html  css  js  c++  java
  • Effective C++ 读书笔记(04)

    一年前读此书,在书上乱写乱画,自认为对C++懂了。现在正式从事编码工作,看了别人的代码才发现自己其实并没有懂得很多,因此,重新拾起之前的书,认认真真开始记录笔记。

    0--序言

    四个转型运算符:比如static_cast<int>(32.12)
    const_cast
    :将对象或指针的常数型转型掉
    dynamic_cast
    :用来执行"安全的向下转型动作"
    reinterpret_cast
    :转型的结果取决于编译器
    static_cast
    :没有其他合适的转型运算符可用,就用这个,和传统转型运算符最接近

    Item 1 -- 尽量以const和inline取代#define

    const的好处是,调试时,可以直接获取变量,而非定义的数字,这个在使用gdb跟踪代码的时候很有用,比如#define NUM 123;如果在gdbprint NUM,会出现NUM找不到符号表的问题,这样在复杂表达式中出现NUM进行watch的时候要回去找NUM的具体值很郁闷。

    使用const不仅如此,其不允许改动的语义才是其存在的精华, 常量指针和指针常量很容易让人弄混,来再记一遍,星号在中间,左定内容右定针。
    const char *p;    char const* p
    都表明p指向的内容不能变
    char * const p
    则表明指针不能变
    bt一点的就是牵扯到typedef了,typedef能够破坏const的语义,参考下面的链接
    http://hi.baidu.com/%C6%AE%D4%DA%B1%B1%BE%A9/blog/item/92e3554e22307d0db2de0540.html
    http://hi.baidu.com/xiaoshumuzi/blog/item/34ff22386487eaf8b311c716.html

    抛弃#define使用inline的原因就是类似#define max(a,b) ((a)>(b)?(a):(b)) 这种写法除了使用无数括号很bt之外,max(++a,b)这个简单的表达式便可轻而易举废掉程序员的本意,这点足以放弃#define

    Item 2 -- 尽量以<iostrem>取代<stdio.h>

    EC(Effective c++)给出Item2的理由,cin/cout型别安全,比如Rational r; cout<<rstdio.h中是无法想象的。当然,Rational要针对<<进行支持,有关写operator <<又是一个要讨论的Item,这里事先给出正确写法
    class Rational{
        friend ostream& operator<<(ostream&s, const Rational& r)
    }

    其实对于我这种学习的时候就使用cin/cout的人来讲,现在倒是感觉stdio.h这种东东很好玩,里面牵扯到fopenfputfwrite等等底层IO接口,深入研究也是对计算机IO更好的了解

    Item 3 --  尽量以new和delete取代malloc和free

    new的过程:申请内存(也即malloc的作用),调用构造函数,返回对象指针(后面讲到operator new placement new都是基于这个基本知识)

    另外,newdelete对应,mallocfree对应这个也是常识了,但是为啥呢?EC里面讲到,如果混用会导致不可预料的错误。

    Item 4 -- 尽量使用C++风格的注释形式

    其实就是相对/**/这种注释,多用用//,而//VS2005以及Eclipse下面都有快捷键,VS2005Ctrl+K,C(按住Ctrl,先后按KC)取消是Ctrl+K,UEclipse则方便的多,只用Ctrl+/即可

    说到注释,不能不提doxygen,最近也在看源代码,抽空得研究下,学习一下注释规范。简单搜索下,可以关注下面链接:
    http://blog.163.com/jallyx/blog/static/5726580020097611042993/
    http://zsxxsz.javaeye.com/blog/403539
    http://www.lupaworld.com/action_viewstutorial_itemid_3735.html

  • 相关阅读:
    JAVA课后作业
    类中创建对象的个数
    JAVA动手动脑及课后思考
    JAVA课后作业
    java课后思考
    加法
    大道至简第一章伪代码
    解决得到网络流不支持查找的方案
    row_number() over(partition by 列名1 order by 列名2 desc)的使用
    SQL中的特殊符号
  • 原文地址:https://www.cnblogs.com/liuchen/p/1568910.html
Copyright © 2011-2022 走看看