gpt4 book ai didi

c++ - 允许使用右值的地址吗?

转载 作者:太空狗 更新时间:2023-10-29 23:12:24 27 4
gpt4 key购买 nike

<分区>

我正在练习描述的东西Here学习左值和右值的概念。

但是,当我设计自己的示例如下时,我发现它编译并运行没有任何错误(使用 VS2017)。我了解到,在情况 1 中,它与调用

produceA(10).operator=(A()) 

因此是合法的。但是,我仍然不明白为什么允许情况 2 和 3。事实上,案例2甚至与文章中给出的例子相矛盾。在这两种情况下,我真的得到了右值的地址吗?它们会导致未定义的行为吗?

#include <string>

class A
{
int data = 1;
public:
A() = default;

A(int in)
: data(in)
{}

A& operator=(const A& rhs)
{
data = rhs.data;
return *this;
}
};

A produceA(int i)
{
A a(i);
return a;
}


int main()
{
// case 1
produceA(10) = A();

// case 2
A* pa = &produceA(10); // rvalue?

// case 3
std::string* pstr = &std::string("Temp"); // rvalue?

return 0;
}

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