gpt4 book ai didi

c++ - 一般指针问题

转载 作者:行者123 更新时间:2023-11-30 02:43:10 26 4
gpt4 key购买 nike

我试过以下方法:

std::string* Member::GetName()
{
std::string name2 = "sdfsdfsd";
return &name2;
}

std::string* name;
Member m;

name = m.GetName();

std::cout << *name << std::endl;

它“有效”,但在调用 GetName() 后 name2 不应该不可用吗?我的指针什么也没指向?

编辑:

多年后带着更多的经验回来。有些人已经在下面回答了这个问题。

返回本地是不好的!,如果堆栈上的值没有被覆盖,你可能会侥幸逃脱,所以通常当你在返回本地后直接使用它时你可能会得到正确的值,但这是仍然是未定义的行为。同样不返回 const& 也不起作用,即使现在有时我认为它将返回值绑定(bind)到一个临时值,就像它对 const& 参数所做的那样,但返回类型不是这种情况,返回 r-values refs 也是如此。你只能返回一个拷贝并像这样将其作为 const ref 获取

std::string GetName();

const std::string& name = GetName();

这会将它绑定(bind)到一个临时的因此是有效的检查 herb sutters gotw: https://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/对于 const ref 临时对象。

最佳答案

获取局部堆栈变量的地址并在它不再在范围内时使用它是未定义的行为

至于“它有效”,这并不意味着它永远有效或者这是一种可靠的做法。返回时不会立即清除堆栈。看一下“undefined behavior”的定义

关于c++ - 一般指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26377861/

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