Re[16]: Контроль типов в С++ и в Object pascal
От: AKh  
Дата: 11.05.07 09:41
Оценка:
Здравствуйте, OdesitVadim, Вы писали:
AKh>>>>Имхо тут надо различать оператор деления языка и математический оператор деления. Вы сравниваете совсем разные понятия.
OV>>>Ок. вот я и не понимаю: зачем плодить сущности?
AKh>>Как сказал Саттер с Александреску "Предпочитайте минимальные классы монолитным".
OV>Непонял, причем это здесь

У меня "сущность" автоматически ассоциировалась с классом.

AKh>>Моя точка зрения такая (попробую быть последовательным):

AKh>>Оператор деления языка можно "отнаследовать" от математического, т.к. он выполняет те же функции.
OV> Как кто то с класиков тоже сказал, унаследованный класс не должен изменять сущность базового. Кто то на этом форуме с сишников кричал мне что наследование — ужос.

Да, должна быть композиция.

[...]

AKh>>Это и является обоснованием рациональности ввода 2-х типов операций деления.

OV>Но я бы оставил для целого деления симпол "\" и всё. Тоесть

Как вариант. Но это уже другая тема — синтаксис языка.

OV>3/2 = 1.5

OV>3\2 = 1
OV>3.0/2 = 1.5
OV>3.0\2 = 1 (или 1.0?) Вот здесь я бы задумался, наверно ругаться надо, так как 3.4\2 я сложно представляю
OV>таким образом всё было бы по местам.

Думаю, расстановкой приоритетов (тип аргументов или тип оператора) эти проблемы бы решились.

А можно, кстати, не расстановкой приоритетов, а вернуться к вопросу о преобразовании типов, с которого это началось. Если считать, что типом результата должнен руководить оператор, то 3.0\2 = 1 останется однозначно верным. Но встает другой ворос, а 1 — это int или long? Тогда типом результата должен быть один из операторов. Логично взять делимое. Тогда 3.0\2 = 1.0 — верно. Неявное преоразование типов отсутсвует (на расширения (int*int=long) не будем обращать внимание).

Что же делает С++? Неявное преобразование типов отсутсвует. Даже, если взять пример 3/2 = 1.5. Здесь целый аргумент преобразуется в вещественный, что не способствует точности отсутсвия неявного преобразования. С++ как раз решает эту проблему. Так что на счет примера неявного преобразования
Автор: OdesitVadim
Дата: 11.05.07
вы все таки не правы.
Re[16]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 09:49
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

OV>Здравствуйте, SuhanovSergey, Вы писали:



OV>>> так приведения pointer -> TObject только явное.

SS>>Это работает:
SS>>
SS>>var
SS>>  p: Pointer;
SS>>  m: TButton;
SS>>begin
SS>>  m := p;
SS>>end;
SS>>


OV>А вы все настройки варнингов включили? там почему то по умолчанию UnSafe операции не отмечены. Для меня варнинги — ошибки, так как это потенциальные ошибки.

OV>В младших версиях за такое сразу получал по шапке. Куда мир котиться. Жаль по рукой нет 3 делфи.

Буду благодарен если скажите где это найти, ибо искал долго, но судя повсему плохо искал. Также жалею что в Делфе нету опции интерпретировать ворнинг как ошибку.
Re[17]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 09:56
Оценка:
Здравствуйте, AKh, Вы писали:

AKh>А можно, кстати, не расстановкой приоритетов, а вернуться к вопросу о преобразовании типов, с которого это началось. Если считать, что типом результата должнен руководить оператор, то 3.0\2 = 1 останется однозначно верным. Но встает другой ворос, а 1 — это int или long? Тогда типом результата должен быть один из операторов. Логично взять делимое. Тогда 3.0\2 = 1.0 — верно. Неявное преоразование типов отсутсвует (на расширения (int*int=long) не будем обращать внимание).

