一 转换操作符
举例:
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;
}
本文探讨了C++中显式类型转换操作符的使用,特别是在C++11引入的explicit关键字如何影响自定义类型的隐式转换。通过对比两个命名空间中的类A,演示了在不使用和使用explicit关键字时,类型转换操作符的行为差异。
435

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



