c++的列表初始化

【字号: 日期:2023-04-25浏览:31作者:雯心

问题描述

对于如下代码 :

vector<int> v1{1,2,3};vector<int> v2 = {1,2,3};

两者有区别吗? 前者肯定是列表初始化, 后者是属于列表初始化呢还是属于赋值初始化呢?

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

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

问题解答

回答1:

1) 2) 优化后无区别

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

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

相关文章: