Показать сообщение отдельно

  #5464  
Старый 29.08.2021, 11:47
san0
Постоянный
Регистрация: 15.12.2013
Сообщений: 412
С нами: 6530249

Репутация: 133
По умолчанию

Цитата:
Сообщение от kin4stat  

Ну как минимум emplace_back возвращает lvalue reference, а у тебя auto&&, который rvalue reference
Неа, в этом случае оба объявления являются идентичными https://en.cppreference.com/w/cpp/language/reference.

C++:





Код:
auto
&&
lvref
=
objs
.
emplace_back
(
)
;
auto
&
fref
=
objs
.
emplace_back
(
)
;
static_assert
(
std
::
is_same

(
)
)
;


Цитата:
Сообщение от kin4stat  

RenderClass(RenderClass&) = default;
RenderClass(RenderClass&&) = default;
Посоветовал бы при использовании конструктора копирования помечать соответствующий параметр модификатором const, так как в противном случае это немного не общепринятая практика, особенно если используется семантика перемещения, которая была создана с целью устранения проблем первого конструктора.

А вообще зачем это? Использования вектора априори накладывает ограничения на тип элементов CopyAssignable и CopyConstructible, а emplace_back - MoveInsertable and EmplaceConstructible. Компилятор и так сгенерирует нужные конструкторы.

Цитата:
Сообщение от loganhackerdff  

вообще не компилилось, даже по одной
Так как вы явно указали компилятору, что необходимо создать два конструктора, в частности копирования и перемещения, то также нужно и указать, что требуется создать конструктор по умолчанию.

C++:





Код:
RenderClass
(
)
=
default
;
 
Ответить с цитированием