• C++11/17 语法新特性(踩坑第1篇)


    C++11开始,可以用  {  }  来初始化类的对象。

    auto uri = mongocxx::uri{ "mongodb://host1/?minPoolSize=3&maxPoolSize=5" };
    //小括号初始化
    string str("hello");
     
    //等号初始化
    string str="hello";
     
    //大括号初始化
    struct Studnet{
     char* name;
     int age;
    };
    Studnet s={"dablelv",18}; //纯数据(Plain of Data,POD)类型对象
    Studnet sArr[]={{"dablelv",18},{"tommy",19}}; //POD数组

    C++11扩充了大括号初始化功能

    class Test{ 
     int a; 
     int b; 
    public: 
     C(int i, int j); 
    }; 
    Test t{0,0};     //C++11 only,相当于 Test t(0,0); 
    Test* pT=new Test{1,2};   //C++11 only,相当于 Test* pT=new Test{1,2}; 
    int* a = new int[3]{ 1, 2, 0 }; //C++11 only

    此外,C++11大括号初始化还可以应用于容器,终于可以摆脱 push_back() 调用了,C++11中可以直观地初始化容器了:

    // C++11 container initializer 
    vector<string> vs={ "first", "second", "third"}; 
    map<string,string> singers ={ {"Lady Gaga", "+1 (212) 555-7890"},{"Beyonce Knowles", "+1 (212) 555-0987"}}; 


    因此,可以将C++11提供的大括号初始化作为统一的初始化方式,既降低了记忆难度,也提高的代码的统一度。

    此外,C++11中,类的数据成员在申明时可以直接赋予一个默认值

    class C 
    {
    private: 
     int a=7; //C++11 only
    }; 
  • 相关阅读:
    Unit of Work
    OAuth做webapi认证
    Js数组
    UWP开发的一些思考
    表格行拖拽
    委托
    Git协作流程(转)
    全自动Web后门扫描(转)
    Gradle 2.0用户手册——总览(译)(转)
    面向对象之两大要领 (转)
  • 原文地址:https://www.cnblogs.com/music-liang/p/12777302.html
Copyright © 2020-2023  润新知