当使用算术运算符进行隐式转换时,有没有办法强制编译时错误。例如:
class A:
public:
A operator + (const A tmp) const;
void setX(const int X)
void setY(const int Y)
void setZ(const int Z)
private:
template <typename Y>
Y operator +(const Y tmp);
main:
int a1 {2};
int a2 {3};
int a3 {4}'
char b1 {2};
char v2 {3};
char b3 {4};
A a;
a.setX(a1);
a.sety(a2);
a.setz(a3);
A b;
b.setx(b1);
b.sety(b2);
b.setz(b3);
A d= a+b; //more or so of what i mean. This should be an error
A e= a+a; // this should not be because its the same type
问题是当我为运算符 A+B 和 A+C 创建模板时都会生成错误。这让我感到困惑,因为 a+c 是唯一应该产生错误的。
每当两个参数的类型不匹配时,就会进行隐式转换。Yo 可以在编译时检查这一点,
例如static_assert(std::is_same<decltype(a), decltype(c)>::value);