IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++11学习之auto关键字 -> 正文阅读

[C++知识库]C++11学习之auto关键字

auto关键字在c++11之前,表示存储类型指示符,表示具有自动存储期的局部变量。
比如

auto int a = 0;
static int j = 0;

以上两者是相对的,一个在出变量作用域就会释放内存,static变量会存放在静态数据区,对于未初始化的会自动初始化未为0,在程序结束后才会释放内存。

在c++11标准中,auto变成了一个类型指示符,用来提示编译器对此类型的变量做自动推导,但是有一些注意的地方需要说明,

  1. 当变量不为指针或引用时,auto进行推导会抛弃const和volatile属性
  2. 变量是指针和引用时,auto保留const和volatile属性

例子

	//普通变量
	auto i = 0;		// int i
	const auto j = i;	//const int j
	auto k = j;		//int k  j->k 没有继承cv属性 const/volatile


	//指针引用类型 会继承原有的cv属性
	auto* a = &i;  //int *a
	const auto* c = &i;

在VS上可以将鼠标悬浮在变量名上,查看变量类型。
在这里插入图片描述

有四种情形没有办法使用auto,分别是

  1. auto无法作为函数形参
  2. 没有办法修饰数组
  3. 不能用于非静态成员变量
  4. 无法做模板类型推导
    举例
//auto的4处限制
//1.	不能作为函数参数进行推导
void fun(auto a) //err 此处不允许使用auto
{
	return a;
}
//2.	不能用于非静态的成员变量
struct{

	//auto const a = 0;		 //err 此处不允许使用auto
	static const auto b = 0;
};
//3.	无法初始化数组
//auto arr[10] = { 0 };	//C++ “auto”类型不能出现在顶级数组类型中

//4.	无法推导模板参数
template<typename T>
class bar{};

bar<int> b;
//bar<auto> b1;		//err 此处不允许使用auto

使用auto的好处

使用迭代器不在需要大段的编写类型定义,以下是关于输出map在c++98 11 17 的代码。

std::map<int, std::string> m;

	m.insert({ 1, "world" });

	//c++17引入的特性
	for (const auto& [number, name] : m)
	{
		std::cout << number << "|" << name << std::endl;
	}

	//c++98
	std::map<int, std::string>::iterator it = m.begin();
	for (; it != m.end(); it++)
	{
		std::cout << it->first << "|" << it->second << std::endl;
	}

	//c++11
	auto it = m.begin();
	for (; it != m.end(); it++)
	{
		std::cout << it->first << "|" << it->second << std::endl;
	}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 08:41:11  更:2021-11-26 08:42:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:42:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码