Alexey
может все ок и так будет :-)
Pepe 🐸
хотел просто готовую идиому / практику
Klaus
Klaus
После этого первая ссылка станет ссылаться не на то.
Anonymous
я думаю самое оптимально создать массив в бар и передавать в функцию, никаких новых выделений памяти
Oleg
че?
Oleg
в смысле?
Klaus
Да, это второй вариант этой порочной практики.
Oleg
const a& = res();
res();
res();
?
Oleg
это поломает a?
Klaus
Завести статический циклический буфер в функции.
Klaus
Oleg
Klaus
Ты бы ещё указатель на автоматическую переменную вернул.
Klaus
Я пока что придумал только один относительно нормальный способ добиться нужного эффекта.
Oleg
Klaus
То есть возврата большого объекта без копирования.
Oleg
Указатель на временное вообще возвращать нельзя ;)
А на static? Проблема же только в том, что у него есть время жизни, и я никак не могу средствами компилятора его форсировать, только надеяться, что пользователи foo об этом знают и не будут делать лишнего.
Klaus
Ясно же, что хочется, чтобы компилятор передал в функцию указатель на то место, куда надо вернуть результат, а не заводить для результата временную переменную на стеке и копировать её два раза - один раз в return, второй в присваивании результата.
Klaus
Интересно, что и когда делает return value optimization?
Oleg
https://wandbox.org/permlink/PhSWsvqPCrMjiBNZ
Oleg
что-то я не так сделал?
Oleg
Klaus
Возможно, оно избегает одного копирования из двух.
Pepe 🐸
Oleg
Oleg
пользователь -- я. то есть пайплайн захардкоден будет
Так @whomsien и утверждает, что это плохая практика (сегодня только я, а завтра мой код кто-нибудь прочтёт и ничего не поймёт, или что-то изменит и накосячит), а не «так нельзя делать ни в коем случае» или «это не будет работать».
Как я понял, передавать по ссылке массив в функцию (вместо возвращения) — чуть лучшая практика.
Pepe 🐸
Pepe 🐸
думаю сделать static в функции и ссылку на нее возвращать
Oleg
https://wandbox.org/permlink/wvnKRwmLxmOFfxpo
Oleg
вот еще с векторами
Pepe 🐸
Alexey
дык по стандарту в этом коде все ок. была бы ссылка не const - вот тогда было бы плохо.
Oleg
Нет, все будет плохо, если результат первого вызова присвоят в const-ссылку, а потом функцию запустят второй раз.
Oleg
вот я и не понимаю, где тут будет плохо.
Oleg
Alexey
нигде не будет. но, чтобы удостовериться, можно провести эксперимент
Oleg
Oleg
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"
особенно в плане варнингов
Alexander "SonnySlave"
проверь стандарт на всякий случай, и репорти баг 😊
Igor
я понимаю его с формальной точки зрения - в .срр описан класс, никто не гарантирует что этот .срр не заинклюдится в другой .срр - тогда получится два описания класса в котором все виртуалки инлайновые, поэтому кланг упирается рогом и варнит от греха подальше
мне больше интересно, если я не буду инклюдить .срр в .срр, то всё ок, или есть какой-то другой подводный камень, на который он агрится
Anatoly
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 не понимал
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>'))
сейчас попробую пошаманить с дллками
Anatoly
Igor
что-то не то, работает этот код
угу, и вот этот варн на standalone-исходниках мне не удалось поймать
значит либо йт тупит, либо я его недонастроил чтобы он наш проект понимал
Matwey
Что-то вспомнил: https://stackoverflow.com/q/32235855/1879547
Чат, запили мне в язык такую возможность
Billy
Коллеги. Есть вопрос.
Вот есть либа которую хочется написать через pipml. Создать либу нет проблем. А вот есть объекты которые должна создавать либа, но чтобы у юзера не было возможности их самому создать и чтобы они тоже были через pimpl. Кроме friend есть способ это достичь?
Спасибо
Matwey
🦥Alex Fails
вот поэтому я и хотел индексировать чаты. Но пока еще не доделал эту штуку.
Matwey
Небось костыль такой же как там в ответах
🦥Alex Fails
r
шалом, пагни! чат новичков недоступен, можно здесь вопрос по лабе задам?
Andrei
Andrei
@supapro
r
Дмитрий ⬡
Господа, как можно скормить GCC мысль "Забей на Werror в таком-то заголовочном файле"? Бесит аж скрипит.
Anonymous
𝑁𝑜𝑑𝑖𝑟
Ребята кто то понимает создать бот для телеграм группу на учите пожалуйста
Max
Свежая мысль: а ещё можно исправить ворнинг.