Hel*_*elv 6 c++ templates c++17
我创建了一个模板化的结构,并试图重载二元运算符.由于某种原因,即使在两者之间正确地输入类型,该函数也不会返回正确的数据类型.
template<typename T>
struct Number{
const T value;
Number(T a) : value(a) {}
template<typename U>
auto operator*(Number<U> other){
auto new_value = value*other.value;
std::cout << typeid(new_value).name() << std::endl;
return Number(new_value);
}
};
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用main中调用的以下代码执行此操作.它返回第一个类型的Number,而不是更高类型的数字.
auto b = Number<int>(6) * Number<double>(2.3); // this should be an int*double=double
std::cout << b.value << typeid(b.value).name() << std::endl;
auto c = Number<double>(2.3) * Number<int>(6);
std::cout << c.value << typeid(c.value).name() << std::endl;
Run Code Online (Sandbox Code Playgroud)
输出如下:d 13i d 13.8d
据我所知,当函数返回new时,会调用错误的构造函数Number(new_value).我不明白为什么会发生这种情况以及为什么会发生这种情况,因为new_value属于'正确的类型'.