关于运算符重载
struct S { S(int) { } /* … */ };
struct SS {
int m;
SS(int x) :m(x) { }
// 因为结构体S中没有S(SS);不存在干扰
operator S() { return S(m); }
};
SS ss(1);
S s1 = ss; // 正确;类似隐式构造函数
S s2(ss); // 正确;类似隐式构造函数
void f(S);
f(ss); // 正确;类似隐式构造函数struct S { S(int) { } };
struct SS {
int m;
SS(int x) :m(x) { }
// 因为结构体S中没有S(SS)(译注:因为结构体S中没有定义S(SS),
// 无法将SS转换为S,所以只好在SS中定义一个返回S的转换操作符,
// 将自己转换为S。转换动作,可以由目标类型S提供,也可以由源类型SS提供。)
explicit operator S() { return S(m); }
};
SS ss(1);
S s1 = ss; // 错误;类似显式构造函数
S s2(ss); // 正确;类似显式构造函数
void f(S);
f(ss); // 错误;类似显式构造函数
}
S s1 = (S)ss;