gpt4 book ai didi

c++ - 临时对象并通过(const/non-const) `value`

转载 作者:行者123 更新时间:2023-11-30 04:15:22 27 4
gpt4 key购买 nike

临时对象的生命周期持续到使用时创建它的表达式的全长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 有关的功能,但我无法完全理解,因为最后它归结为功能( void My::increment() )试图修改 const My 类型的临时对象在这两种情况下。

最佳答案

一个临时对象有一个类型,这个类型可以是常量,也可以是非常量。您只能在非常量对象上调用非常量成员函数。 withOutConst() 生成 My 类型的临时对象,withConst() 生成const My 类型的临时对象。

也许您误以为临时变量总是const?如果是这样,那就错了。

关于c++ - 临时对象并通过(const/non-const) `value`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18342004/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com