gpt4 book ai didi

C++使用模板时算术运算符重载--自动转换

转载 作者:行者123 更新时间:2023-11-28 07:33:02 25 4
gpt4 key购买 nike

我在为我的短 vector 类实现 vector 运算标量运算符时遇到了问题。代码如下:

template<class T>
class Vec3
{
Vec3& operator*=( const T& rhs );
};
template<class T>
Vec3<T> operator*( const Vec3<T>& lhs, const T& rhs );
Vec3<float> a;
a*=3; // right
a*3; // wrong

好吧,我真的很惊讶,对于operator*=,正如我所料,常数整数3可以自动转换为float,但是对于operator*,它不能,并导致下面的编译错误列表:

error C2782: 'Vec3 operator *(const Vec3 &,T)' : template parameter 'T' is ambiguous

main.cpp(162) : see declaration of 'operator *' could be 'int' or 'float'

我真的很困惑,不知道为什么会这样。

最佳答案

在第一个 (*=) 中,T 模板参数已在变量减速时解析,因此函数已使用签名 Vec3& 运算符创建*=( const float& rhs ),现在可以使用 int 调用。

在第二个中,编译器现在正尝试基于模板参数创建适当的函数,它得到两种不同的类型 - float 用于 lhsint for rhs - 两者都用于相同的模板参数,因此不知道如何创建函数签名。

关于C++使用模板时算术运算符重载--自动转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17291292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com