第三节 · 换一种交流的方式 · 成员访问运算符定义
类型转换运算符允许对象隐式或显式地转换为其他类型,就像内置类型之间的转换一样。
基本语法
class Integer
{
private:
int value;
public:
Integer(int v = 0) : value(v) {}
// 类型转换运算符
operator int() const
{
return value;
}
};
int main()
{
Integer a(42);
int n = a; // 隐式转换
int m = (int)a; // C 风格显式转换
int k = static_cast<int>(a); // C++ 风格
cout << n + 10 << endl; // 52
return 0;
}隐式转换的危险
explicit 类型转换
C++11 引入 explicit 来防止隐式转换。
智能指针的 bool 转换
转换为指针类型
多重转换
转换构造函数 vs 转换运算符
选择原则:
如果目标类型是你的类,用转换构造函数
如果源类型是你的类,用转换运算符
字符串转换
避免歧义
习题
解释
explicit operator bool()的特殊规则。设计一个
Ratio类,支持转换为double。什么时候应该用转换运算符,什么时候用命名函数?
Last updated