1

我问这个只是为了知道 - 不一定我的代码最终会使用这种策略。

假设我有一个类似的类:

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.

有什么理由不做这样的事情(在构造函数中完成工作)?

4

1 回答 1

2

答案是否定的,仅仅因为没有使用对象并不意味着实例化将被优化。

如果构造函数为空并且该对象从未使用过或仅作为临时对象创建,则智能编译器可以将其优化掉。在你的情况下,因为“ //所有的努力都将在这里完成。”情况并非如此。

于 2013-03-08T01:27:09.703 回答