通过使用传递引用参数,您强制您的函数不是复制参数本身的值,而是使用您提供的实际变量。因此,要获得更清晰的视图,请参见下文:
void function( int number )
{
cout << number;
}
function( myInt ); // function will copy myInt, into its local variables stack
但是,通过使用传递引用的方法,像这样:
void function ( int & number )
{
cout << number
}
function( myInt ); // function will not copy myInt into its local variables stack, instead, it will use the already existent myInt variable.
编译器如何使用传递指针和传递引用参数没有区别。相反,您的函数调用将如下所示:
void function_p( int *number )
{
cout << *number;
}
void function_r( int & number )
{
cout << number;
}
// and the calls
function_p( &myInt ); // it is required to use address-of operator here
function_r( myInt ); // the effect will be the same, but with less effort in writing that address-of operator
在 C++11 中,程序员开始使用 pass-by-reference 方法,一般来说,通常是因为它更容易编写“模板”。
为了完成您的问题的答案,*
and&
运算符仅引用参数的类型,以便它们创建复合类型。复合类型是根据另一种类型定义的类型。C++ 有几种复合类型,其中两种是引用和指针。
你可以理解它们只影响变量的类型(在我们的例子中,参数),通过以正确的方式编写它们:
int* p1; // we will read this: pointer p1 points to an int
int* p2 = &var1; // we read this: pointer p2 points to int variable var1
int var1 = 12;
int& ref1 = var1; // and we read this: ref1 is a reference to var1
您通常可以认为引用表示同一块内存的不同引用。