文章目錄
- 自動類型推導
- 1.auto
- 1.1 const修飾
- 1.2 auto不能使用的場景
- 1.3 auto應用場景
- 2.decltype
- 1.1 基本語法
自動類型推導
1.auto
注意,auto必須進行初始化
auto i = 10; //int類型auto k = 3.14; //double類型auto db; //錯誤
1.1 const修飾
當const修改指針或者引用時,才會保存下const,否則就會丟棄。
int temp =10;
// a1 : const int
const auto a1 = temp; //a2: int
auto a2 = a1;//a3: const int
auto& a3 = a1;
1.2 auto不能使用的場景
- auto作為函數的參數類型
void show(auto a,auto b)
{.....
}
- 作為類的非靜態成員變量的初始化
class Test
{auto v = 0; //錯誤static auto c = 10;//錯誤
}
- 定義數組
int arry[] = {1,2,3,45};auto arry1 = arry; //正確 arry1 : int*auto arry2[] = arry; //錯誤auto arry3[] = {1,2,3,45}; //錯誤
- 使用auto推導模板參數
Person<string,int> p;Person<auto,auto>p1 = p; // 錯誤
1.3 auto應用場景
- STL容器遍歷
vector<int> v1;for(auto i = v1.begin(); i != vi.end(); i++)
{cout << *i << endl;
}
- 泛型編程
class T1
{public:int get(){return 10;}
};class T2
{public:string get(){return "hello";}
};template<typename T>
void print()
{auto ret = T::get();cout << ret << endl;
}int main()
{print<T1>();print<T2>();
}
2.decltype
1.1 基本語法
int a = 4;
decltype(a) b ; // b: int
decltype(a+3.14) c; //c : double