ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++11新特性

2021-05-01 13:04:24  阅读:169  来源: 互联网

标签:11 multimap string int age 特性 C++ id 构造函数


一、原生字符串(raw string literals)

比如我们写硬盘上一个文件的访问路径:"C:\Program Files\Microsoft.NET\ADOMD.NET",你需要把它写成以下格式

string path = "C:\\Program Files\\Microsoft.NET\\ADOMD.NET";

 

这样取消字符串转义太麻烦了,C++11下可以这样写:

string path = R"(C:\Program Files\Microsoft.NET\ADOMD.NET)";

除了上面这样,你还可以使用引号

string path = R"(this "word" is good)";

二、委托构造函数(Delegating constructors)

说简单一点就是你的一个构造函数可以调用另一个构造函数

#include <bits/stdc++.h>
using namespace std;
multimap<int, int> r;
multimap<int, int>::iterator it;
class people
{
public:
    string name;
    int age;
    int id;
    people(int age,int id):age(age),id(id)
    {
        
    }
    //委托构造函数不能具有其他成员初始化表达式
    // people(int age,int id,string name):name(name),people(age,id)
    // {

    // }
    people(int age,int id,string name):people(age,id)
    {
        
    }
}

三、初始化列表

用列表的形式来初始化数组,这种方式非常直观,但只能适用于数组,不能适用于我们自定义的容器: 

int anArray[5] = { 3, 2, 7, 5, 8 }; // ok

std::vector<int> vArray = { 3, 2, 7, 5, 8 }; // 不支持

C++11现在支持了

#include <bits/stdc++.h>
using namespace std;
template<typename T>
class test{
    private:
     vector<T> arr;
    public:
     test(){}
     test(const initializer_list<T>& li){
         for(auto x : li){
             arr.push_back(x);
         }
     }
};
class Value{
    public:
    int x,y;
    double z;
    Value(int a,int b,double c):x(a),y(b),z(c){

    }
};
int main(){
    test<int> t={1,2,3,4};
    return 0;
}

四、统一初始化

C++对象初始化方法有很多种,C++ 11中,允许通过以花括号的形式来调用构造函数。这样多种对象构造方式便可以统一起来了

#include <bits/stdc++.h>
using namespace std;
multimap<int, int> r;
multimap<int, int>::iterator it;
class Value{
    public:
    int x,y;
    double z;
    //不加这个构造函数也不会报错,但是为了看起来清晰建议还是加上
    Value(int a,int b,double c):x(a),y(b),z(c){

    }
};
Value te(){
    return {1,2,0.1};
}
int main(){
    Value v = te();
    printf("%d %d %lf\n",v.x,v.y,v.z);
    return 0;
}
#include <bits/stdc++.h>
using namespace std;
multimap<int, int> r;
multimap<int, int>::iterator it;
int main()
{
    r.insert({1,2});
    r.insert({1,3});
    for(it=r.begin();it!=r.end();it++){
        printf("%d %d\n",it->first,it->second);
        //std:cout << it->first << " is " << it->second << std::endl;
    }
    return 0;
}

 

标签:11,multimap,string,int,age,特性,C++,id,构造函数
来源: https://www.cnblogs.com/kongbursi-2292702937/p/14724058.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有