согласен. Где то так и я мыслю.
AKh>Что же делает С++? Неявное преобразование типов отсутсвует. Даже, если взять пример 3/2 = 1.5. Здесь целый аргумент преобразуется в вещественный, что не способствует точности отсутсвия неявного преобразования. С++ как раз решает эту проблему. Так что на счет примера неявного преобразования
Автор: OdesitVadim
Дата: 11.05.07
вы все таки не правы.

подождите, в С++ 3/2 = 1.5???
Только что проверял на компиляторе — нет, 1, так как и положено языку. Или Великий Стандарт думает по другому уже и компилятор не показатель???
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[18]: Контроль типов в С++ и в Object pascal
От: AKh  
Дата: 11.05.07 10:04
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

AKh>>Что же делает С++? Неявное преобразование типов отсутсвует. Даже, если взять пример 3/2 = 1.5. Здесь целый аргумент преобразуется в вещественный, что не способствует точности отсутсвия неявного преобразования. С++ как раз решает эту проблему. Так что на счет примера неявного преобразования
Автор: OdesitVadim
Дата: 11.05.07
вы все таки не правы.

OV>подождите, в С++ 3/2 = 1.5???
OV>Только что проверял на компиляторе — нет, 1, так как и положено языку. Или Великий Стандарт думает по другому уже и компилятор не показатель???

Вы меня не правельно поняли. 3/2 = 1.5, как и предыдущий пример взят из вашего контекста (с оператором \). Я даже отметил, что здесь "аргумент преобразуется в вещественный", а "С++ как раз решает эту проблему", т.е. в С++ все как и было спланировано (т.е. у него, в данном случае, получается, что тип результата — тип делимого).

Извенясь, если не достаточно подробно изложил.
Re[17]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 10:07
Оценка:
Здравствуйте, vasmann, Вы писали:

OV>>А вы все настройки варнингов включили? там почему то по умолчанию UnSafe операции не отмечены. Для меня варнинги — ошибки, так как это потенциальные ошибки.

OV>>В младших версиях за такое сразу получал по шапке. Куда мир котиться. Жаль по рукой нет 3 делфи.

V>Буду благодарен если скажите где это найти, ибо искал долго, но судя повсему плохо искал. Также жалею что в Делфе нету опции интерпретировать ворнинг как ошибку.

Вот как интерпретировать ворнинг как ошибку я не знаю. Я просто привык убирать все ворнинги и хинты. Полностью. Даже хинт — потенциальный глюк в будущем. Но бывают случаи, когда я всё таки не согласен с компилятором. Тогда я явно ставлю Отключение ворнингов на данную строку с припиской почему.
Это у меня выглядит так:
{$WARNINGS OFF}//обяснения, почему здесь. обычно это TODO.
//Палённая строка
{$WARNINGS ON}

Включить дополнительные варнинги надо так.
Project-Options...-Compiler messages должны все галочки стоять, кроме "Default"
Вкладка Compiler. "Typed @ operator" — сразу забудет о многих странных преобразованиях.
"Assignable type constants" должна быть снята.
"Stack frame" лучше поставить — преобразования это не исправит, но для отладки — очень помогает — отладчик начинает видеть значения параметров в окне "Call stack"
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[19]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 10:09
Оценка:
Здравствуйте, AKh, Вы писали:

AKh>Вы меня не правельно поняли. 3/2 = 1.5, как и предыдущий пример взят из вашего контекста (с оператором \). Я даже отметил, что здесь "аргумент преобразуется в вещественный", а "С++ как раз решает эту проблему", т.е. в С++ все как и было спланировано (т.е. у него, в данном случае, получается, что тип результата — тип делимого).


AKh>Извенясь, если не достаточно подробно изложил.

