在函数中定义的 std::string 保留其先前的值
std::string defined in a function retains its previous value?
如果在函数中定义了字符串,它是否在调用之间保留其值?
像这样:
std::string myFunction( std::string input)
{
std::string output;
for ( int i=0; i < input.length(); i++ )
{
output[i] = input[i];
}
return output;
}
如果第一次调用函数时输入字符串的长度比第二次调用中输入的长度长,则第二次调用中返回的字符串仍然具有前一次调用的最后几个(与长度差相同)字符完好无损。
如果在函数中定义了字符串,它是否在调用之间保留其值?
在定义良好的代码中,除非它被声明为static
,否则它不会。
当前实现的主要问题是循环的主体:
for ( int i=0; i < input.length(); i++ )
{
output[i] = input[i];
}
在这里,您分配的 output
末尾,这是未定义的行为。一旦你进入了不确定行为的领域,任何事情都可能发生。
它没有。我相信你问的是关于字符串而不是所有其他局部变量,因为字符串使用堆。没错,但字符串也有一个析构函数,它在退出作用域时调用,解除分配它使用的堆。
当然,您可能会发现它确实保留了其值,但这只是再次分配相同内存区域的巧合(这可能会一次又一次地发生,具体取决于您的程序、内存环境、编译器等)。
相关文章:
- 有根的二进制搜索树.保留与其父级的链接
- 为多个会话保留XPtr
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- std中有类似find_last_of的函数,而string中没有
- 保留对其他类的成员函数的引用
- 使用 std::string () const 函数启动线程或未来
- 使用char类型将decimal转换为string,将string转换为decimal
- 当 std::make_tuple 是 r 值引用时,如何保留 std::string 类型
- 如何将STD :: String转换为QString保留值,反之亦然
- 如何在 STL 载体上仅保留重复项<string>?
- 在函数中定义的 std::string 保留其先前的值
- 如何在不复制和保留 std::string 对象的情况下获得 C++ std::string 字符数据的所有权
- 保留临时std::string并返回c_str()以防止内存泄漏
- 为什么"std::string::reserve()"不保留我指定的确切空间量?
- 如何创建 std::string 包装器,它将 ptr 保留为 std::string 和 ptr 到创建该包装器实例的
- 将double/float类型转换为string类型,保留科学记数法和精度
- 如何为std::vector/std::string保留空间?
- 保留,然后赋值给std::string