当将参数传递给函数时,参数是函数参数类型的prvalue表达式,而该类型不是引用,则可以忽略prvalue的构造。
void func(std::string str) { ... } func(std::string("foo"));
这表示要创建一个临时文件string,然后将其移动到function参数中str。复制省略允许该表达式直接在中创建对象str,而不是使用临时+移动。
这对于声明构造函数的情况非常有用explicit。例如,我们可以写在上面func("foo"),但这仅仅是因为string有一个隐含的构造函数,从转换const char*到string。如果该构造函数是explicit,我们将被迫使用一个临时调用explicit构造函数。复制省略功能使我们不必进行不必要的复制/移动。