А я уже испугался, что стандарт поменяли.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[18]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 10:11
Оценка:
Спасибо.
Не знаю чего, но вот Complier-messages это наверно единственное куда я не лазил — и как окозалось зря.
Еще раз спасибо.
Re[19]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 10:23
Оценка:
V>Не знаю чего, но вот Complier-messages это наверно единственное куда я не лазил — и как окозалось зря.
Что-то я не могу найти такую вкладку. Delphi6.
Re[12]: Контроль типов в С++ и в Object pascal
От: Кодт Россия  
Дата: 11.05.07 11:10
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

OV>>>А вот создателей Си/С++ за результат выражения 3/2 расстрелял. очень сложно логике здравой поддаётся. (ну мож на процессорах и понятно, но в нормальной жизни...)

V>>Все очень здраво — свои намерения выражайте явно а не неявно
V>>3/2 — это деление двух целых
OV>Да, но скажи это в школе или институте. Они пальчиком у виска покрутят. Только Сипрограммеры и им подобные понимают эту "особенность"

В каждом языке свой устав. Некоторые покрутят пальчиком у скрепыша в экселе: почему 2+2*2 = 6, когда на калькуляторе получается 8?

OV>Ведь если 3 яблока на двоих делить, то куда ещё одно денеться?


А в Хаскелле результат 3/2 — это Frac a => a. Попытка скормить Int или Integer в любую часть выражения — компилятор надаёт по рукам. И правильно: делить можно только то, что делится. Яблоки — можно (ножом). Болты — нельзя (даже ножовкой: это уже будут не болты, а металлолом).
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[12]: Контроль типов в С++ и в Object pascal
От: . Великобритания  
Дата: 11.05.07 12:17
Оценка:
OdesitVadim wrote:

> Да, но скажи это в школе или институте. Они пальчиком у виска покрутят.

А что скажешь насчёт sqrt(-5)?
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[13]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 12:32
Оценка:
Здравствуйте, ., Вы писали:

.>OdesitVadim wrote:


>> Да, но скажи это в школе или институте. Они пальчиком у виска покрутят.

.>А что скажешь насчёт sqrt(-5)?
В фортране (язык математиков?) всё было просто. там это работало, если указать что числа комплексные.

В Си/Паскале во время выполнения выскочит ошибка, которую можно перевести как "Не знаю как это сделать.". Согласитесь, это разные вещи, когда программа говорит, что она не знает/не умеет и когда она по "дивным" правилам (по "дивным", потомучто одним они просты, другим — дики, третим совсем непонятно, но все более-менее смирились)

