如果我有一个引用地图的函数:
pair<int,int> myFunc(map<int,char> &myVar){...}
Run Code Online (Sandbox Code Playgroud)
我可以传递一张地图而不需要'&'.
myFunc(someMapitoa);
Run Code Online (Sandbox Code Playgroud)
有什么区别吗?是制作副本然后扔掉?我应该使用'&'吗?
默认情况下,C++是按值传递的.
所以,这是一个副本:
void foo (bar b);
Run Code Online (Sandbox Code Playgroud)
这不是:
void foo (bar & b);
Run Code Online (Sandbox Code Playgroud)
这会生成指针的副本,但不会指向它指向的实际数据:
void foo (bar * b);
Run Code Online (Sandbox Code Playgroud)
如果你真的想深入了解它,那么请看这篇关于移动语义的SO帖子.
无论如何,对于上面三个例子,它们都被称为相同的方式:
#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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |