尝试使用算术运算符阻止隐式转换



当使用算术运算符进行隐式转换时,有没有办法强制编译时错误。例如:

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);

相关内容

  • 没有找到相关文章

最新更新