之前寫了一個博客《?[淺析C++中的初始化列表(區別賦值和初始化)](http://blog.csdn.net/wangshubo1989/article/details/48937325 "成員變量初始化")》,講述了類的構造函數使用初始化列表來初始化成員變量。
現在,撇開過往不談,就談一談普通的變量賦值。即是我們要提到的initializer_list。
這同樣是一個C++11的特性。
過往,我們這樣給vector賦值:
~~~
std::vector v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
~~~
需要感謝的是,C++11讓你更方便。
~~~
std::vector v = { 1, 2, 3, 4 };
~~~
這就是所謂的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;
}
~~~
最后寫一個類,可以對比一下,加深理解
~~~
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
}
~~~
這下子明白 {} 和 () 的區別了吧!!!
- 前言
- 吐血整理C++11新特性
- C++11新特性之std::function
- c++11特性之正則表達式
- c++11特性之Lambda表達式
- c++11特性之override和final關鍵字
- c++11特性之std::thread--初識
- c++11特性之std::thread--初識二
- c++11特性之initializer_list
- c++11特性之std::thread--進階
- c++11特性之std::thread--進階二
- C++11新特性之 CALLBACKS
- C++11新特性之 std::array container
- C++11新特性之 nullptr
- C++11新特性之 rvalue Reference(右值引用)
- C++11新特性之 Move semantics(移動語義)
- C++11新特性之 default and delete specifiers
- C++11新特性之 Static assertions 和constructor delegation
- 開始使用C++11的幾個理由
- C++11新特性之 std::future and std::async