引用折疊的前提是出現了引用的引用,有點繞。我們不能直接定義引用的引用,但是可以間接定義。
通過類型別名或者通過模板參數間接定義,多重引用最終折疊成左值引用或者右值引用,多余的忽略
typedef int&& new_type;
new_type& ok;
這個時候就形成了類型折疊 類似於int&&& ok;最后折疊成int& ok;
template<typename T> void test(T&& t);
如果參數傳入一個引用類型例如int m=0;int& n=m;template<int&> test(n);這個時候也形成了引用折疊,最終參數保留了引用特性
template<typename T> void test6(T&& t)//傳入引用就會形成折疊 { printf("%d\n", t++); } int main(int narg, char**) { typedef int&& new_int; int n = 0; new_int& a=n;//引用折疊int&&& 最終成為int& a = 10; printf("%d\n", n); test6(a); printf("%d\n", n); system("pause"); return 0; }