C++ 编译器优化

标签 c++ c++11 compiler-optimization

现代 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();

最佳答案

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

关于C++ 编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9380941/

相关文章:

c++ - 在 C++ 中检查 double 是否等于负无穷大的最佳方法

c++ - 通用数字类

objective-c - 在 C 代码中重复符号 _fopen_file_func,在 objective-c 项目中

c++ - 任何不将大型开关 block 转换为二叉树的编译器?

c# - 避免 .NET Native 错误

c# - C++ 使用 C# DLL。 InvokeHelper 的问题

c++ - 模板类成员函数的参数

c++ - 在 Visual Studio 中创建第一个 C++ 项目

c++ - 如何操纵包含2D数组的结构的数组

c++ - 根据 Qt 中的硬件调整主窗口的大小?