C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了返回具有C字符串返回值的函数的本地C字符串大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
下面的代码编译并运行没有错误和预期的输出
#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)

编辑:还有一个细节.你提到

也许答案可能是真的无关紧要.

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

事实上,std :: String的流行实现使用了一种称为“小字符串优化”的东西.在一定长度下的字符串存储在字符串对象本身中的位置.

大佬总结

以上是大佬教程为你收集整理的返回具有C字符串返回值的函数的本地C字符串全部内容,希望文章能够帮你解决返回具有C字符串返回值的函数的本地C字符串所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。