Вопрос про конструкторы
От: Videoman Россия https://hts.tv/
Дата: 07.08.19 11:02
Оценка:
Есть код (прошу не спрашивать почему такой, это выжимка из большой библиотеки ):
struct A
    {
        operator size_t() const;
        operator std::vector<std::string>() const;
    };

// Где-то ниже....

A a;
std::vector<string_t> v1 = a; // (1) ОК
std::vector<string_t> v2(a);  // (2) Error - Ambiguous...

Можно пояснить как логика тут работает (а-то я умудрился "пройти мимо")
В случае (1) — не можем найти конструктор из A() и вызывает оператор преобразования типа std::vector<std::string>. (Как точно называется это синтаксис?)
В случае (2) — пытаемся вызвать конструктор сразу и не можем выбрать преобразования, т.к. оба подходят.
У них действительно разная логика порядка поиска преобразований или я что-то путаю?

Какая возникает проблема:
struct B
    {
        B(const A& a) : v(a) {} // Тут используется логика и синтаксис варианта (2). Соответственно - Error - Ambiguous...

        std::vector<std::string> v;
    };

Как-то можно в списке инициализации сказать что нужно делать как в случае (1) ?
Отредактировано 07.08.2019 11:04 Videoman . Предыдущая версия .
//
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.