函数返回双精度当预期的长
Function returning double when expected long
我最近回答了另一个问题,在我的回答中我有以下代码:
template<typename T, typename ... Ts>
struct are_arithmetic{
enum {
value = std::is_arithmetic<T>::value && are_arithmetic<Ts...>::value
};
};
template<typename T>
struct are_arithmetic<T>{
enum {
value = std::is_arithmetic<T>::value
};
};
template<typename Arg, typename = std::enable_if_t<std::is_arithmetic<Arg>::value>>
Arg max(Arg arg){
return arg;
}
template<typename Arg, typename Arg1, typename ... Args, typename = typename std::enable_if_t<are_arithmetic<Arg, Arg1, Args...>::value>>
auto max(Arg arg, Arg1 arg1, Args ... args){
auto max_rest = max(arg1, args...);
return arg > max_rest ? arg : max_rest;
}
现在,从这段代码中,我假设max()
将返回给定数字列表中的最大数字,并保留其类型。
但是当原始海报尝试代码:
int main(){
auto res = max(1.0, 2, 3.0f, 5, 7l);
std::cout << typeid(res).name() << " " << typeid(7l).name();
}
他从stdout得到d l
。
这表明函数的返回类型根本不是所期望的。为什么函数不返回long
在我看来,当max
()函数称为:
auto res = max(1.0, 2, 3.0f, 5, 7l);
然后给出它的签名:
auto max(Arg arg, Arg1 arg1, Args ... args){
auto max_rest = max(arg1, args...);
return arg > max_rest ? arg : max_rest;
}
这里,Arg
显然是double
。
返回值是一个三元操作符:
return 1.0 > max_rest ? 1.0 : max_rest;
max_rest
最终是什么并不重要。假设它确实是long
。所以你有一个三元运算符,一个double
表达式和一个long
表达式。
在我看来,long
表达式将被类型提升为double
,因此返回auto
类型是double
。
的返回类型
template<typename Arg, typename Arg1, typename ... Args, typename = typename std::enable_if_t<are_arithmetic<Arg, Arg1, Args...>::value>>
auto max(Arg arg, Arg1 arg1, Args ... args){
auto max_rest = max(arg1, args...);
return arg > max_rest ? arg : max_rest;
}
不依赖于值,而是给定的类型。这里它返回所有参数的通用类型
相关文章:
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- C 字符串返回字符串的整数/双精度/长整型值
- C++:strod() 和 atof() 没有按预期返回双精度
- f 是指向函数的指针,该函数采用 int,并返回指向不带任何内容并返回双精度的函数的指针
- 从 C++ 中的函数返回双精度的问题
- atof() 返回浮点数而不是双精度
- 我想读取文本文件中的所有内容(但文本文件中只有一个双精度值),转换为双精度值并返回值
- 如何在 Linux asm 中正确返回双精度值
- 如何调用返回双精度或字符串并将其保存在地图上但作为对象的类的方法
- 编译C++代码以.EXE返回双精度
- 视觉对象 返回 C++ 中的双精度值
- 为什么 boost::geometry::d istance 使用 model::d 2::p oint_xy<float> 返回双精度而不是浮点数?
- 从模板函数返回双精度或复数<double>
- C++ 从矩阵返回双精度**
- C++,函数不返回双精度
- PInvoke:返回双精度数组的问题
- 如何调用从Python返回双精度向量的c++函数
- 如何在c++中从pthread返回双精度值
- 函数返回双精度当预期的长
- 为什么从浮点返回方法返回双精度不会在 c++ 中导致任何错误/警告