zoukankan      html  css  js  c++  java
  • C++11:05列表初始化

    列表初始化(list initalization)

    0、课前秀

    • C++98/03对于不同类型(数组,结构体,类)的初始化,有不同的方法
    int i_arr[3]={1,2,3};//普通数组  initializer list
    
    struct A
    {
        int x;
        struct B
        {
            int i;
            int j;
        }b;
    }a={1,{2,3}};//POD类型
    
    //拷贝初始化(copy-initialization)
    int i=0;
    class Foo
    {
        public:
        Foo(int){}
    }foo=123;  //需要拷贝构造函数
    //直接初始化(direct-initialization)
    int j(10);
    Foo bar(123);
    

    1、统一的初始化

    • int a5 = {3}; int a6 {3};//C++98/03不具备,C++11可以直接在变量名后面跟上初始化列表
    • Foo a3 = {123}; //虽然用了=,但仍然是列表初始化
    • 注意:在初始化时,{}前面的等于号是否书写对初始化行为没有影响

    2、列表初始化的使用细节

    • 什么时候认为是聚合类型
    struct Foo
    {
    	int x;
        double y;
        int z;
        Foo(int,int){}
    };
    Foo foo {1,2.5,1};//error  【无法将Foo看做一个聚合类型】
    
    • 还是有点坑,没有完全get到

    3.1、任意长度的 初始化列表

    3.2、std::initializer_list的一些细节

    4、防止类型收窄

    • 类型收窄:是导致数据内容发生变化或者精度丢失的隐式类型转换。
    struct Foo
    {
        Foo(int i) {std::cout<<i<<std::endl;}
    };
    
    Foo foo(1.2); //能正常编译,但i却不能完整地保存一个浮点型的数据
    
    • 隐式类型转换中,遇到类型收窄的情况,初始化列表就不会允许这种转换发生,但不同的编译器情况不太一样。

    ReadMe

    • 20200423第1版:参考《深入应用C++11》
      • 没太学好
  • 相关阅读:
    Akka源码分析-Extension
    Akka源码分析-Remote-Creating Actors Remotely
    24-2 show构造方法
    day24-1构造方法
    day23-4 最小值-到最大值排序
    day23-4 最小值-到最大值冒泡排序
    day23-3 最大值-到最小值排序
    day23-2 倒叙
    day23-1 水仙花
    day22 随机输出ArrayList
  • 原文地址:https://www.cnblogs.com/fewolflion/p/12770686.html
Copyright © 2011-2022 走看看