文章目录
- 自动类型推导
- 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