C++11特性--统一的初始化,std::initializer_list
2013-07-22 11:12
465 查看
注:本系列笔记所有内容的参考资料来源于《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;
}
Output:
[b]1 2 3 4 5[/b]
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;
}
Output:
[b]1 2 3 4 5[/b]
相关文章推荐
- C++11特性(模板类 initializer_list)
- C++11中std::initializer_list的使用
- c++11特性之initializer_list
- C++11中新特性之:initializer_list详解
- C++11新特性:initializer_list
- c++11新特性initializer_list模板
- c++11特性之initializer_list
- 如何写cmake使其包含c++11特性 (-std=c++11如何写进cmakeList.txt)
- c++11特性之initializer_list
- c++11特性之initializer_list
- C++11 新特性 braced-init-list (List Initialization) 列表初始化
- C++11 新特性(5) 统一初始化
- 性能特性测试系列2——c++11 std::function和正常调用函数效率比较
- C++11 新特性之std::thread
- 【C++】C++11特性:初始化、hash容器和随机数生成器
- c++11特性之std::thread--初识二
- c++11特性与cocos2d-x 3.0之std::bind与std::function
- C++11之统一初始化
- C++11新特性,利用std::chrono精简传统获取系统时间的方法
- C++11新特性之七:list-initialization