Effective C++读书笔记(0)

  作为明年7月入职的职场新人,虽然大学里写了不少project,但实战经验匮乏,实在不是什么牛人。所以还是笨鸟先飞,在一段非常闲适的日子里买来了Effective C++,想进一步提升自我,在入职前打好基础,特此边研读边做笔记一份,有摘录有总结有自己的一些理解。我知道这玩意儿基本没什么人观摩,但万一有人走过路过,望不吝赐教。

 

Start

声明式(Declaration):告诉编译器某个东西的名称和类型,但略去细节。

std::size_t numDigits(int number);

每个函数的声明揭示其声明式:参数&返回类型

如上numDigits函数的签名是std::size_t(int),也就是说"这函数获得一个int 并返回一个std::size_t"。

 

定义式(Definition):提供编译器一些声明式所遗漏的细节。

定义式为对象分配内存;为function提供代码本体,为class列出其成员(构造)。

class Widget {             

public: 

      Widget(); 

      ~Widget(); 

... 

};


template<typenameT>      

class GraphNode{ 

public: 

      GraphNode(); 

      ~GraphNode(); 

... 

};


初始化(Initialization):给予对象初值。

用户自定义类型对象的初始化由构造函数执行;default构造函数要么没有参数,要么每个参数都有缺省值。

class A {

public:

    explicit A (int x=0, bool b=true);

};

void doSth (A aObject);

A obj (28);  //Right,根据28创建A,第二个参数bool被缺省为true

doSth(28);  //Wrong,应该传入参数A,int与A之间不能隐式转换

doSth(A(28)); //Right, cast显式转换

explicit声明构造函数,阻止了参数隐式类型转换的执行,但仍可进行显式类型转换;因此,除非有隐式转换需要,否则构造函数被鼓励声明为explicit。

 

copy构造函数:以同型对象初始化自我对象,构造函数的参数为另一同类型对象;

copyassignment操作符:从另一个同型对象中拷贝其值到自我对象,其实就是等号赋值。

class Widget 

public: 

    Widget(); //default构造函数 

    Widget(const Widget& rhs); //copy构造函数 

    Widget& operator=(const Widget&rhs); //copy assignment操作符 

    ... 

}; 

Widget w1; //call the defaultconstructor 

Widget w2(w1); //call the copyconstructor 

w1 = w2;  //call the copy assignment operator 

Then:

Widget w3 =w2;

先用copy构造函数创建w3,再用w2(已定义的)进行等号赋值;值传递就意味着调用copy构造函数。

 

STL:标准模板库(Standard Template Library),C++标准程序库的一部分,致力于容器(vector,list,set,map,等等),迭代器(vector<int>::iterator,set<string>::iterator,等等), 算法(for_each,find,sort,等等)。

 

不明确行为(undefined behavior):某些C++构件的行为没有定义,无法稳定估计运行期会发生什么。

int *p = 0; // p为null指针

std::cout << *p; //对null指针取值

 

char name[] = "Darla";// name数组大小为6(尾端为null)

char c = name[10]; //指向一个无效的数组索引

尽可能避开不明确行为。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值