C ++返回临时对象时会发生复制省略

时间:2017-06-04 11:32:30

标签: c++

如果我理解正确,如果像这样返回一个对象,则会发生复制:

CSomeObject getObject(){

    //....
    //....
    return CSomeObject(...);
}

假设复制省略也会在这里发生是否安全:

CSomeObject getObject(){

    CSomeObject some_object;
    some_object.setStuff();
    some_object.setMoreStuff();
    //....
    //....
    return some_object;
}

CSomeObject some_object = getObject();

只有一个return语句,并且始终返回相同的临时对象。什么时候委托/间接回报:

CSomeObject getObject_2(){
    //....
    return getObject();
}

CSomeObject some_object = getObject_2();

1 个答案:

答案 0 :(得分:1)

“C ++会在返回临时对象时发生复制省略” - 它可能会。直到C ++ 17(甚至那里,某些条件适用)才能保证。但是,大多数编译器都会忽略副本。