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类型修饰符的更多相关文章

  1. C++11常用特性介绍——Lambda表达式

    一.C++11采用配对的方括号[]来创建一个匿名函数并执行,如: #include <iostream> int main() { auto func = []{ std::cout &l ...

  2. C++11常用特性介绍——array容器

    std::array是具有固定大小的数组,支持快速随机访问,不能添加或删除元素,定义于头文件<array>中. 一.概要 array是C++11新引入的容器类型,与内置数组相比,array ...

  3. C++11常用特性介绍——decltype关键字

    一.decltype的意义 有时我们只想从表达式的类型推断出要定义的变量类型,但是不想用其值进行初始化的时候,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型,在 ...

  4. C++11常用特性介绍——列表初始化

    一.列表初始化 1)C++11以前,定义初始化的几种不同形式,如下: int data = 0;   //赋值初始化 int data = {0};   //花括号初始化 int data(0); / ...

  5. C++11常用特性介绍——for循环新用法

    一.for循环新用法——基于范围的for循环 for(元素类型 元素对象 : 容器对象) { //遍历 } 1)遍历字符串 std::string str = "hello world&qu ...

  6. C++11常用特性介绍——左值引用、右值引用

    一.左值.右值 1)左值:可以放在赋值号左侧.可以被赋值的值:左值必须要在内存中有实体. 2)右值:必须放在赋值号右侧.取出值赋值给其它变量:右值可以在内存中也可以在CPU寄存器中. 二.引用 引用是 ...

  7. C++11常用特性介绍——constexpr变量

    一.constexpr变量 1)将变量声明为constexpr类型以便由编译器来验证变量的值是否为一个常量表达式,声明为constexpr的变量一定是一个常量,而且必须用常量表达式来初始化,如: in ...

  8. C++11常用特性介绍——nullptr关键字及用法

    一.nullptr关键字及用法 1)NULL的二义性 void func(int) {} void func(int*) {} 当函数调用func(NULL)时会执行哪个函数呢? 先看C++对NULL ...

  9. C++ 11 新特性: auto 和 decltype 区别和联系

    一. auto简介编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准就 ...

随机推荐

  1. Azure IoT Hub 十分钟入门系列 (1)- 10分钟带你了解Azure IoT Hub 并创建IoT Hub

    建议您先对<Azure 上 IoT 整体解决方案概览 >进行了解. 本文主要分享一个案例: 10分钟-了解Azure IoT Hub并创建Azure IoT Hub 本文主要有如下内容: ...

  2. 关于anaconda-navigator打不开的问题

    19-10版本的anaconda-navigator打不开,没有图形化界面就是很糟糕 在命令行执行各种命令都没有问题,说明anaconda并没有出现大的问题,可能只是图形化界面出了问题. 执行 ana ...

  3. vue生命周期中update的具体用法

    在页面上 改变元数据data中数据,并且导致页面重新渲染时,才会进入update周期

  4. 搭建第一个django项目

    django是python做web最为强大和全能的后端框架,不会django的python如一条咸鱼... 所以开始学习django框架. 首选得在python中下载django 下载命令: pip ...

  5. windows maven配置

    <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...

  6. DataGrid 獲取 制定 row Col 單元格

    public static class DataGridHelper     {         /// <summary>                  /// Gets the v ...

  7. 图解 Kafka 水印备份机制

    高可用是很多分布式系统中必备的特征之一,Kafka 日志的高可用是通过基于 leader-follower 的多副本同步实现的,每个分区下有多个副本,其中只有一个是 leader 副本,提供发送和消费 ...

  8. php7 Memcached

    PHP7 Memcached 扩展 wget https://codeload.github.com/websupport-sk/pecl-memcache/zip/php7/pecl-memcach ...

  9. SSL 证书格式普及,PEM、CER、JKS、PKCS12

    根据不同的服务器以及服务器的版本,我们需要用到不同的证书格式,就市面上主流的服务器来说,大概有以下格式: .DER .CER,文件是二进制格式,只保存证书,不保存私钥. .PEM,一般是文本格式,可保 ...

  10. 案例:WLC HA主WLC进入维护模式

    案例场景: 如图所示,7609-1和7609-2分别是网络中的核心设备,起了HSRP,7609-1连接的是WLC-1,,7609-2连接的是WLC-2,WLC1和WLC2的RP口相互连接. WLC的管 ...