gpt4 book ai didi

c++ - 在 C++ 中传递 'implied' (?) 引用时是否生成拷贝

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:10 24 4
gpt4 key购买 nike

如果我有一个引用 map 的函数:

pair<int,int> myFunc(map<int,char> &myVar){...}

我可以在不需要“&”的情况下将 map 传递给它。

myFunc(someMapitoa);

有区别吗?复制了一份然后就扔掉了吗?无论如何我都应该使用“&”吗?

最佳答案

C++ 默认是按值传递。

所以,这会生成一个拷贝:

void foo (bar b);

这不是:

void foo (bar & b);

这会复制一个指针,但不会复制它指向的实际数据:

void foo (bar * b);

如果您真的想深入了解它,请参阅 this SO post关于移动语义。

不管怎样,上面三个例子的调用方式都是一样的:

#include <iostream>
using namespace std;

int alpha (int arg) {
// we can do anything with arg and it won't impact my caller
// because arg is just a copy of what my caller passed me
arg = arg + 1;
return arg;
}

int bravo (int & arg) {
// if I do anything to arg it'll change the value that my caller passed in
arg = arg + 1;
return arg;
}

int charlie (int * arg) {
// when we deal with it like this it's pretty much the same thing
// as a reference even though it's not exactly the same thing
*arg = *arg + 1;
return *arg;
}

int main () {
int a = 0;

// 1
cout << alpha (a) << endl;
// 1
cout << bravo (a) << endl;
// 2
cout << charlie (&a) << endl;

return 0;
}

关于c++ - 在 C++ 中传递 'implied' (?) 引用时是否生成拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33376671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com