C++11特性--統一的初始化,std::initializer_list
阿新 • • 發佈:2019-01-23
注:本系列筆記所有內容的參考資料來源於《C++ Primer Plus》
C++11特性需編譯器支援,如果是WindowS整合開發環境,一般需要在IDE的編譯器選項裡找或者工程的屬性裡可以配置"-std=c++11"
以devC++為例:project==>project options==>Parameters==>
1.統一的初始化
*C++11擴大了初始化列表的適用範圍,使其可用於所有內建型別和使用者定義的型別。使用初始化列表時,可新增=,也可不新增
Example:
class A
{
public:
A(int i,int j):x(i),y(j)
{
}
void fun()
{
cout<<x<<ends<<y<<endl;
}
private:
int x;
int y;
};
int main()
{
int x{1};
int y = {2};
int arr[]{1,2,3};
A a{1,2};
cout<<"x: "<<x<<endl;
cout<<"y: "<<y<<endl;
cout<<"int arr:"<<endl;
for(int i=0;i<3;i++)
{
cout<<"arr["<<i<<"]: "<<arr[i]<<ends;
}
cout<<endl;
cout<<"a :";
a.fun();
return 0;
}
執行結果
2.初始化列表語法的好處
*防止縮窄,即禁止將數值賦給無法儲存它的數值變數,但允許更寬型別的轉換
Example:
int main()
{
char c=200; //no warning
char c1{200};//Warning, narrowing conversion of '200' from 'int' to 'char' inside { }
double d{200};//ok
return 0;
}
3.std::initializer_list
STL容器提供了將initializer_list作為引數的建構函式
Example:
int main()
{
vector<int> vec{1,2,3,4};
for(int x:vec)
{
cout<<x<<ends; //1 2 3 4
}
return 0;
}
Tips:intializer_list還可以用作常規函式引數,此時需包含標頭檔案(#include<initializer_list>)
這個模板類包含成員begin()和end(),可用於獲悉列表的範圍
Example:
void fun(initializer_list<int> il)
{
for(auto p=il.begin();p!=il.end();p++)
{
cout<<*p<<ends;
}
}
int main()
{
fun({1,2,3,4,5});
return 0;
C++11特性需編譯器支援,如果是WindowS整合開發環境,一般需要在IDE的編譯器選項裡找或者工程的屬性裡可以配置"-std=c++11"
以devC++為例:project==>project options==>Parameters==>
1.統一的初始化
*C++11擴大了初始化列表的適用範圍,使其可用於所有內建型別和使用者定義的型別。使用初始化列表時,可新增=,也可不新增
Example:
class A
{
public:
A(int i,int j):x(i),y(j)
{
}
void fun()
{
cout<<x<<ends<<y<<endl;
}
private:
int x;
int y;
};
int main()
{
int x{1};
int y = {2};
int arr[]{1,2,3};
A a{1,2};
cout<<"x: "<<x<<endl;
cout<<"y: "<<y<<endl;
cout<<"int arr:"<<endl;
for(int i=0;i<3;i++)
{
cout<<"arr["<<i<<"]: "<<arr[i]<<ends;
}
cout<<endl;
cout<<"a :";
a.fun();
return 0;
}
執行結果
2.初始化列表語法的好處
*防止縮窄,即禁止將數值賦給無法儲存它的數值變數,但允許更寬型別的轉換
Example:
int main()
{
char c=200; //no warning
char c1{200};//Warning, narrowing conversion of '200' from 'int' to 'char' inside { }
double d{200};//ok
return 0;
}
3.std::initializer_list
STL容器提供了將initializer_list作為引數的建構函式
Example:
int main()
{
vector<int> vec{1,2,3,4};
for(int x:vec)
{
cout<<x<<ends;
}
return 0;
}
Tips:intializer_list還可以用作常規函式引數,此時需包含標頭檔案(#include<initializer_list>)
這個模板類包含成員begin()和end(),可用於獲悉列表的範圍
Example:
void fun(initializer_list<int> il)
{
for(auto p=il.begin();p!=il.end();p++)
{
cout<<*p<<ends;
}
}
int main()
{
fun({1,2,3,4,5});
return 0;