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

Сообщение Re[3]: Терминология RVO типа от 11.04.2019 5:11

Изменено 11.04.2019 9:40 rg45

Re[3]: Терминология RVO типа
Здравствуйте, _NN_, Вы писали:

_NN>>>Как называется тип, который не перемещаем и не копируем, но к нему возможно применить RVO ?


R>>Я бы такой тип рассматривал как просто неперемещаемый. Ибо копируемый, но не перемещаемый — это какой-то нонсенс, имхо.


_NN>Копируемый ?


Я имел в виду, что в нормальных земных условиях существует три вида классов: 1) копируемый и перемещаемый; 2) перемещаемый, но не копируемый; 3) не копируемый и не преремещаемый. Четвертая комбинация — копируемый, но не перемещаемый — это какой-то очень специальный случай, который даже не стоит учитывать при проработке общих правил. Прошу заметить, говоря "неперемещаемый" я имею в виду такой, где попытка создать объект по rvalue или xvalue вырыжению приводит к ошибке компиляции — прошу не путать со случаем, когда вместо конструктора перемещения потихоньку вызывается конструктор копирования!

В соответствии с вышесказанным, сам для себя, я перечисленные три вида классов обозначаю как: 1) копируемый (copyable); 2) некопируемый (noncopyable); 3) неперемещаемый (nonmovable).

P.S. Короче говоря, если тип неперемещаемый, это автоматически означает, что он также и некопируемый и нет нужнды говорить об этом явно.

P.P.S И еще, RVO и Guaranged copy elision ортогональны всем перечисленным комбинациям и действуют для всех типов. Поэтому на вопрос, "как лучше называть некопируемый_неперемещаемый_тип_для_которого_действует_RVO_и_guaranteed_copy_elision?" ответ подкупает своей простотой — просто "non-movable"!
Re[3]: Терминология RVO типа
Здравствуйте, _NN_, Вы писали:

_NN>>>Как называется тип, который не перемещаем и не копируем, но к нему возможно применить RVO ?


R>>Я бы такой тип рассматривал как просто неперемещаемый. Ибо копируемый, но не перемещаемый — это какой-то нонсенс, имхо.


_NN>Копируемый ?


Я имел в виду, что в нормальных земных условиях существует три вида классов: 1) копируемый и перемещаемый; 2) перемещаемый, но не копируемый; 3) не копируемый и не преремещаемый. Четвертая комбинация — копируемый, но не перемещаемый — это какой-то очень специальный случай, который даже не стоит учитывать при проработке общих правил. Прошу заметить, говоря "неперемещаемый" я имею в виду такой, где попытка создать объект по prvalue или xvalue вырыжению приводит к ошибке компиляции — прошу не путать со случаем, когда вместо конструктора перемещения потихоньку вызывается конструктор копирования!

В соответствии с вышесказанным, сам для себя, я перечисленные три вида классов обозначаю как: 1) копируемый (copyable); 2) некопируемый (noncopyable); 3) неперемещаемый (nonmovable).

P.S. Короче говоря, если тип неперемещаемый, это автоматически означает, что он также и некопируемый и нет нужнды говорить об этом явно.

P.P.S И еще, RVO и Guaranged copy elision ортогональны всем перечисленным комбинациям и действуют для всех типов. Поэтому на вопрос, "как лучше называть некопируемый_неперемещаемый_тип_для_которого_действует_RVO_и_guaranteed_copy_elision?" ответ подкупает своей простотой — просто "non-movable"!