gpt4 book ai didi

c++ - 为具有 C++ 字符串返回值的函数返回一个本地 C 字符串

转载 作者:可可西里 更新时间:2023-11-01 18:25:00 24 4
gpt4 key购买 nike

以下代码编译并运行时没有错误,并具有预期的输出:

#include <string>
#include <iostream>
using namespace std;

string getString()
{
char s[] = "Hello world!";
return s;
}

int main()
{
cout << getString() << endl;
}

我的问题是,这会一直有效吗?通常,如果您返回一个在本地声明的 C 字符串,您可能会遇到一些未定义的行为,但在这种情况下,这仍然是一个问题,因为它通过字符串构造函数运行并(大概)复制到动态内存中?

最佳答案

 return s;

该行相当于:

return std::string(s);

这将生成字符串的拷贝,所以没问题。

引用: http://en.cppreference.com/w/cpp/string/basic_string/basic_string (构造函数#5)

Constructs the string with the contents initialized with a copy of the null-terminated character string pointed to by s.

编辑:更多细节。你提到

copied into dynamic memory?

答案是也许,也许,这并不重要。

std::string 提供的语义对此没有任何规范,它只是保证它可以被复制/移动并以一致的方式访问。它如何实现这一点取决于库的实现者。

事实上,std::string 的流行实现使用称为“Sma​​ll String O优化”。特定长度以下的字符串存储在字符串对象本身中。

关于c++ - 为具有 C++ 字符串返回值的函数返回一个本地 C 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45444103/

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