c++的列表初始化
PHPz
PHPz 2017-04-17 14:00:54
0
1
548

对于如下代码 :

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

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

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

PHPz
PHPz

学习是最好的投资!

Antworte allen(1)
巴扎黑

1) 2) 优化后无区别

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

template<typename T>
struct Stuff{
    Stuff(std::initializer_list<T> list) {
        //...
    }
};
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage