zoukankan      html  css  js  c++  java
  • C++11:初始化列表

    在老版本的C++中,我们可以比较方便得对结构体、数组等对象利用{}进行初始化,而类变量的初始化则取决于构造函数的形式,例如:

    struct A {
    	int a, b, c;
    };
    
    class Foo
    {
    public:
    	Foo(int n)
    	{}
    
    };
    
    int main()
    {
    	int number[5] = { 1,2,3,4,5 };
    	std::vector<int> v = { 1,2,3,4 };
    	A a = { 0,0,0 };
    	Foo f(0);
    	return 0;
    }
    

    我们如果想对类对象也采用类似{}的方式进行方便的初始化,可以利用C++11所提供的新的类型:std::initializer_list,允许构造函数或其他函数像参数一样使用初始化列表,这位类对象的初始化和普通数组和结构体的初始化方法提供了统一的桥梁:

    class Foo
    {
    public:
    	Foo(std::initializer_list<int> nums)
    	{
    		for (auto it = nums.begin(); it != nums.end(); it++)
    		{
    
    		}
    	}
    
    };
    
    int main()
    {
            //Foo f {1,2,3,4,5}; 这样写也是可以的
            Foo f = {1,2,3,4,5};
    	return 0;
    }
    

    其实这个特性不只是可以用在对象构造上,还能将其作为普通函数的形参:

    void foo(std::initializer_list<int> v)
    {
    
    }
    
    int main()
    {
    	foo({ 6,6,6 });
    	return 0;
    }
    

    这样写起来,是不是觉得方便了很多呢?

  • 相关阅读:
    123
    p1216
    离线可持久化动态树
    线段树合并
    p2024
    树的dfs序,p1539,p1651,,2018/11/08模拟赛T3
    p1460
    CDQ分治,二维数点与三维数点,p1357与p2026与p2027与p2028与p2029
    自动AC机
    平衡二叉树之splay p1998
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/14532919.html
Copyright © 2011-2022 走看看