auto bar(Storage n) noexcept { type m = n.access(); return m * 2; } < /code> генерирует следующую сборку (на -o3): < /p> bar(Storage): movq (%rdi), %rax addq %rax, %rax ret [/code] Тем не менее, если кто-то должен был удалить Allocatortype _alloc элемент данных, и вместо этого построить локально: [code] Storage(StoredType arg) noexcept { AllocatorType alloc{};
AllocatorTraits::construct( alloc, static_cast(static_cast(&_data[0])), arg); } < /code> будет сгенерирована другая сборка: < /p> bar(Storage): leaq (%rdi,%rdi), %rax ret [/code] [b] два вопроса: [/b] [list] [*] Почему это происходит? [*] Значит ли это, что сделать выделение, член члена данных, снижает производительность? [/list] Вот ссылка.