gpt4 book ai didi

c++ - 返回 void 的预增量运算符

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:18 24 4
gpt4 key购买 nike

以下代码在 gccclang 中编译正常:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com