Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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++ 2个操作数的乘积类型_C++_C++11 - Fatal编程技术网

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的返回类型演绎中,这是最好的,更重要的是,你认为什么是“合理的”?这是一个可以避免更容易丢失精度的东西,没有<代码>产品类型> /代码>类型。