我们假设这个函数模板:
template <typename F>
void foo(F&& f) {
f("foo");
}
void to_optimize() {
foo([](std::string_view s) {
std::cout << s << std::endl;
});
}
在这种情况下,编译器是否或可以优化内联函数?也就是说,只需用
即可有效地替换它void to_optimize() {
std::cout << "foo" << std::endl;
}
?
C++ 标准允许任何没有明显效果的优化。如上所述,优化函数调用不会产生明显的效果。 C++ 程序无法确定此处是否发生了附加函数调用。
所以,是的,C++ 编译器可以优化函数调用。是否确实取决于编译器和编译器配置参数。