C++11常用特性介绍——auto类型修饰符
1、C++11常用特性介绍
从本篇开始介绍C++11常用特性,大致分:关键字及新语法、STL容器、多线程、智能指针内存管理,最后讲一下std::bind和std::function

二、关键字和新语法
1)auto类型修饰符,可以根据初始化代码的内容自动判断变量的类型,而不是显式的指定,如:
auto a = 1;
auto b = 'A';
由于1的类型是int,所以a的类型就是int;同样由于'A'的类型是char,所以b的类型是char。
如果只是将auto用在变量声明,那将是毫无意义的,auto主要用在遍历。如:
a)遍历字符串
std::string str = "hello world";
for(auto ch : str)
{
std::cout << ch << std::endl;
}
b)遍历数组
int array[] = {1,2,3,4,5,6,7,8,9};
for(auto i : array)
{
std::cout << i << std::endl;
}
c)遍历vector容器
std::vector<int> vect = {1,2,3,4,5,6,7,8,9};
for(auto i : vect)
{
std::cout << i << std::endl;
}
d)遍历map容器
std::map<int,int> map = {{1,1}, {2,2}, {3,3}};
for(auto iter : map)
{
std::cout << iter.first << iter.second << std::endl;
}
auto的使用为遍历提供了很大的便利,再也不用写那么长的for循环。
e)定义依赖模板参数的变量类型的模板函数
template <typename _T1,typename _T2>
void Addition(_T1 t1,_T2 t2)
{
auto v = t1 + t2;
std::cout << v << std::endl;
}
f)定义函数返回值依赖模板参数的变量类型的模板函数
template <typename _T1,typename _T2>
auto Addition(_T1 t1,_T2 t2)->decltype(t1 * t2)
{
return t1 * t2;
}
2)注意事项
a)auto变量必须在定义时初始化,类似于const关键字。
b)定义一个auto序列的变量必须始终推导成同一类型,如:
auto a=1,b=2,c=3; //正确
auto a=1,b=1.1,c='c'; //错误
c)如果初始化表达式是引用,则去除引用语义,如:
int a = 1;
int &b = a;
auto c = b; //c的类型为int而非int&(去除引用)
auto &d= b; //d的类型为int&
c = 100; //a = 1;
d = 100; //a = 100;
d)如果初始化表达式为const或volatile(或者两者兼有),则除去const/volatile语义,如:
const int a = 1;
auto b = a; //b的类型为int而非const int(去除const)
auto &c = a; //c的类型为const int
const auto d = a;//d的类型为const int
b = 100; //合法
c = 100; //非法
d = 100; //非法
e)初始化表达式为数组时,auto关键字推导类型为指针
int a[] = {1,2,3,4,5};
auto b = a;
std::cout << typeid(b).name() << std::endl;//输出int[5];
f)不能作为一些以类型为操作数的操作符的操作数,如sizeof或者typeid:
std::cout << sizeof(auto) << std::endl; //错误
std::cout << typeid(auto).name() << std::endl; //错误
g)函数参数或者模板参数不能被声明为auto,如:
template <auto T>
void Addition(auto a,T t)
{
}
C++11常用特性介绍——auto类型修饰符的更多相关文章
- C++11常用特性介绍——Lambda表达式
一.C++11采用配对的方括号[]来创建一个匿名函数并执行,如: #include <iostream> int main() { auto func = []{ std::cout &l ...
- C++11常用特性介绍——array容器
std::array是具有固定大小的数组,支持快速随机访问,不能添加或删除元素,定义于头文件<array>中. 一.概要 array是C++11新引入的容器类型,与内置数组相比,array ...
- C++11常用特性介绍——decltype关键字
一.decltype的意义 有时我们只想从表达式的类型推断出要定义的变量类型,但是不想用其值进行初始化的时候,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型,在 ...
- C++11常用特性介绍——列表初始化
一.列表初始化 1)C++11以前,定义初始化的几种不同形式,如下: int data = 0; //赋值初始化 int data = {0}; //花括号初始化 int data(0); / ...
- C++11常用特性介绍——for循环新用法
一.for循环新用法——基于范围的for循环 for(元素类型 元素对象 : 容器对象) { //遍历 } 1)遍历字符串 std::string str = "hello world&qu ...
- C++11常用特性介绍——左值引用、右值引用
一.左值.右值 1)左值:可以放在赋值号左侧.可以被赋值的值:左值必须要在内存中有实体. 2)右值:必须放在赋值号右侧.取出值赋值给其它变量:右值可以在内存中也可以在CPU寄存器中. 二.引用 引用是 ...
- C++11常用特性介绍——constexpr变量
一.constexpr变量 1)将变量声明为constexpr类型以便由编译器来验证变量的值是否为一个常量表达式,声明为constexpr的变量一定是一个常量,而且必须用常量表达式来初始化,如: in ...
- C++11常用特性介绍——nullptr关键字及用法
一.nullptr关键字及用法 1)NULL的二义性 void func(int) {} void func(int*) {} 当函数调用func(NULL)时会执行哪个函数呢? 先看C++对NULL ...
- C++ 11 新特性: auto 和 decltype 区别和联系
一. auto简介编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准就 ...
随机推荐
- js-秒数转为XX时XX分XX秒(用于计算剩余时间或倒计时)
export default { data() { return { hours: null, minute: null, second: null } }, methods: { // 秒数 转为 ...
- Steam游戏《Nine Parchments(九张羊皮纸)》修改器制作-[先使用CE写,之后有时间的话改用C#](2020年寒假小目标02)
日期:2020.01.09 博客期:122 星期四 [温馨提示]: 只是想要修改器的网友,可以直接点击此链接下载: 只是想要部分CT文件的网友,可以直接点击此链接下载: 没有博客园账号的网友,可以将页 ...
- wordpress 代码获得菜单的方法
1.第一种,在function.php中添加这个东东,wp_nav_menu()主要是用这个函数 $menu = 'menu'; $nav_menu = wp_get_nav_menu_object( ...
- oracle 基础sql语句
修改date日期时间: update T2_FOODS_STORAGE_IN set create_time =to_date('2020-01-15 12:30:20','yyyy-mm-dd hh ...
- Hack the box邀请码和注册问题总结
注意下,有3个坑, 1. 解码方式是随机的,记得看DATA下面提示用哪种 2. post时候可以直接用f12里的console,命令是: $.post('https://www.hackthebox. ...
- js 判断回文字符串
回文字符串:字符串从前往后读和从后往前读字符顺序是一致的. 判断一个字符串是不是回文字符串 function isPalindrome(str) { var str1 = str.split(''). ...
- 初探three.js几何体-Geometry
three.js几何体我们还没有说完,这一节我们说一说THREE.Geometry(),简单几何体都是继承了这个对象,使用它会相对麻烦一些,但是可操作性非常高,今天我们使用它制作一个自定义几何体-五角 ...
- 安卓开发:初步了解布局文件layout
了解完项目的目录结构,主要文件的作用之后. 了解完各常量文件的定义和使用之后,接下来的重头戏肯定是布局文件layout. 果然,网上关于“安卓布局文件layout”的各种介绍.解析.深入分析,等等资料 ...
- windows远程linux的方法(不用xshell)
先cmd进入DOS,再输入命令ssh root@要远程的linux的ip 输入密码 即可进入linux后台.如下图,即为edr后台,可以见到unabackup服务了. 如果是多次远程不同IP,第二次远 ...
- PyQt5窗口操作大全
1.多窗口交互-使用信号与槽函数'''如果一个窗口和一个窗口交互,尽量不要访问窗口B的控件:应该访问与信号绑定的槽函数,从而降低窗口之间的耦合度 例:如果A直接访问B窗口的控件,一旦B窗口的控件发生改 ...