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