C++ 2个操作数的乘积类型
假设我有这种类型:C++ 2个操作数的乘积类型,c++,c++11,C++,C++11,假设我有这种类型: template <typename T, typename U> using product_type = decltype(::std::declval<T>() * ::std::declval<U>()); 模板 使用product_type=decltype(::std::declval()*::std::declval()); 我在函数模板中使用的 template <typename T, typename U>
template <typename T, typename U>
using product_type = decltype(::std::declval<T>() * ::std::declval<U>());
模板
使用product_type=decltype(::std::declval()*::std::declval());
我在函数模板中使用的
template <typename T, typename U>
product_type<T, U> product(T const a, U const b)
{
return a * b;
}
模板
产品类型产品(T常数a、U常数b)
{
返回a*b;
}
<> P>模板产生的模板函数是否会为C++基本类型返回“合理”的产品值?我想这将使用C++类型的促销规则。是否有更好、更正确的方法返回“合理”基本类型的值?我担心我可能会返回一个浮点值
,对于一个double
和一个float
的产品,它返回一个“合理”类型,这正是a*b
将产生的结果。您的代码也可以编写为:
template <typename T, typename U>
auto product(T const a, U const b) -> decltype( a * b )
{
return a * b;
}
模板
汽车产品(T常数a,U常数b)->decltype(a*b)
{
返回a*b;
}
或使用C++14:
template <typename T, typename U>
auto product(T const a, U const b)
{
return a * b;
}
模板
汽车产品(T常数a、U常数b)
{
返回a*b;
}
它返回一个“合理”类型,这正是a*b
将产生的结果。您的代码也可以编写为:
template <typename T, typename U>
auto product(T const a, U const b) -> decltype( a * b )
{
return a * b;
}
模板
汽车产品(T常数a,U常数b)->decltype(a*b)
{
返回a*b;
}
或使用C++14:
template <typename T, typename U>
auto product(T const a, U const b)
{
return a * b;
}
模板
汽车产品(T常数a、U常数b)
{
返回a*b;
}
<>代码>什么是你认为“更正确”的?这是你能得到的最好的答案,直到C++ 14的返回类型演绎。更重要的是,你认为什么是“合理”?如果不使用<代码>产品类型> /代码>类型,那么更容易防止丢失精度。你认为什么更正确?在C++ 14的返回类型演绎中,这是最好的,更重要的是,你认为什么是“合理的”?这是一个可以避免更容易丢失精度的东西,没有<代码>产品类型> /代码>类型。