Недавно я узнал, что я могу сделать следующее с переходом аа-структуру в функцию в C++:Эффективность перехода на структуру к функции без создания экземпляра локальной переменной
(Мои извинения за не используя более подходящее имя для эта «особенность» в названии, не стесняйтесь исправлять меня)
#include <iostream>
typedef struct mystruct{
int data1;
int data2;
} MYSTRUCT;
void myfunction(MYSTRUCT _struct){
std::cout << _struct.data1 << _struct.data2;
}
int main(){
//This is what I recently learned
myfunction(MYSTRUCT{2,3});
return 0;
}
Это делает меня удивительно, это дешевле, чем инстанцировании местный MYSTRUCT
и передать его по значению функции? Или это просто удобный способ сделать то же самое, что временная переменная сразу же устраняется?
Например, добавив эту строку #define KBIG 10000000
, это:
std::vector<MYSTRUCT> myvector1;
for (long long i = 0; i < KBIG; i++) {
myvector1.push_back(MYSTRUCT{ 1,1 });
}
Последовательно быстрее, чем это:
std::vector<MYSTRUCT> myvector2;
for (long long i = 0; i < KBIG; i++) {
MYSTRUCT localstruct = { 1,1 };
myvector2.push_back(localstruct);
}
Я попытался тестирования, но результаты были довольно противоречивыми, колеблется в районе 9-12 секунд для каждого. Иногда первый был бы быстрее, иногда - нет. Конечно, это может быть связано со всеми фоновыми процессами во время тестирования.
Итак, вывод состоит в том, что нет большой разницы в производительности? Если вы хотите точно знать, постройте с включенной оптимизацией и сравните сгенерированный код для обеих альтернатив. –