Условный оператор с производными и базовыми классами с оператором конверсии в встроенные типы проблемы, ошибка компилятоC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Условный оператор с производными и базовыми классами с оператором конверсии в встроенные типы проблемы, ошибка компилято

Сообщение Anonymous »

Этот пример: < /p>

Код: Выделить всё

struct X {};
struct Y : X {};

using CY = const Y;

true ? X() : CY(); // error
< /code>
, который объясняется в этом ответе, можно изменить так: < /p>
struct X { operator int() { return 0; } };
struct Y : X { operator int() const { return 0; } };

using CY = const Y;

true ? X() : CY(); // compiles, and ?: expression yields prvalue of int
Проблема заключается в стандартном и связанном объяснении, которое основано на интерпретации стандарта, в пункте [expr.cond] p4.3.2, который говорит:
В противном случае, если T2 является базовым классом T1, целевым типом является CV1 T2, где CV1 обозначает CV-квалификаторы T1; < /p>

< /blockquote> операнд должен быть преобразован в тип const x , что означает, что при пункте [expr.cond] p6:

В противном случае, Результатом является PRValue.
Если второй и третий операнды не имеют такого же типа, и либо имеет (возможно, CV-квалифицированный) тип класса, разрешение перегрузки < /strong> используется для определения конверсий (конверсии (конверсии (конверсии (конверсии Если таковые имеются) применяться к операндам ([over.match.oper], [over.built]).
Если разрешение перегрузки не стерж, программа плохо сформирована.
иначе, конверсии Таким образом, применяются, и преобразованные операнды используются вместо исходных операндов для оставшейся части этой подпункты. каким -то образом вызов y :: int () int () const , и это не должно сказать, вы можете сказать, из -за разреза. Верно?>

Подробнее здесь: https://stackoverflow.com/questions/794 ... rator-to-b
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»