未使用参数消除优化

时间:2013-05-25 18:13:55

标签: c++ c++11

当我使用启用程序时,是否存在“未使用的函数参数消除优化”:

template< typename T >
void f(T x, typename std::enable_if< some_predicate< T > >::type * = nullptr) { /* do something useful with x */; }

我的意思是,会为void *参数传递生成额外的代码(例如,对于GCC 4.8编译器)?

根据lto / ltcg存在怎么样?

1 个答案:

答案 0 :(得分:3)

严格地说,这样做违反了ABI,据我所知 - 也就是说,其他一些没有优化的编译器可能会传入一个值。

然而,根据我的经验,Clang有一种非常恼人的习惯,即将其视为冗余的参数移除 - 尤其是空类型的值。所以我建议编译器可以做,如果它可以证明该值未被使用。