c++11特性之initializer_list

来源:互联网 发布:ae for mac破解版下载 编辑:程序博客网 时间:2024/06/04 20:08

转载:http://blog.csdn.net/wangshubo1989/article/details/49622871

之前写了一个博客《 浅析C++中的初始化列表(区别赋值和初始化)》,讲述了类的构造函数使用初始化列表来初始化成员变量。

现在,撇开过往不谈,就谈一谈普通的变量赋值。即是我们要提到的initializer_list。

这同样是一个C++11的特性。

过往,我们这样给vector赋值:

std::vector v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

需要感谢的是,c++11让你更方便。

std::vector v = { 1, 2, 3, 4 };
  • 1
  • 1

这就是所谓的initializer list。

更进一步,有一个关键字叫initializer list

C++11允许构造函数和其他函数把初始化列表当做参数。

#include <iostream>#include <vector>class MyNumber{public:    MyNumber(const std::initializer_list<int> &v) {        for (auto itm : v) {            mVec.push_back(itm);        }    }    void print() {    for (auto itm : mVec) {        std::cout << itm << " ";    }    }private:    std::vector<int> mVec;};int main(){    MyNumber m = { 1, 2, 3, 4 };    m.print();  // 1 2 3 4    return 0;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

最后写一个类,可以对比一下,加深理解

class CompareClass {  CompareClass (int,int);  CompareClass (initializer_list<int>);};int main(){    myclass foo {10,20};  // calls initializer_list ctor    myclass bar (10,20);  // calls first constructor }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这下子明白 {} 和 () 的区别了吧!!!