Код: Выделить всё
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