ли объект в теле функции откуда мы его возвращаем? Я проверил на gcc через gdb, без флагов оптимизаций, и он говорит что внутри этой функции foo никакой локальной переменной не создаётся, но можно ли этому доверять?
struct S foo(void)
{
return (struct S) {1};
}
Зависит от компилятора, лучше смотри дизассемблер (godbolt.org, например). Глянул gcc и clang: без оптимизации сперва запишется значение в стек, с оптимизацией - сразу в регистр. Ещё зависит от размера структуры.
Создаст в foo, скопирует в вызываем функцию и всё будет хорошо
Обсуждают сегодня