提示:文章
文章目录
前言
前期疑问:
本文目标:
一、背景
看编程规范,看到返回局部变量
其中关键一点就是——禁止将局部变量的地址传递到其作用域外
二、
2.1
这个规范主要指出的的问题是下面的问题
char* GetData()
{
constexpr char s[] = "hello world";
return s;
}
其中规范中提到下面的一个正例,一开始我是很懵的,因为函数内部也返回了一个地址,为什么没有问题。
一开始我还以为是const的原因,查了下const修饰的局部变量也会在作用域消失后释放资源。const修饰应该是防止被更改。
std::string GetData()
{
constexpr char s[] = "hello world";
return s;
}
然后问了茂盛,应该是返回值是std::string的原因。等于是返回前将字符串数组赋值给了string,最后函数返回了string而不是指针。
即上面的代码可以变换成下面的代码
std::string GetData()
{
constexpr char s[] = "hello world";
std::string str = s;
return str;
}
在clion上试了下可以正常运行。
2.2
三、
3.1
总结
未完待续