C/C++重难点总结系列(四)

2017-01-07 08:37:39来源:CSDN作者:hechao3225人点击

31.C++五种迭代器类型

(1)Input Iterator:只读前向遍历迭代器。

如:istream

(2)Output Iterator:只写前向遍历迭代器。

如:ostream,inserter

(3)Forward Iterator:可读写前向遍历迭代器。

如:forward_list

(4)Bidirectional Iterator:可读写双向遍历迭代器。

如:list、set、multiset、map、multimap

(5)RandomAcess Iterator:可读写随机访问迭代器。

如:vector、deque、string、array

注:在C++迭代器的实现中,上述5种迭代器为继承关系,故迭代器的能力逐级递增。

迭代器的能力也反映了容器的特性,如vector可以随机访问元素,但list不能。


32.关于shared_ptr和unique_ptr的正确声明

(1)shared_ptr<T>

常见方法两种:a.最安全的做法:使用make_shared<T>(args);b.结合new使用。如:

shared_ptr<int> p1=make_shared<int>(42);auto p2=make_shared<string>("hello");//make_shared<T>(args)的args参数必须与T的一个构造函数匹配,才能完成动态对象的初始化
结合new使用时,构造函数将内置指针转换为智能指针。

但是智能指针的构造是explicit的,因此内置指针不能隐式转换为智能指针,必须直接构造,故下面第一种写法是错误的!

shared_ptr<int> p1=new int(1024);//errorshared_ptr<int> p2(new int(1024));//correct

(2)unique_ptr<T>

unique_ptr<T>只能绑定到new返回的指针上,不能拷贝或赋值!(独占的含义)如:

unique_ptr<string> p1(new string("test"));//correctunique_ptr<string> p2(p1);//error


33.关于虚析构函数

(1)为多态基类声明一个虚析构函数,即:一旦一个类出现虚成员函数就一定有一个虚析构函数。

(2)不要为非基类声明虚析构函数。

如:STL容器都是非虚析构函数,因此不要子类化STL容器。(PS:C++11提供了final关键字禁止派生,但STL容器未加入,应主动避免)

(3)为抽象基类(接口类)声明一个纯虚析构函数并给出定义!

注:抽象基类仅提供接口而在派生类中实现成员函数,纯虚析构是个特例!


34.关于C++ style的四种类型转换

C++提供了四种类型转换,相对于传统的C-style强制类型转换可读性更强,正是因为C++灵活的类型转换,所以:C++不是类型安全的!

另外,C++中应尽量避免转型,会带来效率上的折损和安全问题,如下行转换失败会返回空指针或抛出异常。

(1)const_cast:常量性去除,即const转非const(唯一手段!)

(2)static_cast:强迫隐式隐式转换(将隐式转换显化,与传统强制转换效果一样,但是更可读)如将void*转换为typedef声明的指针。

(3)dynamic_cast:安全地下行转换:将基类的指针/引用转型为派生类的指针/引用,从而间接地操作派生类的某些函数,适用于某些特殊情况。

注:上行转换(即将派生类的指针/引用转型为基类的指针/引用)本身是安全的,因为派生类包含基类的所有属性,所有可直接使用static_cast转换。但是下行转换不安全,dynamic_cast使用了RTTI机制(运行期检查),因此可以保证上行转换这种特殊转换的安全!

(4)reinterpret_cast:执行低级转换,如int*转成int(用的较少)


35.dynamic_cast何时转型失败?

34中已提到dynamic_cast会在运行期检查,那么何时会转型失败从而保证安全?

(1)当基类指针或引用指向派生类时,向下转型是安全的。

(2)当基类指针或引用指向基类时,向下转型会失败(安全检查后阻止):

(直观理解:本身是基类的指针想转派生类是不允许的!但是如果本身是派生类指针而隐式转换成了基类指针(隐式上行转换),后面想逆行转换当然可以)

a.对于指针转型失败会返回空,故可以作if检查判断是否转型成功;

b.对于引用转型失败会抛出bad_cast异常,故可用try_catch做异常处理。


-----------------未完待续,明日补----------------------

相关文章

    无相关信息

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台