临时对象的生命周期持续到使用时创建它的表达式的完整长度without references
。
考虑以下:
class My
{
int i;
public:
void increment()
{
i++;
}
};
My withOutConst()
{
return My();
}
const My withConst()
{
return My();
}
int main()
{
My ob;
withOutConst().increment(); // Case 1
withConst().increment(); // Case 2
return 0;
}
据我了解,在上述情况下,编译器会创建一个temporary
对象(类型)来保存返回值。const My
而且,我正在尝试修改临时对象。
(1)
编译良好并且
(2)
导致编译时错误并出现以下错误:
error: passing 'const My' as 'this' argument of void My::increment() discards qualifiers
这意味着基本上this
是类型My
而不是函数const My
调用它non-const
。
我的问题:
我正在尝试const My
通过调用non-const
成员函数来修改类型的临时对象。
那么为什么我在 case(1) 中没有得到相同的错误,因为 const My
在这两种情况下我都在操作该类型的对象。
我知道这与return type
函数有关,但我无法完全理解,因为最后归结为 function( void My::increment()
),它试图const My
在这两种情况下修改临时类型。