auto【C++初阶】

在C语言中的auto关键字似乎用处不大,它是用来修饰局部变量的(通常可以省略)。但在C++中,auto完全与之不同,接下来就来学习一下吧。

目录

前言

一、auto简介

二、auto使用细则 

1.auto与指针和引用结合起来使用

2.在同一行定义多个变量

3、auto不能推导的场景

三、基于范围for的循环

总结


前言

随着程序越来越复杂,程序中的有些类型也越来越复杂,不易拼写,容易写错。这时候,我们可以用之前提过的typedef,但是typedef也有一些不可忽视的问题。

如:

1、在使用typedef定义别名时,别名应该清晰地显示变量的具体类型。

2、在使用 typedef 定义别名时,避免给它取与标准库或操作系统有关的名称,以避免名称冲突。

但是,auto可以很好地解决这些问题。


一、auto简介

auto声明的变量必须由编译器在编译器在编译时期推导而得。

注意:使用auto定义变量时,必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导变量的实际类型。

因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量的实际类型。

二、auto使用细则 

1.auto与指针和引用结合起来使用

用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加&

2.在同一行定义多个变量

auto在同一行定义的变量必须同类型,否则会报错,

因为编译器只根据第一个变量类型进行推导。

	auto a = 1, b = 1.0;//会报错
    auto a = 1, b = 2;//相同类型可以

3、auto不能推导的场景

1、auto不能作为函数参数(因为编译器无法对函数的实际类型进行推导)

2、auto不能直接用来声明数组

三、基于范围for的循环

对于一个有范围的集合,由程序员来说明循环范围是多余的,有时候还好容易犯错误。因此C++11中引入了基于范围for的循环。

for循环后的括号由冒号“:”分为两部分,第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。

void TestFor()
{
	int array[] = { 1,2,3,4,5 };
	for (auto& e : array)
	{
		e *= 2;
	}
	for (auto e : array)
	{
		cout << e << " ";
	}
}

注意:

1、for循环迭代的范围必须是确定的

对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的方法,begin和end就是for循环迭代的范围。 

2、迭代的对象要实现++和==的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,auto关键字用于自动推断变量的类型。它可以根据变量的初始值来选择匹配的类型。例如,使用auto声明的变量可以根据赋值的内容自动推断为int、double等类型。\[1\] auto的用法有以下几种: 1. 普通类型自动推断:使用auto关键字声明变量时,根据赋值的内容自动推断变量的类型。例如,auto x = 11;会将x的类型推断为int,auto y = 2.15;会将y的类型推断为double。\[1\] 2. 指针类型自动推断:使用auto关键字声明指针变量时,根据赋值的内容自动推断指针的类型。例如,vector<int> v1; v1.push_back(10); auto v = v1.begin();会将v的类型推断为指向int的指针。\[1\] 3. 在循环中的使用:在循环中,可以使用auto来遍历容器中的元素。例如,使用for(auto x : range)可以拷贝元素,使用for(auto &&x : range)可以修改元素,使用for(const auto &x : range)可以只读元素。\[1\] 4. 在STL中的使用:在STL中,可以使用auto来遍历vector容器中的元素。例如,使用for(auto it = v.begin(); it != v.end(); it++)可以遍历vector中的元素。\[2\] 5. 在模板编程中的使用:在模板编程中,有时候无法明确知道表达式的类型,这时可以使用auto来让编译器根据表达式的值自动推断变量的类型。例如,使用auto x = 5.2;可以将x的类型推断为double。\[3\] 总结起来,auto关键字可以根据赋值的内容自动推断变量的类型,可以用于普通类型、指针类型、循环遍历和模板编程中。 #### 引用[.reference_title] - *1* [C++ auto用法](https://blog.csdn.net/qq_44733143/article/details/125982321)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [C++11新特性——auto的使用方法](https://blog.csdn.net/m0_53184209/article/details/125053642)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C++auto用法](https://blog.csdn.net/qq_38228260/article/details/126308644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值