const 引用和普通参数有什么区别?

新手上路,请多包涵
void DoWork(int n);
void DoWork(const int &n);

有什么不同?

原文由 Pirate for Profit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 558
2 个回答

当您传递一个大的结构/类时,差异更加突出:

 struct MyData {
    int a,b,c,d,e,f,g,h;
    long array[1234];
};
void DoWork(MyData md);
void DoWork(const MyData& md);

当您使用 use ‘normal’ 参数时,您按值传递参数,从而创建您传递的参数的副本。如果您使用的是 const 引用,则通过引用传递它,并且不会复制原始数据。

在这两种情况下,都不能从函数内部修改原始数据。


编辑:

在某些情况下,原始数据可能会被修改,正如 查尔斯·贝利 在他的 回答 中指出的那样。

原文由 Afriza N. Arief 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以通过三种方法在函数中传递值

  1. 按值传递
   void f(int n){
       n = n + 10;
   }

   int main(){
       int x = 3;
       f(x);
       cout << x << endl;
   }

输出:3. 缺点:当参数 x 通过 f 函数时,编译器会在 x 的内存中创建一个副本。所以浪费内存。

  1. 通过引用传递
   void f(int& n){
       n = n + 10;
   }

   int main(){
       int x = 3;
       f(x);
       cout << x << endl;
   }

输出:13。它消除了按值传递的缺点,但是如果程序员不想更改值,则使用常量引用

  1. 常量引用
   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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题