1

在尝试从这里理解 Rvalue 引用时,我无法理解两件事

  1. 如果向量中有 N 个字符串,则每个副本可能需要多达 N+1 个内存分配,并且 [...]

'N+1' 中的 +1 是什么?

2.作者是如何突然得出下面的指导方针的

指南:不要复制你的函数参数。相反,按值传递它们并让编译器进行复制。

我错过了什么吗?

4

1 回答 1

3

'N+1' 中的 +1 是什么?

一个分配为新向量创建底层数组,然后是 N 个分配,每个分配一个用于向量中的 N 个字符串。

作者如何突然得出以下指南

他争辩说不是在函数内部显式地制作副本,

std::vector<std::string> 
sorted2(std::vector<std::string> const& names) // names passed by reference
{
    std::vector<std::string> r(names);         // and explicitly copied
    std::sort(r);
    return r;
}

当您将参数传递给函数时,您应该让编译器制作副本,

std::vector<std::string> 
sorted2(std::vector<std::string> names)        // names passed by value
{                                              // and implicitly copied
    std::sort(names);
    return names;
}
于 2010-09-02T03:58:43.623 回答