繁体   English   中英

C++ 引用和传递引用参数之间的区别

[英]C++ difference between a reference and a pass-by-reference argument

我的问题与继承自 ifstream 的 Bifstream 的以下成员 function 有关。 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不是为您提供对引用的引用,而是为您提供引用指向的原始 object 的地址。 因此,您采用了int*并将其转换为char* (使用 C 样式转换)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM