C++大括號初始化和大括號賦值的區別

C++中咱們能夠平時使用vector等容器時通常這樣初始化:vector<int> p={1,2,3};python

其中{1,2,3}是一種叫initializer_list的類型,是C++11新出的ios

除了能夠用來初始化容器,函數

還能夠像python同樣用:spa

for x in [1,2,3]: print(x)
 1 #include <iostream>
 2 
 3 int main(int argc, char **argv)  4 {  5     for(auto n : {1,2,3,4,5,6})  6  {  7         std::cout<<n<<std::endl;  8  }  9 
10 }

 

 

固然這篇博客主要是想記錄一下聲明直接初始化和聲明後賦值的區別:

 

聲明時直接初始化:

vector<int> p={1,2,3};

這直接調用相應的構造函數。

 

聲明以後再賦值:

vector<int> p; p={1,2,3};

先調用默認構造函數,再調用拷貝構造函數(賦值運算重載符)。

 

本身寫個模板類,運行一下試試:code

 1 template<typename T> class MyClass{  2     public:  3     vector<T> data;  4     MyClass(initializer_list<T> li){data=li;cout<<"{}"<<endl;}  5  MyClass(){}  6     MyClass& operator=(initializer_list<T> li){data=li;cout<<"=="<<endl;}  7 };  8 
 9 
10 int main() { 11     MyClass<int> x={1,2,3}; 12     MyClass<int> y; 13     y={2,3,4}; 14  getchar(); 15     return 0; 16 }

 

結果:blog

相關文章
相關標籤/搜索