2013-09-28 131 views
2

让我们假设这个代码:通过参考参数传递给函数C++

void function(double &f){ 

// doing w/e here 

} 

然后在主功能:

float v; 

function(&v); 

我的编译器说,这是不正确的,买我不真的不明白为什么。

关于同一主题:

void function(float *&f){ 

// doing w/e here 

} 

然后在主功能:

float *v; 

function(v+5); 

这也是不正确出于某种原因,我没有得到任何。

所以我的问题是:为什么这些电话不正确?

回答

4

第一个示例不正确,因为&v是一个指向浮点的指针。该函数期望对double的引用。指向float的指针不是对double的引用。它们是不兼容的类型。

第二个示例不正确,因为v+5是临时的。您无法将引用传递给非常量临时表。

+0

特别注意 - 即使你用'double'替换float,指向double的指针也不是对double的引用。实际上,这些都是紧密相关的概念 - 一个引用也被称为自解引用指针 - 但C++将它们视为具有不同行为的不同类型。要为参数指定一个指针类型,可以使用'double * f'而不是'double&f'。要传递引用,不需要运算符转换为引用,只需使用'function(v)'。 – Steve314

+0

思考它的一种方法 - 如果你使用'&'作为操作符,它会给你一个指针。如果在一个类型中使用'&',它会在后台使用一个指针,但是您并不直接处理指针。 – Steve314