zoukankan      html  css  js  c++  java
  • 【C++标准库】C++11新特性

    模板表达式内的空格

    空指针

    C++定义了nullptr以取代0或者NULL。nullptr是std::nullptr_t类型的(constexpr)变量。std::nullptr_t可以显式或隐式地转换为任何指针(包括类的成员函数指针),但不能显式或隐式地转换为任何其他类型。

    auto自动类型推导

    Range Based for循环

    类似于别的语言中的foreach循环

    template <typename T>
    void PrintElement(const T& coll) //打印集合内所有元素
    {
        for (const auto& elem : coll)
        {
            std::cout << elem << std::endl;
        }
    }

     move语义

    与move相对的就是copy。众所周知,C++的变量都是“值语义”的。所谓的值语义的变量,就是它的行为跟int类型是一样的,典型表现就是作为参数传入函数中需要再复制一个作为形式参数,它的变化不会影响到原来的变量。 这样就会造成多次没有意义的copy,即损失了时间又损失了内存。

    move是将对象的状态和所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存的拷贝。

    C++中move()可实现所有权的转移

    string s1 = "apple";
    string s2 = "banana";
    s1 = move(s2); //s1=="banana" 
    vector<int> v1;
    vector<int> v2 = { 1,2,3,4 };
    v1 = move(v2); //v1={1,2,3,4}

    转移之后的状态为“仍然有效,但状态不明”。

    Range based for循环

    类似于其它编程语言中的foreach循环。

    template <typename T>     //打印集合内所有元素
    void PrintElements(const T& coll)
    {
        for (const auto& elem : coll)
        {
            std::cout << elem << std::endl;
        }
    }

    原生字符串

    Raw string以R"(开头,以)"结尾

    如果要在raw string内输出)",可以使用定义符,因此一个完整的语法是 R"delim(...)delim",其中delim为一个字符序列,最多16个基本字符,不可包含反斜线、空格和小括号。

    cout << R"abcd(\hello world)abcd" << endl;  //--> \hello world

     noexcept关键字

    noexcept关键字用于指明某个函数无法或者不打算抛出异常。

    constexpr关键字

    常量表达式是指不会改变并且在编译过程中就能得到计算结果的表达式

    constexpr int square(int x)
    {
        return x*x;
    }
    int main()
    {
        float a[square(3)];  //定义数组大小需在编译期确定
        return 0;
    }
  • 相关阅读:
    iaure学习网站
    linux下环境搭建比较
    微信分享jsdk接口
    微信接口开发遇到的问题
    Centos7.6部署k8s(v1.14.2)集群
    k8s简介
    nginx配置ssl证书
    kafka zookeeper介绍
    mysql数据库的备份与还原
    centos7 部署jumpserver
  • 原文地址:https://www.cnblogs.com/larry-xia/p/9264460.html
Copyright © 2011-2022 走看看