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中,第一个环节被禁止了
}
}
本文详细介绍了C++中通过`explicit`关键字来禁止`int`到`Test`类型的隐式转换,并展示了如何在特定场景下进行类型转换。通过实例演示了`explicit operator bool()`的使用,解释了其在条件判断和函数调用中的作用。重点突出了类型安全性和代码可读性的重要性。
271

被折叠的 条评论
为什么被折叠?



