C++ 如何将浮点值传递给以double作为参考值的函数
我有一个函数,其原型如下所示:C++ 如何将浮点值传递给以double作为参考值的函数,c++,pass-by-reference,C++,Pass By Reference,我有一个函数,其原型如下所示: void example (double &var); 但是,我的问题是,我可能还需要使用一些浮点值调用函数。 e、 g 如果我这样做,我的代码就不会编译,可能是因为将浮点值传递给双引用变量 我希望避免为double和float编写重载函数 有人能建议一种更干净/更好的方法来实现这一点吗 函数基本上是一个截断函数,它截断给定的输入&是的,修改了原始输入 多谢各位 模板函数怎么样 template <typename T> void examp
void example (double &var);
但是,我的问题是,我可能还需要使用一些浮点值调用函数。
e、 g
如果我这样做,我的代码就不会编译,可能是因为将浮点值传递给双引用变量
我希望避免为double和float编写重载函数
有人能建议一种更干净/更好的方法来实现这一点吗
函数基本上是一个截断函数,它截断给定的输入&是的,修改了原始输入
多谢各位 模板函数怎么样
template <typename T>
void example (T &var);
模板
无效示例(T&var);
<> >编译器将同时替换<代码>浮点和<代码>双用法(记住C++模板是类型安全的宏) 可以模板化。
template<typename T>
void example (T &var)
模板
无效示例(T&var)
不建议通过引用传递小型类型。您最好有类似于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
双示例(双d);
双d=。。。;
d=示例(d);
浮动f=。。。;
f=静态_cast(示例(f));//要求强制转换以告诉编译器允许
//精度损失
解决方案取决于示例的具体操作
- 它是否正在更改通过引用传递的值?如果是,则不能向其传递
float
。通过强制转换传递将编译,但会在运行时崩溃(因为传递的是4个字节,其中需要8个字节)李>
- 若它并没有改变值,那个么只需向它添加
const
属性,并传递任何基本数据类型。它将是:void示例(constdouble&var)代码>。若转换是可能的(因为它现在被视为(double)
),编译器不会抱怨李>
- 使其成为函数模板可能有效,也可能无效,这完全取决于函数正在做什么
是,通过引用传递的值已更改。该函数是截断给定输入的截断函数。把它作为模板有什么问题吗??按照你的建议?我会面对什么?谢谢。截断为什么?截断小数?分成两部分?转换为字符串和修剪?为了得到好的答案,你应该提出好的问题!:)
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