Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;从函数返回double或int_C++ - Fatal编程技术网

C++ C++;从函数返回double或int

C++ C++;从函数返回double或int,c++,C++,我有一个函数,它接受完全相同的参数,但有时我希望它返回一个double,有时我希望它返回一个int。正确的方法是什么 我可以做函数重载,但是重载函数的声明必须在参数列表中的类型和/或参数数量上彼此不同。它们是相同的,所以函数重载不适用(我不认为) 我不希望强制转换为int,因为这是我期望的类型,也不希望编写两个函数(一个用于int,另一个用于double)。谢谢您的建议。您可以创建第二个函数: int calcInt(int value, int add, double mult) { re

我有一个函数,它接受完全相同的参数,但有时我希望它返回一个double,有时我希望它返回一个int。正确的方法是什么

我可以做函数重载,但是重载函数的声明必须在参数列表中的类型和/或参数数量上彼此不同。它们是相同的,所以函数重载不适用(我不认为)


我不希望强制转换为int,因为这是我期望的类型,也不希望编写两个函数(一个用于int,另一个用于double)。谢谢您的建议。

您可以创建第二个函数:

int calcInt(int value, int add, double mult) {
  return calc(value, add, mult);
}
也可以使用模板:

template <class myType>
myType calc(int value, int add, myType mult) {
  return (value + add) * mult;
}
模板
myType计算(int值、int添加、myType mult){
退货(增值+增值)*mult;
}

不能使用相同的名称和参数创建不同的函数;编译器不知道要调用哪个函数。

可以创建第二个函数:

int calcInt(int value, int add, double mult) {
  return calc(value, add, mult);
}
template <typename T, typename U>
T calc (const int value, const int add, const U mult)
{
    return static_cast<T> ((value + add) * mult);
}

calc<double> (1, 2, 1.7); // returns double
calc<int> (1, 2, 3.4); // returns int
也可以使用模板:

template <class myType>
myType calc(int value, int add, myType mult) {
  return (value + add) * mult;
}
模板
myType计算(int值、int添加、myType mult){
退货(增值+增值)*mult;
}
不能使用相同的名称和参数创建不同的函数;编译器不知道要调用哪一个。

模板
template <typename T, typename U>
T calc (const int value, const int add, const U mult)
{
    return static_cast<T> ((value + add) * mult);
}

calc<double> (1, 2, 1.7); // returns double
calc<int> (1, 2, 3.4); // returns int
计算(常数整数值、常数整相加、常数多) { 返回静态_cast((值+添加)*mult); } 计算(1,2,1.7);//双倍回报 计算(1,2,3.4);//返回整数
模板
计算(常数整数值、常数整相加、常数多)
{
返回静态_cast((值+添加)*mult);
}
计算(1,2,1.7);//双倍回报
计算(1,2,3.4);//返回整数

假设这是为了保持精度或类似的东西,我会定义我自己的类型--
Number
或类似的东西,并在内部管理它是int还是double。

假设这是为了保持精度或类似的东西,我会定义自己的类型--Number或类似的类型,并在内部管理它是int还是double。

只需将其作为double或使用模板,然后让编译器计算出来

如果你的int=1 那么double=1.0

它们是相同的数字,双精度将有助于提高精度


只要让它退一双就行了。它使用了更多的内存,但它是本地范围,所以谁在乎呢?

只需将其作为一个双精度函数,或者使用一个模板,让编译器来解决它

如果你的int=1 那么double=1.0

它们是相同的数字,双精度将有助于提高精度


只要让它退一双就行了。它使用了更多的内存,但它是局部范围,所以谁在乎呢?

您能详细说明在什么情况下需要
int
double
?您将如何使用该功能?您能为这两种情况提供示例吗?@templatetypedef-是的,有时mult arg是1.0,有时是1.375,等等。当它是1.0时,我想返回一个int。当它是1.375时,我想返回一个double。@user1200129:为什么不总是返回double?它只是多了4个字节。我认为你的机器能处理这个问题@是的,我现在就是这么做的。但是当调用应用程序时,会得到1.0而不是1。他们抱怨或崩溃。你能详细说明在什么情况下你想要
int
double
吗?你会如何使用这个函数?您能为这两种情况提供示例吗?@templatetypedef-是的,有时mult arg是1.0,有时是1.375,等等。当它是1.0时,我想返回一个int。当它是1.375时,我想返回一个double。@user1200129:为什么不总是返回double?它只是多了4个字节。我认为你的机器能处理这个问题@是的,我现在就是这么做的。但是当调用应用程序时,会得到1.0而不是1。他们抱怨或崩溃。谢谢,我想要calc(1,2,1.0);返回一个int和calc(1,2,1.375);退双倍。mult参数始终为1.0或1.375。它永远不只是1。谢谢,我想要计算(1,2,1.0);返回一个int和calc(1,2,1.375);退双倍。mult参数始终为1.0或1.375。这从来不仅仅是1,这有点关联。调用应用程序需要一个int。我给它1.0,它会崩溃,因为它需要1,而不是1.0,所以当调用应用程序需要int时,我试图让函数返回1。这有点相关。调用应用程序需要一个int。我给它1.0,它会崩溃,因为它需要1,而不是1.0,所以当调用应用程序需要int时,我试图让函数返回1。就个人而言,我更喜欢“Canclint”版本,从代码可读性的角度来看,另一个版本不够明确。这可能会进一步掩盖逻辑/精度问题。同意。但有时候知道选项是什么是有帮助的。就我个人而言,我更喜欢“calcInt”版本,从代码可读性的角度来看,另一个版本不够明确。这可能会进一步掩盖逻辑/精度问题。同意。但有时了解选项是有帮助的。