c++中引用和按引用传递参数的区别

C++ difference between a reference and a pass-by-reference argument

本文关键字:参数 区别 按引用传递 引用 c++      更新时间:2023-10-16

我的问题与以下继承自ifstream的Bifstream成员函数有关。Read需要一个char指针。我给它(char*)&target。target是一个引用,所以我给它的是一个对int的引用的引用。为什么会这样呢?

bool cBifstream::ReadInt( int& target ){
    if( !this->is_open() ){
        return false;
    }
    this->read( (char*)&target, sizeof(int) );
}

这是我使用的其他工作代码的一个片段。

int size;
is.read((char*)&size, sizeof(int));

语法相同,但这次变量是int型,而不是对int型的引用。

目标宣言:

cBifstream a("test2");
int b;
a.ReadInt(b);

编辑:谢谢你的回复。有一件事我还是不明白。

this->read( (char*)target, sizeof(int) );  (all i did here was remove the ampersand)

这个更改导致我的程序崩溃。然而,target是对int型的引用,所以上面的代码应该可以工作,因为

int size;
is.read((char*)&size, sizeof(int));

您正在获取引用的地址-这会产生target所引用的变量的地址。引用是它所引用的变量的别名,在任何地方都没有语法上的间接关系——因此对引用执行的任何操作都会影响被引用的变量。

int x; 
int & y=x;

使用上述方法,您对y所做的任何操作都将与对x所做的操作完全相同

代码&target没有给您对引用的引用,它给您引用指向的原始对象的地址。因此,您已经采取了int*并将其转换为char*(使用c风格强制转换)。

对于所有意图和目的而言,引用只不过是创建引用的对象。这包括获取引用的地址。

相关文章: