1. 程式人生 > >c++中的auto、const auto&

c++中的auto、const auto&

先介紹一下auto、const:

        在塊作用域、命名作用域、迴圈初始化語句等等  中宣告變數時,關鍵詞auto用作型別指定符。

       const:修飾符

接下來我們細細分析一下:

(1)auto

        auto即 for(auto x:range)  這樣會拷貝一份range元素,而不會改變range中元素;

     但是!(重點)  使用for(auto x:vector<bool>)時得到一個proxy class,操作時會改變vector<bool>本身元素。應用:for(bool x:vector<bool>)

(2)auto&

       當需要修改range中元素,用for(auto& x:range)

     當vector<bool>返回臨時物件,使用auto&會編譯錯誤,臨時物件不能綁在non-const l-value reference (左值引用)需使用auto&&,初始化右值時也可捕獲

(3)const auto&   

         當只想讀取range中元素時,使用const auto&,如:for(const auto&x:range),它不會進行拷貝,也不會修改range   

(4)const auto

        當                                                                                                                                                                                                                                                                     需要拷貝元素,但不可修改拷貝出來的值時,使用 for(const auto x:range),避免拷貝開銷                                                                                                       

整理一下:                                                                                                                                                                                                                                                   

       想要拷貝元素:for(auto x:range)

       想要修改元素 :  for(auto &&x:range)

       想要只讀元素:for(const auto& x:range)