引用和引用传递参数之间的C ++差异

时间:2011-05-05 10:37:39

标签: c++ reference arguments

我的问题涉及继承自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));

作品。

3 个答案:

答案 0 :(得分:6)

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

int x; 
int & y=x;

使用上述内容,您对y所做的任何操作都会像对x

那样完成

答案 1 :(得分:2)

代码&target没有给你一个引用的引用,它给你引用指向的原始对象的地址。所以你已经使用int*并将其转换为char*(使用C风格的演员表)。

答案 2 :(得分:0)

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