void DoWork(int n);
void DoWork(const int &n);
有什么不同?
原文由 Pirate for Profit 发布,翻译遵循 CC BY-SA 4.0 许可协议
void DoWork(int n);
void DoWork(const int &n);
有什么不同?
原文由 Pirate for Profit 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以通过三种方法在函数中传递值
void f(int n){
n = n + 10;
}
int main(){
int x = 3;
f(x);
cout << x << endl;
}
输出:3. 缺点:当参数 x
通过 f
函数时,编译器会在 x 的内存中创建一个副本。所以浪费内存。
void f(int& n){
n = n + 10;
}
int main(){
int x = 3;
f(x);
cout << x << endl;
}
输出:13。它消除了按值传递的缺点,但是如果程序员不想更改值,则使用常量引用
void f(const int& n){
n = n + 10; // Error: assignment of read-only reference ‘n’
}
int main(){
int x = 3;
f(x);
cout << x << endl;
}
输出:在 n = n + 10
处抛出错误,因为当我们传递const引用参数参数时,它是只读参数,你不能改变n的值。
原文由 sneha 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
当您传递一个大的结构/类时,差异更加突出:
当您使用 use ‘normal’ 参数时,您按值传递参数,从而创建您传递的参数的副本。如果您使用的是 const 引用,则通过引用传递它,并且不会复制原始数据。
在这两种情况下,都不能从函数内部修改原始数据。
编辑:
在某些情况下,原始数据可能会被修改,正如 查尔斯·贝利 在他的 回答 中指出的那样。