Не стесняйтесь добровольно и отправить обновленную формулировку в комитет ...
ал с Godbolt's CompilerExplorer. Я хотел посмотреть, насколько хороши определенные оптимизации. Мой минимальный рабочий пример:
#include <vector>
int foo() {
std::vector<int> v {1, 2, 3, 4, 5};
return v[4];
}
Сгенерированный ассемблер (clang 5.0.0, -O2 -std = c ++ 14):
foo(): # @foo()
push rax
mov edi, 20
call operator new(unsigned long)
mov rdi, rax
call operator delete(void*)
mov eax, 5
pop rcx
ret
Как видно, Clang знает ответ, но перед возвращением делает довольно много вещей. Мне кажется, что даже вектор создан, из-за «оператора new / delete».
Может кто-нибудь объяснить мне, что здесь происходит, и почему он не просто возвращается?
Код, сгенерированный GCC (здесь не скопированный), похоже, явно создает вектор. Кто-нибудь знает, что GCC не способен выводить результат?