在 Andrew Koenig 的《Accelerated C++》一书中,他展示了以下代码:
vector<double> emptyvec()
{
vector<double> v; // no elements
return v;
}
grade(midterm, final, emptyvec());
现在,等级函数采用对 vector<double>
的常量引用.这对我来说意味着应该复制 emptyvec() 返回的临时对象,因为它是在堆栈中创建的局部变量和别名,这对我来说似乎很奇怪。这究竟是如何运作的?同样在另一页上,他将 const 引用传递给一个函数,该函数按值获取其参数并修改它们。可以引用 vector<double>
被传递给一个参数需要vector<double>
的函数?
最佳答案
This means to me that the temporary object returned by the
emptyvec()
should be copied because it is created in the stack as a local variable
当然,它确实被复制了。但是,它被复制到的位置是由编译器指定的,而不是由您的程序指定的。
如果编译器没有为常量引用传递临时变量的能力,您将被迫这样做:
vector<double> tmp(emptyvec());
grade(midterm, final, tmp);
除了没有 tmp
之外,这几乎就是本书代码中幕后发生的事情。代码可访问的变量。
Can a const reference of
vector<double>
be passed to a function whose parameter expectsvector<double>
?
是的,只要参数是按值传递的,而不是按引用传递的。回想一下,复制构造函数接受 const
。引用。当你调用一个带有 vector<double>
的函数时并通过 const vector<double>&
对此,C++ 调用 vector<double>
的构造函数,将常量引用传递给它,并在函数内使用生成的拷贝。
关于c++ - 关于将临时对象传递给 const 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42201135/