研究了一下第四周(在 http://www.lxweimin.com/p/f6405507d48a 中)的兩個(gè)問題是:
1.?Implementation of Emplace serious functions, compare to push_back, etc.
通過對右值引用和移動語義的學(xué)習(xí),發(fā)現(xiàn)embrace函數(shù)實(shí)際上是接受一個(gè)右值引用作為參數(shù)的,然后使用移動構(gòu)造函數(shù)來完成向容器中添加元素;以下是VS2013中的函數(shù)定義:
template void emplace_back(_Valty&&... _Val);
push_back有兩個(gè)版本,一個(gè)是傳統(tǒng)的使用左值引用作為參數(shù),這樣將會調(diào)用copy構(gòu)造函數(shù);另一個(gè)版本是使用右值引用作為參數(shù),這樣會調(diào)用移動構(gòu)造函數(shù),這一點(diǎn)好像和embrace類似?
這樣使用移動構(gòu)造函數(shù)的實(shí)現(xiàn),效率會得到提升。
以上是我的想法。
參考:http://stackoverflow.com/questions/4303513/push-back-vs-emplace-back
提到了在VS2010中的embrace和push_back。
2. at的作用和[]的區(qū)別。
at會檢查數(shù)組下標(biāo)越界,并拋出異常;
[]數(shù)組越界是未定義行為,需要程序員自己負(fù)責(zé),相應(yīng)的效率會比at高一些。