class item {
public:
item& operator=(const item &rh) {
...
...
return *this;
}
};
Run Code Online (Sandbox Code Playgroud)
以下签名是错误的吗?
void operator=(const item &rh);
Run Code Online (Sandbox Code Playgroud)
item a, b;
a = b; // equivalent to a.operator=(b); so there is no need to return this.
Run Code Online (Sandbox Code Playgroud)
Joh*_*itb 10
这不是"错误的",而是令人惊讶的.赋值评估目标对象.这就是内置意义.如果你为自己的班级定义不同,人们可能会感到困惑.
例:
int c;
while((c = getchar()) != EOF) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
c返回c自己的任务并将其与EOF之后进行比较.用户希望您的item课程表现相似.
带有void的签名不允许链接赋值:
a = b = c;
Run Code Online (Sandbox Code Playgroud)
(请查看Johannes关于基于返回指定值的赋值的使用模式的另一个示例的答案.)
这就是为什么不鼓励使用这种签名的原因.但是,如果我没有弄错,你实际上可以使用这样的签名.
| 归档时间: |
|
| 查看次数: |
2373 次 |
| 最近记录: |