• C++学习之路-C++11的新特性


    C++标准的发展

    现在企业级的C++更多的采用C++11标准。因此,我们在本节讲述C++11标准相对于C++03所引入的新特性。

    在这里插入图片描述

    auto

    • 可以从初始表达式中推断出变量的类型,大大简化编程工作

      在这里插入图片描述

    这属于编译器特性,不影响最终的机器码质量,不影响运行效率。意思就是写auto和写int,生成的二进制代码一样,只不过auto更华丽一些。但同时多了缺点:不清晰。

    decltype

    • 可以获取变量的类型
      在这里插入图片描述

    nullptr

    • 用来表示空指针
    int *ptr = NULL;  // 不推荐使用
    int *ptr = nullptr;  //推荐使用
    
    • 1
    • 2

    以后声明空指针全部采用nullptr,不采用NULL。因为NULL其实就是数字0,整型数字:0。

    为什么不推荐呢?下面举个例子说明:定义两个重载函数,一个传整型,一个传指针

    void func(int v) {
    	cout << "void func(int v) " << endl;
    }
    
    void func(int *v) {
    	cout << "void func(int *v) " << endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    我想请问一下,传入NULL会执行哪个函数?

    func(NULL);
    
    • 1

    结果是执行的整型函数,因为NULL=0。但是这种写法在98标准中就会报错,因为会产生二义性。C++11修复了这个bug,我们可以通过传入nullptr,达到调用第二个的目的

    func(nullptr);
    
    • 1

    所以说,nullptr是专业的空指针,NULL是专业的0和不专业的空指针。

    快速遍历

    定义一个数组,然后循环遍历打印。我们可能会这样做:

    int array[] = { 1,2,3,4,5 };
    for (int i = 0; i < 5; i++) {
    	cout << array[i] << endl;
    }
    
    • 1
    • 2
    • 3
    • 4

    但是C++11推出快速遍历写法:

    int array[] = { 1,2,3,4,5 };
    for (int i : array) {
    	cout << i << endl;
    }
    
    • 1
    • 2
    • 3
    • 4

    格式是:

    for(数据类型 元素 : 数组)
    {
    	// do something 元素
    }
    
    • 1
    • 2
    • 3
    • 4

    这与python中的循环一样

    for i in array:
    	# do something i
    
    • 1
    • 2

    只不过C++将in换成了 “ :”。

  • 相关阅读:
    Vue的class、style绑定
    MySQL-数据库的操作
    【Linux】基础IO —— 下(实现动静态库)
    Python turtle 模块可以编写游戏,是真的吗?
    经纬度相关计算
    【数组的中心位置】python实现-附ChatGPT解析
    opencv重点知识
    大公司的Java面试题集
    Linux用户操作
    对于计算机等级考试的建议
  • 原文地址:https://blog.csdn.net/weixin_45452278/article/details/126586130