C++语言禁止为non-const reference参数产生临时对象,如下例子

    1. void uppercasify(string &str);
    2. char subtitleBookPlug[] = "Effective C++";
    3. uppercasify(subtitleBookPlug);

    在这个例子中,c++如果为subtitleBookPlug产生来临时对象用来进行char到string的转换,那么就意味着我将可以在uppercasify中对临时对象进行修改,而这是我们所不想看到的情况,因此,c++禁止为non-const reference参数产生临时对象。

    另外,当函数返回一个对象时也会产生临时对象

    1. const Number operator+(const Number& lhs, const Number& rhs);

    上面的返回值是个临时对象,因为它没有名称,就只是返回值而已,但是当调用operator+的时候,需要为此临时对象付出构造和析构的成本。

    结论:临时对象可能很耗成本,应该尽可能消除它们。一般只要看到reference-to-const参数,就极可能会有一个临时对象被产生出来绑定至该参数上。同时,只要看到函数返回一个对象,就会产生临时对象(并于稍后销毁)。