【发布时间】:2012-02-21 16:12:21
【问题描述】:
现代 C++ 编译器(包括gcc)会优化以下(类似宏的)代码吗?
template<typename F, typename ...A>
err foo(F fn, A&&... args)
{
return fn(std::forward<A>(args)...) ? get_last_error() : err();
}
比如能不能优化下面的代码
return foo(test, 5, 20, "bar");
到:
return test(5, 20, "bar") ? get_last_error() : err();
【问题讨论】:
-
试试看!
gcc -O2 -S是你的朋友。 -
你在问现代编译器是否能够内联..?
-
是的。使用可变模板参数内联函数。
-
如果他们做不到,我会感到震惊——内联是由编译器后端完成的,而可变参数模板是严格的前端概念。
标签: c++ c++11 compiler-optimization