对于如下代码 :
vector<int> v1{1,2,3};
vector<int> v2 = {1,2,3};
两者有区别吗? 前者肯定是列表初始化, 后者是属于列表初始化呢还是属于赋值初始化呢?
因为我感觉涉及到类的初始化的时候, 如果用了等号, 编译器会先考虑右边, 如果右边和坐标的类型已经相同了, 那么直接执行赋值初始化, 如果不同的话, 考虑用右边的值作为初始化参数来构建一个临时的对象, 然后用这个对象来为左边进行赋值初始化, 虽然编译器可能会在实际操作中把这个过程优化掉(也不知道这个想法对不对), 所以第二种也应该算是赋值初始化.
还有, 我们自己可以写一个类能够使用列表初始化吗? 感觉列表初始化只能用在特定的几种类上面, 自己好像写不出来支持列表初始化的类啊...
巴扎黑2017-04-17 14:02:54
1) 2) No difference after optimization
3) Add a constructor with std::initializer_list as parameter:
template<typename T>
struct Stuff{
Stuff(std::initializer_list<T> list) {
//...
}
};