C++11之列表初始化

   列表初始化

 (1)C++98{}初始化 --- 缺陷: 只能初始化内置类型

//C++98使用{}对数组初始化
int arr[] = {1,2,3};
int arr[4] = {1};
//但对于自定义类型会报错
vector<int> v{1,2,3,4};

 (2)C++11内置类型列表初始化 --- {}之前可以使用=,效果一样

//内置类型
int x1 = {10};
int x2{10};
int x3 = 1+2;
int x4 = {1+2};
int x5{1+2};
//数组
int arr1[5] {1,2,3,4,5};
int arr2[] {1,2,3,4,5};

//动态数组 , C++98不支持
int* arr3 = new int[5]{1,2,3,4,5};
//标准容器
vector<int> v{1,2,3,4,5};
map<int,int> m{{1,1},{2,2},{3,3}};

 (3)C++11自定义类型列表初始化

//1.支持对单个对象直接列表初始化
class Point{
    public:
        Point(int x = 0, int y = 0):_x(x),_y(y)
        {}
    private:
        int _x;
        int _y;    
};
Point p{1,1};
//2.多个对象列表初始化需要重载一个带有initialzer_list类型参数的构造函数
//initialzer_list: 系统自定义类模板 主要方法:begin(),end(),size()
//模拟Vector借用initialzer_list实现多对象初始化
#include<class T>
class Vector{
     public:
         //...
         Vector(initialzer_list<T> l): _cap(l.size()), _size(0)
         {
             _arr = new T[_cap];
             for(auto e : l)
             {
                  _arr[_size++] = e;   
             }
         }

         Vector<T>& operator=(initialzer_list<T> l)
         {
             delete _arr;
             size_t i = 0;
             for(auto e : l)
             {
                 _arr[i++] = e;
             }
             return *this;
         }
         //...
     private:
         T* _arr;
         size_t _cap;
         size_t _size;`  
};

  initialzer_list基本用法:

       C++11之列表初始化

 

原文链接: https://www.cnblogs.com/Duikerdd/p/12505772.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++11之列表初始化

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/335640

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午10:14
下一篇 2023年3月1日 下午10:15

相关推荐