gpt4 book ai didi

c++ - 右值引用未定义行为

转载 作者:行者123 更新时间:2023-11-30 03:03:28 25 4
gpt4 key购买 nike

#include<iostream>

struct Test
{
int n ;
~Test(){}

Test& operator =(int v)
{
n=v;
return *this;
}
};

Test * ptr = nullptr;

void g(Test && p)
{
std::cout << "&&";
}


void g(Test & p)
{
ptr = &p;
std::cout << "&";
}

void f(Test&& t)
{
g(t);
}

void buggy()
{
*ptr = 5;
}

int main()
{
f(Test());
buggy();
std::cin.ignore();
}

可以肯定的是,当我们保留临时地址时,上面的代码会导致未定义的行为?

最佳答案

声明指向结构Test* ptr; 的指针或您所说的“保持地址” 不会导致未定义的行为。使用指向生命周期结束的对象的指针。

main 中由 Test() 创建的对象的生命周期在 f(Test()); 执行后立即结束。在那之后,无论你使用 ptr 做什么都是未定义的。即使在其生命周期结束后,该对象很可能仍保留在内存中,但您不应该依赖它。

您还应该查看:What are all the common undefined behaviours that a C++ programmer should know about?

关于c++ - 右值引用未定义行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9349148/

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