Size: a a a

2020 September 15

K

Kirill in pro.cxx
Yarique Belgorodsky
а с чего ты взял, что этот компилятор поддерживает стандарт C++17 ?
Должен поддерживать, это же не фигня какая-то
источник

YB

Yarique Belgorodsky in pro.cxx
Kirill
Должен поддерживать, это же не фигня какая-то
а если почитать доки версии компилятора этого?)
источник

ПК

Побитый Кирпич... in pro.cxx
Kirill
Должен поддерживать, это же не фигня какая-то
Ты сам должен его включать
источник

K

Kirill in pro.cxx
Побитый Кирпич
Ты сам должен его включать
Кстати, возможно в этом проблема. Я ему никаких флагов --std не передавал
источник

ПК

Побитый Кирпич... in pro.cxx
Если при явном включении С++17 он всё ещё копирует, то это баг компилятора
источник

YB

Yarique Belgorodsky in pro.cxx
Kirill
Кстати, возможно в этом проблема. Я ему никаких флагов --std не передавал
камон) так не стоит делать )
источник

ПК

Побитый Кирпич... in pro.cxx
Kirill
Кстати, возможно в этом проблема. Я ему никаких флагов --std не передавал
Если ты в том коде будешь мувы писать, то это будет хуже по идее
источник

AZ

Alexander Zaitsev in pro.cxx
Kirill
Должен поддерживать, это же не фигня какая-то
Справедливо :)
источник

K

Kirill in pro.cxx
Дома буду - ещё раз проверю. Наверняка заработает
источник

m

magras in pro.cxx
Kirill
Да нет его уже, я на std::move всё поменял
Возможно я неправильно понял, но явный move в return'е не позволяет компилятору применять copy elision и поэтому является пессимизацией.

Лучше удалить copy constructor и делать return Lock(...);. В этом случае до 17го стандарта компилятор сам помувает объект, если не сможет применить copy elision. Ну и в целом существование copy ctor у лока выглядит необычно.
источник

AZ

Alexander Zaitsev in pro.cxx
да на явный мув в ретурне даже gcc варны кидает
источник

K

Kirill in pro.cxx
magras
Возможно я неправильно понял, но явный move в return'е не позволяет компилятору применять copy elision и поэтому является пессимизацией.

Лучше удалить copy constructor и делать return Lock(...);. В этом случае до 17го стандарта компилятор сам помувает объект, если не сможет применить copy elision. Ну и в целом существование copy ctor у лока выглядит необычно.
В ретурне у меня мува нет. Я его добавил в пользовательский код
auto lock(std::move(m_context->createLock()));
Вот так выглядит
Но как оказалось я просто забыл передать --std=c++17, поэтому и не работало
источник

АК

Александр Караев... in pro.cxx
Kirill
В ретурне у меня мува нет. Я его добавил в пользовательский код
auto lock(std::move(m_context->createLock()));
Вот так выглядит
Но как оказалось я просто забыл передать --std=c++17, поэтому и не работало
мда
источник

m

magras in pro.cxx
Kirill
В ретурне у меня мува нет. Я его добавил в пользовательский код
auto lock(std::move(m_context->createLock()));
Вот так выглядит
Но как оказалось я просто забыл передать --std=c++17, поэтому и не работало
Здесь же std::move ничего не делает.
источник

K

Kirill in pro.cxx
magras
Здесь же std::move ничего не делает.
Добавляет один амперсанд к типу
источник

m

magras in pro.cxx
Kirill
Добавляет один амперсанд к типу
Он и так rvalue.
источник

P

Pepe 🐸 in pro.cxx
Kirill
Добавляет один амперсанд к типу
стало 3?)
источник

m

magras in pro.cxx
magras
Здесь же std::move ничего не делает.
Хотя возможно он и здесь препятствует copy elision. С уверенностью не скажу.
источник

K

Kirill in pro.cxx
Ну, значит std::move здесь как минимум ничего не ломает
источник

K

Kirill in pro.cxx
В общем я это всё равно переделаю под copy elision, потому что мув-конструктор сильно нагрузил такой простой класс
источник