Информация об изменениях

Сообщение Re[3]: Операции сравнения от 28.02.2026 13:10

Изменено 28.02.2026 13:12 rg45

Re[3]: Операции сравнения
Здравствуйте, LaptevVV, Вы писали:

LVV>Вот смотри, интерфейс класса

LVV>
class Fraction final{
LVV>    [/b]
LVV>    // преобразование в int - целая часть дроби
LVV>    operator int() const noexcept;
LVV>    // дружественные функции
LVV>};
LVV>
Естественно, в коде реализация отсутствует.

LVV>Нет никаких определений операций сравнения.
LVV>Но!Вот такой код работает абсолютно правильно:
LVV>
LVV>    Fraction A {3};                    // целое = <3/1>
LVV>    Fraction B {6,4};                  // дробь = <3/2>
LVV>    cout << A << B << endl;
LVV>// это работает - почему ?
LVV>    cout << std::boolalpha
LVV>         << (A == B) << '\n'  // false
LVV>         << (A != B) << '\n'  // true
LVV>         << (A <  B) << '\n'  // false
LVV>         << (A <= B) << '\n'  // false
LVV>         << (A >  B) << '\n'  // true
LVV>         << (A >= B) << '\n'; // true
LVV>

LVV>Трехстроннее сравнение автоматом синтезируется ?
LVV>Или обычные сравнения автоматом синтезируется ?

А ты неявный оператор приведения к инту непробовал объявить явным, или вообще убрать?
Re[3]: Операции сравнения
Здравствуйте, LaptevVV, Вы писали:

LVV>Вот смотри, интерфейс класса

LVV>
class Fraction final{
LVV>    [/b]
LVV>    // преобразование в int - целая часть дроби
LVV>    operator int() const noexcept;
LVV>    // дружественные функции
LVV>};
LVV>
Естественно, в коде реализация отсутствует.

LVV>Нет никаких определений операций сравнения.
LVV>Но!Вот такой код работает абсолютно правильно:
LVV>
LVV>    Fraction A {3};                    // целое = <3/1>
LVV>    Fraction B {6,4};                  // дробь = <3/2>
LVV>    cout << A << B << endl;
LVV>// это работает - почему ?
LVV>    cout << std::boolalpha
LVV>         << (A == B) << '\n'  // false
LVV>         << (A != B) << '\n'  // true
LVV>         << (A <  B) << '\n'  // false
LVV>         << (A <= B) << '\n'  // false
LVV>         << (A >  B) << '\n'  // true
LVV>         << (A >= B) << '\n'; // true
LVV>

LVV>Трехстроннее сравнение автоматом синтезируется ?
LVV>Или обычные сравнения автоматом синтезируется ?

А ты неявный оператор приведения к инту не пробовал объявить явным, или вообще убрать?