Size: a a a

2021 February 16

DH

Dark Hole in dlang.ru
Получается какая-то тавтология
источник

DH

Dark Hole in dlang.ru
Конст может меняться но извне
источник

МВ

Макс Воробьев... in dlang.ru
Dark Hole
Конст может меняться но извне
именно. а immutable не может меняться вообще
источник

DH

Dark Hole in dlang.ru
Макс Воробьев
именно. а immutable не может меняться вообще
Тогда конст не константа
источник

DH

Dark Hole in dlang.ru
А скорее local immutable
источник

DH

Dark Hole in dlang.ru
И это нелогично
источник

МВ

Макс Воробьев... in dlang.ru
частично логично. если ты получаешь объект как const, то гарантируешь, что не будешь его изменять у себя
источник

DH

Dark Hole in dlang.ru
Вот именно что частично
источник

DA

Dmitry Antipin in dlang.ru
Суть то, в том что компилятор выдавал SF, не различая эти две функции:
void opAssign(const BigInt other) nothrow
void opAssign(BigInt other) *const* nothrow

При следующем исправлении собралось:
void opAssign(in BigInt other) nothrow
void opAssign(BigInt other) *immutable* nothrow
источник

МВ

Макс Воробьев... in dlang.ru
Dmitry Antipin
Пока исправил так:
    /**
   * Move assignment
   */
   void opAssign(const BigInt other) nothrow
   {
   this.swap(cast(BigInt*)&other);
   }
   /**
   * Move assignment
   */
   void opAssign(BigInt other) const nothrow
   {
   (cast(BigInt*)&this).swap(&other);
   }


    /**
   * Move assignment
   */
   void opAssign(in BigInt other) nothrow
   {
   this.swap(cast(BigInt*)&other);
   }
   /**
   * Move assignment
   */
   void opAssign(BigInt other) immutable nothrow
   {
   (cast(BigInt*)&this).swap(&other);
   }
(cast(BigInt*)&this).swap(&other);
источник

МВ

Макс Воробьев... in dlang.ru
вот это и есть по сути консткаст. так делать не желательно
источник

МВ

Макс Воробьев... in dlang.ru
т е по сути для const/immutable opAssign вообще быть не должно
источник

И

Игорь in dlang.ru
Dark Hole
Тогда конст не константа
в этом её смысл
источник

И

Игорь in dlang.ru
как говрится "кому константа, а кому и переменная"
источник

МВ

Макс Воробьев... in dlang.ru
Dmitry Antipin
Суть то, в том что компилятор выдавал SF, не различая эти две функции:
void opAssign(const BigInt other) nothrow
void opAssign(BigInt other) *const* nothrow

При следующем исправлении собралось:
void opAssign(in BigInt other) nothrow
void opAssign(BigInt other) *immutable* nothrow
лучше удали opAssign с модификаторами
источник

DH

Dark Hole in dlang.ru
Игорь
как говрится "кому константа, а кому и переменная"
А потом эту константу меняют в середине функции. Бадум тсс
источник

МВ

Макс Воробьев... in dlang.ru
Dark Hole
А потом эту константу меняют в середине функции. Бадум тсс
в середине ф-и ее так просто не изменишь
источник

МВ

Макс Воробьев... in dlang.ru
по крайней мере в D
источник

И

Игорь in dlang.ru
вот в середине ф-ции (вызванной) её и не меняют. конст в аргументах это обещание не менять
источник

DH

Dark Hole in dlang.ru
Макс Воробьев
в середине ф-и ее так просто не изменишь
Я имею в виду, что снаружи поменяли
источник