На основе этого кода
struct Foo
{
Foo()
{
cout << "default ctor" << endl;
}
Foo(std::initializer_list<Foo> ilist)
{
cout << "initializer list" << endl;
}
Foo(const Foo& copy)
{
cout << "copy ctor" << endl;
}
};
int main()
{
Foo a;
Foo b(a);
// This calls the copy constructor again!
//Shouldn't this call the initializer_list constructor?
Foo c{b};
_getch();
return 0;
}
Вывод:
default ctor
копировать ctor
копировать ctor
В третьем случае я помещаю b в инициализацию скобки, которая должна вызывать конструктор initializer_list < > .
Вместо этого используется конструктор копирования.
Кто-нибудь из вас расскажет мне, как это работает и почему?