Код: Выделить всё
auto foo(double a) {
return [a](double b) -> double {
return a + b;
};
}
Код: Выделить всё
foo(double):
ret
Происхождение вопроса
Даже не помню, почему я начал писать фрагмент выше, но все равно...
Сначала я думал, что его нужно скомпилировать во что-то немного более длинное, так как ожидал увидеть как минимум инструкцию add.
Но потом я понял, что foo выше, его нельзя просто скомпилировать отдельно в cpp, а затем связать с другим TU, где он используется, потому что я даже не могу написать объявление — только для него!
Итак, я дошел до того, что единственная причина написать эту функцию в файле без заголовка заключается в том, что она используется в этом файле без заголовка, и в этот момент компилятор, предположительно, может встроить ее везде, где она используется. .
Но если это так... тогда зачем копировать foo во что угодно, если это единственное, что есть в TU? Здесь не с чем ссылаться, так почему для этого вообще генерируется какой-то вывод?
Использование структуры +
Код: Выделить всё
operator()Код: Выделить всё
struct Bar {
double a;
double operator()(double b) const {
return a + b;
}
};
Bar bar(double a) {
return Bar{a};
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... -any-assem