|

楼主 |
发表于 2020-1-17 00:55:03
|
显示全部楼层
本帖最后由 Croper 于 2020-1-17 00:56 编辑
我把刚才的说完把。。现在在这个代码里加入一个类,
拥有int和string的构造函数,并且重载了operator==- struct A {
- A(int) {};
- A(string) {};
- };
- bool operator ==(const A&, const A&)
- {
- return true;
- };
- template <typename T1,typename T2,typename=decltype(declval<T1>()==declval<T2>())>
- bool Equal(const T1& t1, const T2& t2) { //能调用==的变量进入这个分支
- return t1 == t2;
- }
- bool Equal(...) { //不能调用==的变量进入这个分支
- return false;
- }
- int main() {
- bool a = Equal(1, 1.000);
- bool b = Equal(0, string());
- system("pause");
- }
复制代码
这个时候Equal(0,string())就变成true了。。因为Erqual和string都转换成了A,单步调式可以看出来的。 |
|