第四周两个问题

研究了一下第四周(在 http://www.jianshu.com/p/f6405507d48a 中)的两个问题是:

1. Implementation of Emplace serious functions, compare to push_back, etc.

通过对右值引用和移动语义的学习,发现embrace函数实际上是接受一个右值引用作为参数的,然后使用移动构造函数来完成向容器中添加元素;以下是VS2013中的函数定义:

template void emplace_back(_Valty&&... _Val);

push_back有两个版本,一个是传统的使用左值引用作为参数,这样将会调用copy构造函数;另一个版本是使用右值引用作为参数,这样会调用移动构造函数,这一点好像和embrace类似?

这样使用移动构造函数的实现,效率会得到提升。

以上是我的想法。

参考:http://stackoverflow.com/questions/4303513/push-back-vs-emplace-back

提到了在VS2010中的embrace和push_back。

2. at的作用和[]的区别。

at会检查数组下标越界,并抛出异常;

[]数组越界是未定义行为,需要程序员自己负责,相应的效率会比at高一些。

你可能感兴趣的:(第四周两个问题)