c++ - 何时复制函数参数?
问题描述
我很想知道何时复制函数的参数。
#include <vector>
void foo (std::vector<float> a)
{
std::vector<float> y = std::move(a);
//do something with vector y
}
int main()
{
std::vector<float> x {1.0f, 2.0f, 3.0f};
std::cout << x.at(0) << " " << x.at(1) << " " << x.at(2) << std::endl; //1.0 2.0 3.0
foo(x);
std::cout << x.at(0) << " " << x.at(1) << " " << x.at(2) << std::endl; //print nothing
}
该函数是否从一开始就复制其参数?如果不是,我们如何知道参数何时被复制?从上面的代码中,我假设参数没有被复制,因为 std::move 仍然影响变量 x。
解决方案
该函数是否从一开始就复制其参数?
在输入的正文之前,该a
参数将在 内的调用站点复制。main()
foo()
从上面的代码中,我假设参数没有被复制,因为 std::move 仍然影响 variable
x
。
a
参数是按值传递的,所以a
要复制. x
然后foo()
move
就是拷贝进去了y
。 x
不受影响,这与您的主张相反。
如果a
参数是通过引用传递的,或者你move
'd x
into a
,那么x
就会受到影响。
推荐阅读
- laravel - Create pdf for signature list using Laravel and dompdf
- android - Can I run Apache Flink within an Android App?
- java - Spring boot Controller Advice not getting called on Exception
- ios - How to pass arguments to mac terminal in llldb mode
- go - 在 go build 中使用“-race”标志时发生了什么
- javascript - Could not establish connection. Receiving end does not exist chrome extension
- arp - arpspoofing and ARP table
- android - 如何在 CameraX 的实时 PreviewView 上应用颜色过滤器?
- c# - 中间件未正确处理 403,但正在正确处理 404
- react-native - React Native - Redux combineReducers 不工作