1

我现在正在学习C++。我正在尝试从此链接研究它。在第 10 章中,当我研究运算符重载时,在示例程序中,“*this”作为常量引用返回。这里是

在这个程序中,我们使用“*this”取消引用当前对象,返回值意味着当前的 Counter 对象作为常量引用。

所以当我这样做时:

Counter a = ++i;

是否将当前对象分配给常量引用,并且将常量引用的值复制到使用默认复制构造函数创建的新对象?

4

3 回答 3

1

当你写

Counter a = ++i;

您只是const Counter &从函数返回的内容中复制。你正在做的相当于(从的角度来看a):

const Counter & ref = ++i;
Counter a = ref;

只要您定义a为一个Counter对象,它将被创建为一个全新的Counter对象(或者如果无法访问复制构造函数,您将收到编译器错误)。

于 2012-04-08T06:50:50.350 回答
0

好吧,实际上这个类有一个 operator++ 函数,它适用于 ++var 或 var++。

26:    const Counter& Counter::operator++()
27:    {
28:       ++itsVal;
29:       return *this;
30:    }

由于 i 是一个对象,我们可以肯定地完成这个任务。所以在这种情况下,我们可以在这里看到:

Counter a = ++i;

我们只是将一个递增对象分配给另一个相同类型(计数器)。

这回答了你的问题吗?如果没有,我m sorry, i think i didn不会解决你的问题。

于 2012-04-08T06:49:25.610 回答
0

您提到的案例非常简单。

Counter a = ++i;

会被翻译成...

++i;
Counter a = i;

参考文献等 完全不参与……

于 2012-04-08T07:37:21.067 回答