C++ 当函数参数通过引用传递时,为什么要调用复制构造函数?

C++ 当函数参数通过引用传递时,为什么要调用复制构造函数?,c++,C++,我在C语言中遇到了这个例子++ vector<string> func(const string&); //function declaration vector<string> v; string line = "abc"; v = func(line); //on entry, initialization of func's single parameter from line //on exit, both initializatio

我在C语言中遇到了这个例子++

vector<string> func(const string&); //function declaration

vector<string> v;
string line = "abc";

v = func(line); //on entry, initialization of func's single parameter from line
         //on exit, both initialization of the return value and then assignment to v
向量函数(常量字符串&)//函数声明 向量v; 字符串行=“abc”; v=func(直线)//输入时,从第行初始化func的单个参数 //退出时,初始化返回值,然后赋值给v
我的问题是,既然func将常量字符串引用作为参数,为什么在输入func时会调用复制构造函数?由于该行是通过引用传递的,func不只是在其本地堆栈上保留对该行的引用吗?

该示例不太正确。正如您已经注意到的,函数参数是通过const引用传递的,并且不涉及转换,因此不涉及复制构造函数。另一方面,结果可能是调用从返回值到向量
v
的复制构造函数,具体取决于函数的声明方式。现在大多数编译器都实现了RVO和NRVO,这是允许的标准优化,可以避免这种拷贝构造。请在此处阅读更多信息:


那个例子不太正确。正如您已经注意到的,函数参数是通过const引用传递的,并且不涉及转换,因此不涉及复制构造函数。另一方面,结果可能是调用从返回值到向量
v
的复制构造函数,具体取决于函数的声明方式。现在大多数编译器都实现了RVO和NRVO,这是允许的标准优化,可以避免这种拷贝构造。请在此处阅读更多信息:

输入时,从
行初始化
func
的单个参数

func
的参数是从
初始化的,但它不是
字符串
,而是对它的引用。它的初始化不会导致对复制构造函数的调用,但会使参数成为
的别名(引用初始化时总是这样)

输入时,从
行初始化
func
的单个参数


func
的参数是从
初始化的,但它不是
字符串
,而是对它的引用。它的初始化不会导致对复制构造函数的调用,但它会使参数成为
行的别名(引用初始化时总是这样)。

是什么让您认为复制构造函数被调用的?这是本书在注释中暗示的“输入时,从第行初始化func参数”我看不到func主体-是否将该字符串添加到向量中?stl容器具有传递值语义是什么让您认为调用了复制构造函数?这是本书在注释“输入时,从第行初始化func参数”中暗示的“我看不到函数体-是否要将该字符串添加到向量?stl容器具有传递值语义这似乎是对文本最可能的解释这似乎是对文本最可能的解释