一 转换操作符
举例:
namespace demo1 {
class A {
public:
// A 转换为bool
operator bool() {
return true;
}
};
}
在C++11中将explicit的使用范围扩展到了自定义的类型转换操作符上,用来支持所谓的“显式类型转换”。
namespace demo2 {
class A {
public:
// 显示转换操作符
explicit operator bool() {
return true;
}
};
}
二 测试
#include <iostream>
void func(bool b) {}
int main() {
{
demo1::A a;
demo1::A a1;
// 通过
bool b1 = a;
func(a);
// 通过
if (a) {}
if (!a) {}
if (a && a1) {}
int n = a ? 1 : 2;
while (a) {}
}
{
demo2::A a;
demo2::A a1;
// error
// bool b2 = a;
// func(a);
// 作为条件用, explicit operator bool能通过
if (a) {}
if (!a) {}
if (a && a1) {}
int n = a ? 1 : 2;
while (a) {}
}
return 0;
}