Но и в Си++, и в Делфи (начиная с 2005) можно обявить свой тип а ля TComplex, определить для него действия и вуаля. Всё так как ожидается (потому что сам определял
Кстати, для делфи такой модуль почти в стандартной поставке.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 12:35
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

OV>Здравствуйте, ., Вы писали:


.>>OdesitVadim wrote:


>>> Да, но скажи это в школе или институте. Они пальчиком у виска покрутят.

.>>А что скажешь насчёт sqrt(-5)?
OV>В фортране (язык математиков?) всё было просто. там это работало, если указать что числа комплексные.

OV>В Си/Паскале во время выполнения выскочит ошибка, которую можно перевести как "Не знаю как это сделать.". Согласитесь, это разные вещи, когда программа говорит, что она не знает/не умеет и когда она по "дивным" правилам (по "дивным", потомучто одним они просты, другим — дики, третим совсем непонятно, но все более-менее смирились)


OV>Но и в Си++, и в Делфи (начиная с 2005) можно обявить свой тип а ля TComplex, определить для него действия и вуаля. Всё так как ожидается (потому что сам определял

OV>Кстати, для делфи такой модуль почти в стандартной поставке.

Только вот беда, нет перегруженных операторов. И по этому вместо привычных +-*/ нужно писать дивные не математические фразы
add, sub, mult, div... Вы сами своим словам противоречите.
В одном месте вам не привычно, а другом то что не привычно — привычно — определитесь уже.
Re[15]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 12:44
Оценка:
Здравствуйте, vasmann, Вы писали:

V>Только вот беда, нет перегруженных операторов. И по этому вместо привычных +-*/ нужно писать дивные не математические фразы

V>add, sub, mult, div... Вы сами своим словам противоречите.
Отстали от жизни. Всё есть.
V>В одном месте вам не привычно, а другом то что не привычно — привычно — определитесь уже.
Различайте моё отношение и отношение других. Мне чудно, но привык. Другим это абсолютно нормально. Другим нет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 12:50
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

OV>Здравствуйте, vasmann, Вы писали:


V>>Только вот беда, нет перегруженных операторов. И по этому вместо привычных +-*/ нужно писать дивные не математические фразы

V>>add, sub, mult, div... Вы сами своим словам противоречите.
OV>Отстали от жизни. Всё есть.

В делфе можно перегужать операторы? Или это фича только для комплексных? Если последнее — мне это не представляет никакой ценности, ибо комплексные числа не нужны (мне, пока что

V>>В одном месте вам не привычно, а другом то что не привычно — привычно — определитесь уже.

OV>Различайте моё отношение и отношение других. Мне чудно, но привык. Другим это абсолютно нормально. Другим нет.
А в чем проблема? Ну чудно? Ну нормально? Что тут не так? Мы ж документацию читаем на английском и не лезем им в их язык с заявками типа — чудной у вас язык, нет, в чем проблема тогда с языками программирования? Выучил правила, и все, не волнует тебе чудно или нет — применяй свои знания. Не нравится — велкам туда — где не чудно. Проще нужно относиться к жизни.

Блин, вообще тема ушла в жесткий оффтоп — зато прикольно.
Re[17]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 13:05
Оценка:
Здравствуйте, vasmann, Вы писали:

V>В делфе можно перегужать операторы? Или это фича только для комплексных? Если последнее — мне это не представляет никакой ценности, ибо комплексные числа не нужны (мне, пока что

Можно. +-/* точно можно. Нужно просто обявить новую запись (record) и добавить процедуры, которые будут собственно осуществлять действия.
я думаю это развеит ваши неведанья.
type
  TComplex = packed record
  strict private
    procedure Defuzz;
  private
    class procedure Init; static;
  public
    var
      Real, Imaginary: Double;
    class var
      Symbol: string;                 // defaults to 'i'
      SymbolBeforeImaginary: Boolean; // defaults to false
      DefuzzAtZero: Boolean;          // defaults to true
    class operator Round(const AValue: TComplex): Int64;
    class operator Trunc(const AValue: TComplex): Int64;
    class operator Equal(const Left, Right: TComplex): Boolean;
    class operator NotEqual(const Left, Right: TComplex): Boolean;
    class operator LessThan(const Left, Right: TComplex): Boolean;
    class operator LessThanOrEqual(const Left, Right: TComplex): Boolean;
    class operator GreaterThan(const Left, Right: TComplex): Boolean;
    class operator GreaterThanOrEqual(const Left, Right: TComplex): Boolean;
    class operator Add(const Left, Right: TComplex): TComplex;
    class operator Subtract(const Left, Right: TComplex): TComplex;
    class operator Multiply(const Left, Right: TComplex): TComplex;
    class operator Divide(const Left, Right: TComplex): TComplex;
    class operator Negative(const AValue: TComplex): TComplex;

    // Note: currently Implicit operators work like Explicit operators in Win32,
    // i.e. they need an explicit type-cast
    class operator Implicit(const AValue: Double): TComplex;
    class operator Implicit(const AValue: Integer): TComplex;
    class operator Implicit(const AValue: Int64): TComplex;
    class operator Implicit(const AValue: Variant): TComplex;
    class operator Explicit(const AValue: TComplex): Double;
    class operator Explicit(const AValue: TComplex): Integer;
    class operator Explicit(const AValue: TComplex): Int64;
  end;


И как пример, реализация некоторых из них.
class function TComplex.From(const AReal, AImaginary: Double): TComplex;
begin
  Result.Real := AReal;
  Result.Imaginary := AImaginary;
  if DefuzzAtZero then
    Result.Defuzz;
end;

class operator TComplex.Add(const Left, Right: TComplex): TComplex;
begin
  Result := From(Left.Real + Right.Real, Left.Imaginary + Right.Imaginary);
end;

class operator TComplex.Subtract(const Left, Right: TComplex): TComplex;
begin
  Result := From(Left.Real - Right.Real, Left.Imaginary - Right.Imaginary);
end;

class operator TComplex.Multiply(const Left, Right: TComplex): TComplex;
begin
  Result := From((Left.Real * Right.Real) - (Left.Imaginary * Right.Imaginary),
                 (Left.Real * Right.Imaginary) + (Left.Imaginary * Right.Real));
end;
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[18]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 13:12
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

OV>Здравствуйте, vasmann, Вы писали:


V>>В делфе можно перегужать операторы? Или это фича только для комплексных? Если последнее — мне это не представляет никакой ценности, ибо комплексные числа не нужны (мне, пока что

OV>Можно. +-/* точно можно. Нужно просто обявить новую запись (record) и добавить процедуры, которые будут собственно осуществлять действия.
OV>я думаю это развеит ваши неведанья.
OV>
OV>type
OV>  TComplex = packed record
OV>  strict private
OV>    procedure Defuzz;
OV>  private
OV>    class procedure Init; static;
OV>  public
OV>    var
OV>      Real, Imaginary: Double;
OV>    class var
OV>      Symbol: string;                 // defaults to 'i'
OV>      SymbolBeforeImaginary: Boolean; // defaults to false
OV>      DefuzzAtZero: Boolean;          // defaults to true
OV>    class operator Round(const AValue: TComplex): Int64;
OV>    class operator Trunc(const AValue: TComplex): Int64;
OV>    class operator Equal(const Left, Right: TComplex): Boolean;
OV>    class operator NotEqual(const Left, Right: TComplex): Boolean;
OV>    class operator LessThan(const Left, Right: TComplex): Boolean;
OV>    class operator LessThanOrEqual(const Left, Right: TComplex): Boolean;
OV>    class operator GreaterThan(const Left, Right: TComplex): Boolean;
OV>    class operator GreaterThanOrEqual(const Left, Right: TComplex): Boolean;
OV>    class operator Add(const Left, Right: TComplex): TComplex;
OV>    class operator Subtract(const Left, Right: TComplex): TComplex;
OV>    class operator Multiply(const Left, Right: TComplex): TComplex;
OV>    class operator Divide(const Left, Right: TComplex): TComplex;
OV>    class operator Negative(const AValue: TComplex): TComplex;

OV>    // Note: currently Implicit operators work like Explicit operators in Win32,
OV>    // i.e. they need an explicit type-cast
OV>    class operator Implicit(const AValue: Double): TComplex;
OV>    class operator Implicit(const AValue: Integer): TComplex;
OV>    class operator Implicit(const AValue: Int64): TComplex;
OV>    class operator Implicit(const AValue: Variant): TComplex;
OV>    class operator Explicit(const AValue: TComplex): Double;
OV>    class operator Explicit(const AValue: TComplex): Integer;
OV>    class operator Explicit(const AValue: TComplex): Int64;
OV>  end;
OV>


OV>И как пример, реализация некоторых из них.

OV>
OV>class function TComplex.From(const AReal, AImaginary: Double): TComplex;
OV>begin
OV>  Result.Real := AReal;
OV>  Result.Imaginary := AImaginary;
OV>  if DefuzzAtZero then
OV>    Result.Defuzz;
OV>end;

OV>class operator TComplex.Add(const Left, Right: TComplex): TComplex;
OV>begin
OV>  Result := From(Left.Real + Right.Real, Left.Imaginary + Right.Imaginary);
OV>end;

OV>class operator TComplex.Subtract(const Left, Right: TComplex): TComplex;
OV>begin
OV>  Result := From(Left.Real - Right.Real, Left.Imaginary - Right.Imaginary);
OV>end;

OV>class operator TComplex.Multiply(const Left, Right: TComplex): TComplex;
OV>begin
OV>  Result := From((Left.Real * Right.Real) - (Left.Imaginary * Right.Imaginary),
OV>                 (Left.Real * Right.Imaginary) + (Left.Imaginary * Right.Real));
OV>end;
OV>

Круто, хоть что-то чем нечего .
Но это же не полноценная перегрузка операторов. Так что тоже не то. Но как уже сказал — лучше чем ничего. Просто со стороны бормана наблюдается такая тенденция, как в анегдоте про обезьяну — я и умная и красивая, но не разорваться же мне, городят что попало, шоб було а практического применения кроме как комплексных чисел я не вижу. Возможно кто то матрицы будет этим крутить, вертеть, но тогда все равно нужно будет иметь что то типа вроперов — перевода класса в структуру и по структуре создание рекорда — в общем это не то, и без этого я мог жить и жить смогу.

На самом деле, лично для мен Система Типов стоит важнее кастрированных операторов.
Re[19]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 13:15
Оценка:
Я не удивлюсь если они прикрутят еще "недо-шаблоны" к Делфе, это будет нечто.
Re[19]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 13:18
Оценка:
Здравствуйте, vasmann, Вы писали:

V>Круто, хоть что-то чем нечего .

Ну а вы так хотели, что бы у нас было на уровне 90.
V>Но это же не полноценная перегрузка операторов. Так что тоже не то.
А что не хватает?
V>Но как уже сказал — лучше чем ничего. Просто со стороны бормана наблюдается такая тенденция, как в анегдоте про обезьяну — я и умная и красивая, но не разорваться же мне, городят что попало, шоб було а практического применения кроме как комплексных чисел я не вижу. Возможно кто то матрицы будет этим крутить, вертеть, но тогда все равно нужно будет иметь что то типа вроперов — перевода класса в структуру и по структуре создание рекорда — в общем это не то, и без этого я мог жить и жить смогу.

V>На самом деле, лично для мен Система Типов стоит важнее кастрированных операторов.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[20]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 13:20
Оценка:
Здравствуйте, vasmann, Вы писали:

V>Я не удивлюсь если они прикрутят еще "недо-шаблоны" к Делфе, это будет нечто.

Мое мнение — все грабли растут из референсной модели. И даже чего т омне кажется что сделали ее не из-за того что она какие то плюсы несет в себе (ну вот хоть убейте, не вижу я преимущества в том что мне в каждой функции писать такое:
begin
  myFavoriteObject := TMyFavoriteObject.Create(args);
  try
    .....
  finally
    myFavoriteObject.free;  
  end;


Мне все больше кажется что эту модель выбрали просто насло С++ — типа хоть чемто будет отличаться, в то время как в С++ мы имеем все механизмы нам необходимые
нужна ссылка? Получите &.
нужен поинтер на обеькт — получите и распишитесь
нужен обьект который урет при разрушении стека — получите.
И отсюда ж сколько прелестей вытекает.
Re[20]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 13:24
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

OV>Здравствуйте, vasmann, Вы писали:


V>>Круто, хоть что-то чем нечего .

OV>Ну а вы так хотели, что бы у нас было на уровне 90.
А вы считаете граблявое, костылявое решение лучше заранее заложенного элегантного в язык?
Я нет.
Вы считаете что та перегрузка операторов которую смогли вкрутить/ввертеть борманци в делфи это та перегрузка которую дает стандарт С++? Не смешите.
Как я уже отписался выше — все кривости растут из референсной модели которая ничего, не то чтобы ничего а ВООБЩЕ НИЧЕГО положительно в себе не несет, кроме как гемороя. Но это ж раздел уже священных воин.
И главное — с этим можно жить и как не странно можно програмить.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.