short-vector クラスに vector-op-scalar 演算子を実装しているときに問題が発生しました。コードは次のようにリストされます。
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* の場合はそうではなく、コンパイル エラーが発生しました。
エラー C2782: 'Vec3 operator *(const Vec3 &,T)': テンプレート パラメーター 'T' があいまいです
main.cpp(162) : 「operator *」の宣言を参照してください。「int」または「float」にすることができます
私はこれについて本当に混乱していて、なぜそれが起こるのか分かりません。