class Test{
public:
explicit Test(int i):v_(i){ } //禁止int ==> Test 隐式转换,显示定义对象的地方除外
explicit operator bool(){ //禁止Test ==> bool 隐式转换, if语句等地方除外
return v_;
}
private:
int v_;
};
void foo(int){}
void bar(Test t){}
int main() {
Test t(0); //ok, 可以用Test(int i)构造函数
//int i=0;
//bar(i); //编译出错,禁止int ==> Test 隐式转换
if (t){ //在if语句中,可以调operator bool()
// foo(t); // 编译出错。因为对象转换链条 Test ==> bool ==> int中,第一个环节被禁止了
}
}