2

我有一个重载的功能

void FuncGetSomething(string, double&)
void FuncGetSomething(string, int&)
void FuncGetSomething(string, bool&)

....它应该以这种方式工作

double myDbl = 0;
FuncGetSomething("Somename", myDbl) 
//to get the new value for myDbl in side the function, and the new value is preset earlier in the code

但不知为何,我看到有人写这个

double myDlb = 0;
FuncGetSomething("Somename", (double)myDbl)

这适用于 Visual Studio 2008。

但是,当我尝试在 Linux (g++ 4.7.2) 中构建相同的东西时,它会抱怨

error: no matching function for call to  GetSomething(const char [8], double) can be found

谁能给我一些关于为什么它在 VS08 中工作以及为什么它不在 Linux 中的想法?反正有没有让它在Linux中也能工作?

4

1 回答 1

5

转换为(double)意味着它正在创建一个类型的临时对象double。当您调用该函数时,您试图将一个非常量引用绑定到它,这是不允许的。这可能会有所帮助:

void f( double& ) {};

double d = 1.2;
f( d ); // allowed (1)
f( 1.2 ); // not allowed (2)
f( (double)d ); // not allowed, basically the same as (2)
于 2013-10-17T18:05:48.210 回答