偷懒神器:auto 的讲解

1. auto 的定义

      在c/c++11之前,auto用来修饰局部变量,表明该变量是一个自动变量,函数结束后该变量销毁
  c++11中,赋予auto全新的含义。其中表示:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得

       auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译时会将auto替换为自动推导的类型

      auto关键字修饰的变量,具有自动存储器的局部变量


2. 如何使用 auto 

auto 通常是为了简化代码,不过也牺牲了一些代码可读性,所以要适当进行一些注释

auto 通常简化的都是一些较长的类型,日常所见的 int、char、double 等可以不用auto 

//auto 的用法
int main()
{
	map<string,string> dict;
    //这里可以直接使用 auto 自动推导 map<string,string>::iterator
	map<string, string>::iterator mit = dict.begin();
	auto mit = dict.begin();

	return 0;
}

3. 使用 auto 的注意事项 

1. 根据初始化表达式自动推导实际数据类型
2. 一定要在定义时对其进行初始化 

3. auto在声明指针类型时,使用auto和使用auto*都可以,但用auto声明引用类型时

    则必须加&

4. 要注意的是,如果auto在同一行声明多个变量,要保证在同一行的多个变量类型相同,否      则会报错

5. auto不能作为函数定义时参数的类型,编译器无法对定义时参数的类型进行推导

6. auto不能直接声明数组

 代码演示如下:

1. 根据初始化表达式自动推导实际数据类型

int main()
{

	//1.根据初始化表达式自动推导实际数据类型
	auto i = 1;
	cout << "i = " << i << endl;
	cout << "i的数据类型是" << typeid(i).name() << endl;

	auto ch = 'A';
	cout << "ch = " << ch << endl;
	cout << "ch的数据类型是" << typeid(ch).name() << endl;

	auto db = 3.14;
	cout << "db = " << db << endl;
	cout << "db的数据类型是" << typeid(db).name() << endl;
	
	return 0;
}


2. 一定要在定义时对其进行初始化 

int main()
{
     //2.一定要在定义时对其进行初始化 
     auto x;
     x = 1;

     return 0;
}


3. auto在声明指针类型时,使用auto和使用auto*都可以,但用auto声明引用类型时则必须加&

int main() 
{
	//3.auto在声明指针类型时,使用auto和使用auto* 都可以,但用auto声明引用类型时则必须加 &
	auto m = new int(1);
	cout << "m = " << m << endl;
	cout << "m的数据类型是" << typeid(m).name() << endl;
	auto* n = new int(2);
	cout << "n = " << n << endl;
	cout << "n的数据类型是" << typeid(n).name() << endl;
	int i = 3;
	cout << "i = " << i << endl;
	cout << "i的数据类型是" << typeid(i).name() << endl;
	auto& j = i;
	cout << "j = " << j << endl;
	cout << "j的数据类型是" << typeid(j).name() << endl;

	return 0;
}


4. 要注意的是,如果auto在同一行声明多个变量,要保证在同一行的多个变量类型相同,否则会        报错

int main() 
{
	//4.要注意的是,如果auto在同一行声明多个变量,要保证在同一行的多个变量类型相同,否则会报错
	auto i = 1, j = 2;//i j 都是 int 类型,可以声明在同一行
	auto x = 1.0, y = 3.14f;//i 是 double 类型,y 是 float 类型,两变量类型不同会报错

	return 0;
}

5. auto不能作为函数定义时参数的类型,编译器无法对定义时参数的类型进行推导

class A
{
private:
	int i;
	int j;
public:
	int Add(auto i, auto j);
};


6. auto不能直接声明数组

int main() 
{
	//6.auto不能直接声明数组
	auto* a = new auto [10];
	int* b = new int[10];

	return 0;
}

 

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值