2016-07-28 21 views
2

據說「自動」並不檢索CV-預選賽,所以我做了一個實驗:C++ 11「auto」關鍵字是否完全檢索「cv-qualifier」?我有衝突樣品

const int i = 0; 
auto r1 = i; 
auto& r2 = i; 
r1 = 3;//ok 
r2= 3;//compilation error 

構建值時看來,CV-預選賽是不符合新變量,但與參考文獻「&」一起使用,cv限定符與它一起使用。爲什麼呢,自動檢索「cv-qualifier」呢?

+1

參考:https://www.youtube.com/watch?v=wQxj20X-tIU –

+0

你會得到與指針相同的效果。 –

回答

6

auto扣除在大多數情況下與模板扣除相同。只需要auto全部刪除cv限定符,但auto&保留所引用類型的限定條件。如果auto&刪除了限定符,那麼您將能夠對const對象進行非const引用,這會很糟糕!這個作品完全方法一樣:

template <class T> deduce(T); 
template <class T> deduce_ref(T&); 

deduce(i);  // calls deduce<int> 
deduce_ref(i); // calls deduce<int const> 

由於r2const int參考,不能分配給它。但r1只是i的副本。