gpt4 book ai didi

c++ - 返回指向局部变量的指针总是未定义的行为

转载 作者:行者123 更新时间:2023-12-05 01:24:06 25 4
gpt4 key购买 nike

<分区>

我读到我们不应该返回一个指针或对局部变量的引用。所以在下面给出的例子中,我知道当我写的时候:return f;内部函数 foo ,我正在返回一个指向局部变量的指针。在函数外部使用该指针将导致未定义的行为。

#include <iostream>

const char* foo()
{
const char* f = "ffdf";
return f;//returning pointer to a local variable
}

const char* func()
{
return "fsfs";
}

int main()
{
const char* ptr = func();
const char* f = foo();
std::cout<<f<<std::endl; //I know this is undefined behavior because we're using a pointer that points to a local variable
std::cout<<ptr; //But IS THIS UNDEFINED BEHAVIOR too?
}

我的问题是返回语句 return "fsfs"; 是否也是如此?内部函数 func .我知道在 C++17 中有强制复制 elison。所以我的问题是针对所有现代 C++ 版本(C++11、C++17 等)。行为是否因 C++ 版本而异/不同。

特别是,我知道声明 std::cout<<f<<std::endl;里面main始终是未定义的行为,因为我们使用的是指向局部变量的指针(悬挂)。但是声明std::cout<<ptr;也会导致未定义的行为。如果不是,为什么以及这里会发生什么。

PS:我在描述第一个 cout 中实际发生的事情时可能是错误的声明也。所以如果我错了请纠正我。此外,我的初衷并不局限于特定类型,如字符串文字。例如,我可以选择返回 int而不是字符串文字,返回类型为 const int& .但由于人们已经开始回答,我不会更改示例以使用 int .

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