Size: a a a

2020 September 15

K

Kirill in pro.cxx
Yarique Belgorodsky
@devcpp не знание языка не делает багой неисвесные вам аспекты языка)
В общем то я знаю что такое copy elision и как он работает, суть в том что ловить багу, которая вызвана этой штукой - задача не из простых
источник

AK

Andrei K in pro.cxx
Он не должен был вызываться, но nvcc не соптимизировала. Это стало багой только в новом стандарте.
источник

AZ

Alexander Zaitsev in pro.cxx
кстати, тут интересный момент. А в каких случаях пользователь может хотеть пустой конструктор копирования?
источник

AK

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

AK

Andrei K in pro.cxx
Alexander Zaitsev
кстати, тут интересный момент. А в каких случаях пользователь может хотеть пустой конструктор копирования?
Хз, но кажется это повод выдать ворнинг каким-нибудь анализатором.
источник

ПК

Побитый Кирпич... in pro.cxx
Andrei K
Он не должен был вызываться, но nvcc не соптимизировала. Это стало багой только в новом стандарте.
Дак причем тут новый стандарт?
источник

ПК

Побитый Кирпич... in pro.cxx
в новом и в nvcc будет elision
источник

AZ

Alexander Zaitsev in pro.cxx
Andrei K
Хз, но кажется это повод выдать ворнинг каким-нибудь анализатором.
я к тому и клоню, что если юзкейсов нет, то можно было бы и ворнить такое
источник

AK

Andrei K in pro.cxx
Побитый Кирпич
Дак причем тут новый стандарт?
Новый стандарт обязывает компиляторы делать copy elision
источник

YB

Yarique Belgorodsky in pro.cxx
Andrei K
Тут речь не о copy-elision, а о том, что пустой конструктор вызвался. Вот это бага (в новом стандарте)
что такое "пустой конструктор" ?
источник

ПК

Побитый Кирпич... in pro.cxx
Andrei K
Новый стандарт обязывает компиляторы делать copy elision
Так значит там в обоих случаях не будет вызова конструктора, всё норм
источник

K

Kirill in pro.cxx
Yarique Belgorodsky
что такое "пустой конструктор" ?
Foo(const Foo&) {}
источник

YB

Yarique Belgorodsky in pro.cxx
Kirill
Foo(const Foo&) {}
а где сам код?
источник

K

Kirill in pro.cxx
Yarique Belgorodsky
а где сам код?
Чего? Пустого конструктора?
источник

AK

Andrei K in pro.cxx
Побитый Кирпич
Так значит там в обоих случаях не будет вызова конструктора, всё норм
Да, всё будет норм, а сейчас не норм. nvcc вызвал копирование объекта, и стукнулся головой уже об багу программиста, который конструктор оставил пустым.
источник

YB

Yarique Belgorodsky in pro.cxx
Kirill
Чего? Пустого конструктора?
в  котором вызывается, то, что ты назвал "пустой конструктор"?
источник

AK

Andrei K in pro.cxx
Alexander Zaitsev
я к тому и клоню, что если юзкейсов нет, то можно было бы и ворнить такое
Там кстати если поля в классе есть, то уже должен быть ворнинг, что неинициализированные мемберы.
источник

K

Kirill in pro.cxx
Yarique Belgorodsky
в  котором вызывается, то, что ты назвал "пустой конструктор"?
Да нет его уже, я на std::move всё поменял
источник

ПК

Побитый Кирпич... in pro.cxx
Andrei K
Да, всё будет норм, а сейчас не норм. nvcc вызвал копирование объекта, и стукнулся головой уже об багу программиста, который конструктор оставил пустым.
дак а сейчас nvcc имеет право не оптимизировать, так что программист в любом случае виноват
источник

K

Kirill in pro.cxx
Yarique Belgorodsky
в  котором вызывается, то, что ты назвал "пустой конструктор"?
В кратце там был объект Lock для захвата контекста, который создавался и возвращался пользователю методом в классе Context
источник