C++11特性--统一的初始化,std::initializer_list

本文详细介绍了C++11引入的统一初始化语法,以及与之相关的std::initializer_list容器。通过实例解析,展示了如何使用这两种特性进行更高效、更简洁的代码编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        注:本系列笔记所有内容的参考资料来源于《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:

 1 2 3 4 5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值