如何将float值传递给以double为参考值的函数

时间:2012-02-22 13:10:13

标签: c++ pass-by-reference

我有一个函数,其原型如下所示:

void example (double &var);

但是,我的问题是我可能需要调用具有一些浮点值的函数。 e.g。

float temp=10.1;

example(temp)

如果我这样做,我的代码不会编译,可能是因为将float值传递给double引用变量。

我想避免为double和float编写重载函数。

有人可以建议更清洁/更好的方法来实施吗?

函数基本上是截断函数,截断给定的输入和放大器。是的,原件被修改。

谢谢。

4 个答案:

答案 0 :(得分:5)

模板功能怎么样?

template <typename T>
void example (T &var);

编译器将替换floatdouble用法(请记住C ++模板是具有类型安全性的宏)

答案 1 :(得分:3)

不建议通过引用传递小类型。你最好有double example(double var);之类的东西。这也将解决你的问题。

之前:

void example(double& d);

double d = ...;
example(d); // unclear if d was modified

后:

double example(double d);

double d = ...;
d = example(d);

float f = ...;
f = static_cast<float>( example(f) ); // cast required to tell the compiler to allow
                                       // the precision loss

答案 2 :(得分:2)

你可以模板化。

template<typename T>
void example (T &var)

答案 3 :(得分:0)

解决方案取决于example正在做什么。

  • 是否更改了引用传递的值?如果是,则无法将float传递给它。通过强制转换进行传递将编译,但会在运行时崩溃(因为您将传递4个字节,其中需要8个字节)。
  • 如果它没有更改值,您只需向其添加const属性,并传递任何基本数据类型。它将是:void example (const double &var);。如果可以进行转换(因为它现在被视为(double)),编译器就不会抱怨。
  • 使其成为功能模板可能会也可能不会起作用,这完全取决于正在执行的功能。