我只是想知道这一点 - 不一定我的代码最终会使用这种策略。
假设我有一个类似于此的类:
class Calc
{
public:
Calc( int &X, int &Y, CalcType aType )
{
int h = Helper( X );
// All the hard work will be done here.
}
int Helper( int I ) { // Do something }
enum CalcType
{
Add,
Sub,
Mul,
Div
};
};
优化会删除此调用:
Calc( X, Y, Calc::Add );
它会删除它:
Calc iCalc( X, Y, Calc::Add ); // iCalc will be unused hence after.
有什么理由不做这样的事情(在构造函数中完成工作)?
答案 0 :(得分:2)
答案是否定的,仅仅因为未使用对象并不意味着实例化将被优化出来。
如果构造函数为空且对象从未使用过或仅作为临时对象创建,则智能编译器可以对其进行优化。在你的情况下,“//所有艰苦的工作都将在这里完成。”事实并非如此。