찾다

 >  Q&A  >  본문

c++的列表初始化

对于如下代码 :

vector<int> v1{1,2,3};
vector<int> v2 = {1,2,3}; 
  1. 两者有区别吗? 前者肯定是列表初始化, 后者是属于列表初始化呢还是属于赋值初始化呢?

  2. 因为我感觉涉及到类的初始化的时候, 如果用了等号, 编译器会先考虑右边, 如果右边和坐标的类型已经相同了, 那么直接执行赋值初始化, 如果不同的话, 考虑用右边的值作为初始化参数来构建一个临时的对象, 然后用这个对象来为左边进行赋值初始化, 虽然编译器可能会在实际操作中把这个过程优化掉(也不知道这个想法对不对), 所以第二种也应该算是赋值初始化.

  3. 还有, 我们自己可以写一个类能够使用列表初始化吗? 感觉列表初始化只能用在特定的几种类上面, 自己好像写不出来支持列表初始化的类啊...

PHPzPHPz2807일 전567

모든 응답(1)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-17 14:02:54

    1) 2) 优化后无区别

    3) 加一个以std::initializer_list为参数的构造函数:

    template<typename T>
    struct Stuff{
        Stuff(std::initializer_list<T> list) {
            //...
        }
    };

    회신하다
    0
  • 취소회신하다