Почему, как и почему это неявное преобразование работает - PullRequest
0 голосов

Я не понимаю, почему c1 = {1, 2, 3, 4} и c2 = {5, 6, 7, 8} работают нормально, объявленных конструкторов нет, а компиляторы, сгенерированные компилятором, не подходят ,

Я пытался понять, сделав преобразование явным: (C &) {1, 2, 3, 4} и (const C &) {1, 2, 3, 4}, но это не работает. Если компилятор предоставляет конструктор по умолчанию со списком инициализаторов, или я рассматриваю проблему не с той стороны?

#include <cstdlib>
#include <iostream>
using namespace std;

namespace A001 {
class A { public: int a; double b; };
class B { public: int a; double b; };
class C { public: A a; B b; };
void test() {
    C c1 = { 1,2,3,4 }, c2 = { 5,6,7,8 };
        cout << c1.b.a + c2.a.b;
   }
}

1 Ответ

1 голос
/ 13 мая 2019

Это не неявное преобразование, это совокупная инициализация + скобка elision .Например,

C c1 = { 1,2,3,4 }

эквивалентно

C c1{ {1,2}, {3,4} }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...