gpt4 book ai didi

c++ - 如何正确返回 std::string (或如何正确使用该返回值)

转载 作者:可可西里 更新时间:2023-11-01 17:55:23 25 4
gpt4 key购买 nike

假设您有一个全局类(例如,可用于应用程序的运行时)

class MyClass {
protected:
std::string m_Value;
public:
MyClass () : m_Value("hello") {}
std::string value() { return m_Value; }
};

MyClass v1;

当我这样做时,使用第一种形式会给我带来奇怪的行为

printf("value: %s\n", v1.value().c_str());

看起来字符串在 printf 可以使用它之前就从内存中消失了。有时它会打印 value: hello 其他时候它会崩溃或什么都不打印。

如果我先像这样复制字符串

   std::string copiedString = v1.value();
printf("value: %s\n", copiedString.c_str());

一切正常。

肯定有一种方法可以避免使用临时字符串执行此操作。

编辑:所以共识是使用 const std::string 和返回值。

我知道每个人都说原始代码应该没问题,但我可以告诉你,我已经看到 Windows CE 上的 MSVC 2005 有问题,但仅限于 CE 机器。不是 Win32 交叉编译。

最佳答案

您的代码应该可以正常工作。还有一些问题是我们无法从这个测试用例中检测到的。也许通过 valgrind 运行您的可执行文件来搜索内存错误。

关于c++ - 如何正确返回 std::string (或如何正确使用该返回值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4620456/

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