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)