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

标签 c++ pre-increment

以下代码在 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/

相关文章:

c++ - 在 vector 中存储模板化对象指针并通过基类指针访问

c++ - 为什么后增需要复制,而前增不需要

使用增量运算符后的输出令人困惑

c++ - 如何编写密码安全类?

c++ - 在 C++ 中支持 cuda 的错误 opencv

c++ - 尝试通过 RTP cpp 使用 ffmpeg 库发送视频流时丢包

Java 增量 i = i++;

c - 结构指针上的前/后增量运算符

javascript - Javascript 的++ 和 -- 运算符的非典型用途

c++ - 在构造函数中中断对象的创建