首先我们看下一种比较常见的技术——类构造函数的隐式转换。这儿先说明下,之后的例子中,我会为了尽量突出主要内容,而忽略一些可以作为充分条件但非必要条件的东西,故设计的一些代码存在“不完善”的嫌疑。因为为了堵住所有漏洞,往往会让整个代码让人感觉其重心并非在我想介绍的技术上,而在“苦行僧”式的编程原则上。
我们知道C++是一个类型严格的语言,比如下面一个函数
-
void test_int_proxy(const int_proxy& v) {
-
printf("%d", v.value());
-
}
调用者对其传参也应该是一个int_proxy的对象,但是实际情况并非如此。那该如何表述,我个人觉得应该是:编译器对其传参应该是一个int_proxy对象。这两种表述的区别就是“调用者”和“编译器”的区别。我们来看一个实际例子,我们先假定int_proxy类这么定义:
-
class int_proxy {
-
public:
-
int_proxy(int n) : _m(n) {};
-
public:
-
int value() const {
-
return _m;
-
}