【问题标题】:C++ compiler optimizationC++ 编译器优化
【发布时间】: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


【解决方案1】:

您所描述的称为“完美转发”(如果您想深入了解它,这是谷歌的术语),C++11 支持它,这要归功于 r-value 引用。所以答案是肯定的,它将得到全面优化。

【讨论】:

    猜你喜欢
    • 2014-02-21
    • 2012-02-09
    • 1970-01-01
    • 2010-12-13
    • 2012-04-11
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多