在类型后加上"&"

putting a '&' after the type

本文关键字:类型      更新时间:2023-10-16

我对编程相当陌生。我刚刚在大学课程中从 C 转到C++,我遇到了以前在 C 中从未见过的东西。有时在类型之后,无论是在函数声明中还是在传递参数中,&紧跟在类型之后。例如,我们在其中一个项目中使用名为 Customer 的结构,并且某些函数传递Customer& 。为什么 & 符号在类型之后,而不是在前面?谢谢!

C++中的引用只是允许以更简洁的方式执行以下代码:

int x = 16;
int* y = &x;
cout << *y;

可以写成

int x = 16;
int& y = x;
cout << y;

定义函数时,引用允许函数更改参数的值,而不会导致函数的用户在所有内容之前放置与号。 例如

void func( int& a )
{
    a = 5;
}
void main()
{
    int A = 10;
    func( A );
    cout << A; // Will output '5'
}

小心这种类型的突变,因为使用此类函数而不检查实现的程序员可能不会意识到该函数正在更改参数的值,除非意图很明显。 init_server(my_server)将是显而易见的情况示例,但显然to_json(my_struct)是一个示例,您不应该使用引用以任何方式更改结构。

但是,引用最重要的用途之一是像这样的函数

int sum_vector( const vector<int>& a ) {
   int sum = 0;
   for( int i = 0; i < a.size(); i++ ) {
      sum += a[i];
   }
   return sum;
}

如果你试图让sum_vector接受一个向量,并且你传入了一个有1亿个条目的向量,那么它将不得不将它们全部复制,需要很长时间。你可以接受一个指针,但是函数的内部部分将不得不不断取消引用,并且它必须用sum_vector(&myvec)调用,这比sum_vector(myvec)更烦人。通过这种方式,使用 const 引用,您可以防止将整个向量低效地复制到函数体中,同时保持语法整洁。使用 const 可以让你放心,你不会改变给你的向量。而且,它还向函数的用户保证您不会更改它。同样,void to_json(const some_struct&)会是一个更好的函数定义,因为它可以确保您不会更改用户的数据。