我有一个函数,其原型如下所示:
void example (double &var);
但是,我的问题是我可能需要调用具有一些浮点值的函数。 e.g。
float temp=10.1;
example(temp)
如果我这样做,我的代码不会编译,可能是因为将float值传递给double引用变量。
我想避免为double和float编写重载函数。
有人可以建议更清洁/更好的方法来实施吗?
函数基本上是截断函数,截断给定的输入和放大器。是的,原件被修改。
谢谢。
答案 0 :(得分:5)
模板功能怎么样?
template <typename T>
void example (T &var);
编译器将替换float
和double
用法(请记住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)
),编译器就不会抱怨。