我正在学习C ++。我正试图从this link开始研究它。在第10章中,当我研究运算符重载时,在示例程序中,“* this”作为常量引用返回。 Here it is
在这个程序中,我们使用“* this”取消引用当前对象,并返回值表示当前Counter对象作为常量引用。
所以当我这样做时:
Counter a = ++i;
是分配给常量引用的当前对象,并且常量引用的值是否复制到使用默认复制构造函数创建的新对象?
答案 0 :(得分:1)
写作时
Counter a = ++i;
您只是从函数返回的const Counter &
进行复制。你所做的相当于(从a
的角度来看):
const Counter & ref = ++i;
Counter a = ref;
只要您将a
定义为Counter
对象,它就会被创建为全新的Counter
对象(如果复制构造函数,您将收到编译器错误无法访问。)
答案 1 :(得分:0)
26: const Counter& Counter::operator++()
27: {
28: ++itsVal;
29: return *this;
30: }
由于我是一个对象,我们可以肯定地做这个任务。 所以在这种情况下,正如我们在这里看到的那样:
Counter a = ++i;
我们只是将增量对象分配给另一个相同类型的对象(计数器)。
这回答了你的问题吗?如果没有,我会m sorry, i think i didn
解决您的问题。
答案 2 :(得分:0)
你提到的案例非常简单。
Counter a = ++i;
将被翻译为......
++i;
Counter a = i;
参考文献等。根本没参与......