以下代码在 gcc
和 clang
中编译正常:
class A{
public:
void operator++(){
printf("A++\n");
// return *this;
}
};
实现这种运算符的“正确”方式不是:
class A{
public:
A &operator++(){
printf("A++\n");
return *this;
}
};
void
版本是 hack 吗?我从未见过这样的语法。谷歌搜索只返回一篇关于它的教育性 IBM 论文。
为什么这不是针对返回自引用实现预增量的广泛使用的方法。
最佳答案
Why this is not wide used way to implement pre-increments against returning self reference.
如果你问为什么它是预增量没有这个签名,而不是返回一个左值引用到它所应用的对象,那是因为它被设计为计算一个表达式,这样它可以以与内置类型相同的方式使用:
int i = 42;
int j = ++i;
A a;
A b = ++a; // Error if RHS is void
(++a).doSomething(); // ditto
此外,前缀 ++
(和 --
)的预期语义是它们返回对(修改的)对象的左值引用。做任何不同的事情总会导致困惑。
关于c++ - 返回 void 的预增量运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32963415/