我现在正在学习C++。我正在尝试从此链接研究它。在第 10 章中,当我研究运算符重载时,在示例程序中,“*this”作为常量引用返回。这里是
在这个程序中,我们使用“*this”取消引用当前对象,返回值意味着当前的 Counter 对象作为常量引用。
所以当我这样做时:
Counter a = ++i;
是否将当前对象分配给常量引用,并且将常量引用的值复制到使用默认复制构造函数创建的新对象?
当你写
Counter a = ++i;
您只是const Counter &
从函数返回的内容中复制。你正在做的相当于(从的角度来看a
):
const Counter & ref = ++i;
Counter a = ref;
只要您定义a
为一个Counter
对象,它将被创建为一个全新的Counter
对象(或者如果无法访问复制构造函数,您将收到编译器错误)。
好吧,实际上这个类有一个 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
不会解决你的问题。
您提到的案例非常简单。
Counter a = ++i;
会被翻译成...
++i;
Counter a = i;
参考文献等 完全不参与……