假设您有一个全局类(例如可用于应用程序的运行时)
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交叉编译。