【发布时间】:2019-01-08 12:48:51
【问题描述】:
我正在阅读 Bjarne Stroustrup 的 TCPPPL,我遇到了以下代码(如下所示)。我有两个问题:
函数 operator+ 的主体在哪里?我的意思是只有 X 类中的函数声明。
X(int) 行是什么意思?这是以 int 作为参数的构造函数还是其他什么?
class X {
public:
void operator+(int);
X(int);
};
void operator+(X,X);
void operator+(X,double);
void f(X a)
{
a+1; // a.operator+(1)
1+a; // ::operator+(X(1),a)
a+1.0; // ::operator+(a,1.0)
}
【问题讨论】:
-
您显示的代码没有
operator+()的“主体”或X的构造函数,或X之后声明的operator+()的两个版本。X(int)声明了X的构造函数,它接受int作为参数。除非函数在其他地方定义(实现),否则该代码将编译,但链接将失败。 -
@Peter 请不要将答案写入 cmets。
-
请注意,示例省略实现是很常见的。由于该示例似乎主要是关于重载解决方案,因此实现并不真正相关。同样正如彼得已经提到的,代码编译没有,只有当你尝试链接它会失败