Berkus
prog.cc:6:11: warning: ISO C++ forbids zero-size array 'buf' [-Wpedantic]
Igor
--pedantic -Werror потерял
тогда гцц говорит что у него лапки и что error: ISO C++ forbids zero-size array 'b' [-Werror=pedantic]
Matwey
ты [0] забыл
Matwey
ну с этим то я не спорю, что нестандартное
Berkus
Berkus
Matwey
Так про пустую структуру спора не было изначально
Berkus
GNU C у нас теперь стандарт кек
Matwey
Спрашивали как сделать структуру нулевого размера
Igor
Berkus
Berkus
https://wandbox.org/permlink/iWHGN5ls8eytYX8D годно
Matwey
https://wandbox.org/permlink/pzWWJvSLKgfNNaav
ну вот же она
Berkus
вот есть, пожалуйста, даже аллокация ее на стеке нихуя не меняет
Дмитрий
Можно ли сделать так, чтобы аргумент после выполнения функции не удалялся?
Igor
Berkus
Berkus
ну я про что и говорю )
Berkus
ебанавты из гцц сломали всю мемори модель
Dr. Friedrich
Нормально всё. Они же честно предупреждают, что это не стандарт.
Dr. Friedrich
Если тебе не надо — ты читаешь ворнинг и убираешь из кода.
Dmitry
Зацените разницу в сборке телеги шлангом и гцц: 😊
telegram-desktop: Wed Oct 18 15:21:46 2017: 4 minutes, 1 second
telegram-desktop: Wed Oct 18 15:36:32 2017: 9 minutes, 9 seconds
Nikolai
Berkus
https://wandbox.org/permlink/p23mAbc0ju6zL14P кекеке
Berkus
Дмитрий
Дмитрий
Если по ссылке сувать - нет
Дмитрий
А так да
Berkus
что
Berkus
void f(int a);
main() { f(5); // 5 не удаляется
}
Дмитрий
Igor
Igor
ты передаёшь временный объект, как только он выходит из скоупа своего существования (вданном случае - когда завершается выполнение функции) - он уничтожается
Дмитрий
Maxim
Igor
тогда f(const A& a) :)
Igor
RVO
оно же не всегда включается
Igor
Так два деструктора будет
если что, деструкторы вызовутся для РАЗНЫХ объектов, потому что внутри f(A a) будет создана копия
Anatoly
погодите, это же баг? два разных объекта должны иметь различные адреса по стандарту
Igor
Дмитрий
no known conversion for argument 1 from LeslyStyle to Style&
Дмитрий
Извеняюсь, уже решил проблему
Дмитрий
Объект то я на месте конструировал
Igor
http://cpp.sh/7g7vs
Igor
временные объекты можно передавать только в функции с const type&, но не с type&
Matwey
Berkus
естественно он удаляется
Дмитрий
Ну вот. Между нами изначально было разногласие. Я и имел в виду аргумент как времепнный.
Berkus
Berkus
http://cpp.sh/4uezz
Berkus
ты временный объект можешь только помувать, ни на что он больше не годится
Дмитрий
Мне нужно было передать в функцию сконструированный на месте объект и в классе присвоить указатель на него. Если передавать по lvalue, то была ошибка. Просто я близорукий и забыл про rvalue.
Igor
не забывай про UB, которое обязательно появится, если у тебя где-то будет висеть указатель на уже уничтожившийся временный объект
Berkus
> передать в функцию сконструированный на месте объект и в классе присвоить указатель на него
это UB, удачи в отладке
Igor
технически, если указатель не переживёт объект, то всё норм, не?
Igor
не, я про
func (const A& a) {
c_style_work_with_ptr(&a);
}
Aidar
Aidar
Это норм
Igor
указатель передали, посохраняли пообрабатывали его, забыли, и только потом уже временный объект удалился
Igor
но да, попахивает
Aidar
При условии что ты поинтер не сохраняешь
Igor
угу
Дмитрий
http://cpp.sh/5aft3
Aidar
Систайл ваще попахивает
Aidar
Дмитрий
В каком месте, я ламер.
Aidar
При обращении
Aidar
Его нет
Aidar
Пока
Aidar
Дмитрий
👌🏻