Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

Gray-Ice

个人博客兼个人网站

以下内容引自C++ Primer。
类型转换运算符是类的一种特殊成员函数,它负责将一个类类型的值转换成其他类型。类型转换函数的一般形式如下:

1
operator type() const;

其中type表示某种类型。类型转换运算符可以面向任意类型(除了void之外)进行定义,只要该类型能够作为函数的返回类型。因为,我们不允许转换成数组或者函数类型,但允许转换成指针(包括数组指针及函数指针)或者引用类型。
类型转换运算符既没有显示的返回类型,也没有形参,而且必须定义成类的成员函数。类型转换运算符通常不应该改变待转换对象的内容,因此,类型转换运算符一般被定义成const成员。

(以下内容为博主自己做的例子)
那么来看一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>

using namespace std;

class Tt
{
public:
int a = 3;
int b = 4;
Tt() = default;
// 定义类型转换函数
operator int() const noexcept
{
return b;
}
};
int main(void)
{
Tt t1;
int a = t1;
cout << a << endl;
return 0;
}

这里我们将Tt类型的变量t1转换成了int类型的值并赋值给int类型的变量a,然后输出a,这是输出结果:

1
2
~/codeSet/CPPCode » ./a.out                                                        fire@butterfly
4

可以看到,类型转换按照我们预先定义的方式规则工作了。
为了防止隐式转换,我们可以在声明的时候加上explicit:

1
explicit operator int()const {return b;};

然而该显示转换在用作条件的时候依然会被隐式转换。
不得不说,C++真是花里胡哨啊。
本篇完。

评论



愿火焰指引你