[英]C++11: Does “auto” keyword retrieves cv-qualifier at all? I've contradictory sample
[英]Does C++11 “auto” keyword retrieve “cv-qualifier” at all? I've got conflict samples
有人說“自動”不會檢索cv-qualifier,所以我做了一個實驗:
const int i = 0;
auto r1 = i;
auto& r2 = i;
r1 = 3;//ok
r2= 3;//compilation error
似乎在構造值時,cv-qualifier並不與新變量一起使用,而是與引用“&”一起使用,而cv-qualifier與它一起使用。 為什么會自動檢索“ cv-qualifier”呢?
在大多數情況下, auto
扣除與模板扣除相同。 只是auto
刪除所有cv -qualifiers,但是auto&
保留引用類型的cv -qualifications。 如果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>
由於r2
是對const int
的引用,因此您無法為其分配值。 但是r1
只是i
一個副本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.