返回一个常量引用

时间:2012-04-08 06:38:22

标签: c++ operator-overloading

我正在学习C ++。我正试图从this link开始研究它。在第10章中,当我研究运算符重载时,在示例程序中,“* this”作为常量引用返回。 Here it is

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

所以当我这样做时:

Counter a = ++i;

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

3 个答案:

答案 0 :(得分:1)

写作时

Counter a = ++i;

您只是从函数返回的const Counter &进行复制。你所做的相当于(从a的角度来看):

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

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

答案 1 :(得分:0)

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

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;

参考文献等。根本没参与......

相关问题