Alexey
может все ок и так будет :-)
Pepe 🐸
хотел просто готовую идиому / практику
Klaus
После этого первая ссылка станет ссылаться не на то.
Anonymous
я думаю самое оптимально создать массив в бар и передавать в функцию, никаких новых выделений памяти
Oleg
че?
Oleg
в смысле?
Klaus
Да, это второй вариант этой порочной практики.
Oleg
const a& = res(); res(); res(); ?
Oleg
это поломает a?
Oleg
Нет, все будет плохо, если результат первого вызова присвоят в const-ссылку, а потом функцию запустят второй раз.
Старой const-ссылкой после такого пользоваться вообще нельзя, но это всегда бывает, когда ты возвращаешь ссылку или указатель на временное.
Klaus
Завести статический циклический буфер в функции.
Klaus
Ты бы ещё указатель на автоматическую переменную вернул.
Klaus
Я пока что придумал только один относительно нормальный способ добиться нужного эффекта.
Klaus
То есть возврата большого объекта без копирования.
Oleg
Указатель на временное вообще возвращать нельзя ;)
А на static? Проблема же только в том, что у него есть время жизни, и я никак не могу средствами компилятора его форсировать, только надеяться, что пользователи foo об этом знают и не будут делать лишнего.
Klaus
Ясно же, что хочется, чтобы компилятор передал в функцию указатель на то место, куда надо вернуть результат, а не заводить для результата временную переменную на стеке и копировать её два раза - один раз в return, второй в присваивании результата.
Klaus
Интересно, что и когда делает return value optimization?
Oleg
https://wandbox.org/permlink/PhSWsvqPCrMjiBNZ
Oleg
что-то я не так сделал?
Oleg
Да.
тебе было
Klaus
Возможно, оно избегает одного копирования из двух.
Oleg
пользователь -- я. то есть пайплайн захардкоден будет
Так @whomsien и утверждает, что это плохая практика (сегодня только я, а завтра мой код кто-нибудь прочтёт и ничего не поймёт, или что-то изменит и накосячит), а не «так нельзя делать ни в коем случае» или «это не будет работать». Как я понял, передавать по ссылке массив в функцию (вместо возвращения) — чуть лучшая практика.
Alexey
это поломает a?
не должно же ничего поломать.
Pepe 🐸
думаю сделать static в функции и ссылку на нее возвращать
Oleg
https://wandbox.org/permlink/wvnKRwmLxmOFfxpo
Oleg
вот еще с векторами
Pepe 🐸
думаю сделать static в функции и ссылку на нее возвращать
с другой стороны, а если массив большой?
Oleg
не должно же ничего поломать.
вот и я говорю, что ничего не поломается. ref life time extention - это нормальная практика
Alexey
дык по стандарту в этом коде все ок. была бы ссылка не const - вот тогда было бы плохо.
Oleg
Нет, все будет плохо, если результат первого вызова присвоят в const-ссылку, а потом функцию запустят второй раз.
Oleg
вот я и не понимаю, где тут будет плохо.
Oleg
дык по стандарту в этом коде все ок. была бы ссылка не const - вот тогда было бы плохо.
кто вообще будет принимать T& на локальную переменную из функции?!
Alexey
нигде не будет. но, чтобы удостовериться, можно провести эксперимент
Pepe 🐸
видимо надо просто все обернуть в другую функцию
Anonymous
компилятор сам мувнет если будет можно, но при этом вы избежите только 1 дополнительного копирования
Igor
пытаюсь запустить в Qt Creator местный анализатор Clang code model; в процессе настройки обнаружил warning: 'B' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit [-Wweak-vtables] с SO: If all of a class's virtual methods are inline, the compiler has no way to select a translation unit in which to place a single shared copy of the vtable — instead, a copy of the vtable has to be placed in each object file that needs it. я вот не могу понять про "that needs it" - если у меня класс описывается и используется строго в одной единице трансляции, всё ОК? получается, шланг просто не может распознать, что содержимое этой единицы трансляции больше никуда не инклюдится, и варнит тупо на всякий случай?
Alexander "SonnySlave"
особенно в плане варнингов
Alexander "SonnySlave"
проверь стандарт на всякий случай, и репорти баг 😊
Igor
погоди, ты надеялся, что компилеры идеальны?)
конечно же нет, я пытаюсь понять, это баг компилятора или пробел в моём понимании происходящего
Igor
я понимаю его с формальной точки зрения - в .срр описан класс, никто не гарантирует что этот .срр не заинклюдится в другой .срр - тогда получится два описания класса в котором все виртуалки инлайновые, поэтому кланг упирается рогом и варнит от греха подальше мне больше интересно, если я не буду инклюдить .срр в .срр, то всё ок, или есть какой-то другой подводный камень, на который он агрится
Anatoly
Igor
5.0.1
Anatoly
в qt creator-?
Anatoly
@crackedmind спасибо большое!!! Стас помог решить вопрос: - установить llvm 6.0.0 http://prereleases.llvm.org/win-snapshots/LLVM-6.0.0-r320423-win32.exe - указать в качестве статического анализатора вновь установленный - cкопировать libclang.dll из 6.0.0 в папку Qt\Tools\QtCreator\bin
Igor
а, пардон, Version: 5.0.1, unsupported (supported version is 3.9)
Anatoly
Короче, сделай по этому рецепту и посмотри, помогло ли оно тебе
Igor
...ололо это винда-специфик, или на линуксах тоже проявлялось?
Anatoly
на unsupported забей
Anatoly
у меня проблема была с разбором well-formed с++, который clang 3.9.1 не понимал
🦥Alex Fails
на питоне каком-нить сраном
эх, ну зачем ты так много сообщений написал(
Igor
хех, ну ^ это действительно варнинг, который генерит обычный кланг (не в qt анализаторе) а гораздо сильнее меня интересует вот этот бред: struct A { virtual void foo(list<string>) = 0; }; struct B : A { void foo(list<string>) {} }; B::foo hides overloaded virtual function A::foo: type mismatch at first parameter ('int' vs 'std::list<std::string>' (aka 'list<int>')) сейчас попробую пошаманить с дллками
Igor
что-то не то, работает этот код
угу, и вот этот варн на standalone-исходниках мне не удалось поймать значит либо йт тупит, либо я его недонастроил чтобы он наш проект понимал
Igor
Короче, сделай по этому рецепту и посмотри, помогло ли оно тебе
не, потыкался по /bin /usr/bin /usr/lib /lib, не помогло( если что, уточняю что это не встроенный в Qt анализатор, а поставляемый с ним плагин Clang code model 4.5.0
Matwey
Что-то вспомнил: https://stackoverflow.com/q/32235855/1879547 Чат, запили мне в язык такую возможность
Billy
Коллеги. Есть вопрос. Вот есть либа которую хочется написать через pipml. Создать либу нет проблем. А вот есть объекты которые должна создавать либа, но чтобы у юзера не было возможности их самому создать и чтобы они тоже были через pimpl. Кроме friend есть способ это достичь? Спасибо
🦥Alex Fails
Что-то вспомнил: https://stackoverflow.com/q/32235855/1879547 Чат, запили мне в язык такую возможность
вроде какой-то шаблонный костыль был для такого. По крайней мере, в чате что-то было про генерацию jump table на шаблонах
🦥Alex Fails
вот поэтому я и хотел индексировать чаты. Но пока еще не доделал эту штуку.
Matwey
Небось костыль такой же как там в ответах
r
шалом, пагни! чат новичков недоступен, можно здесь вопрос по лабе задам?
Andrei
@supapro
r
@supapro
спасибо
Дмитрий ⬡
Господа, как можно скормить GCC мысль "Забей на Werror в таком-то заголовочном файле"? Бесит аж скрипит.
Anonymous
𝑁𝑜𝑑𝑖𝑟
Ребята кто то понимает создать бот для телеграм группу на учите пожалуйста
Max
Свежая мысль: а ещё можно исправить ворнинг.