c++的列表初始化

对于如下代码 :

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

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

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

阅读 2.6k
1 个回答

1) 2) 优化后无区别

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

template<typename T>
struct Stuff{
    Stuff(std::initializer_list<T> list) {
        //...
    }
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题