在函数中定义的 std::string 保留其先前的值

std::string defined in a function retains its previous value?

本文关键字:保留 string 定义 函数 std      更新时间:2023-10-16

如果在函数中定义了字符串,它是否在调用之间保留其值?

像这样:

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 末尾,这是未定义的行为。一旦你进入了不确定行为的领域,任何事情都可能发生。

它没有。我相信你问的是关于字符串而不是所有其他局部变量,因为字符串使用堆。没错,但字符串也有一个析构函数,它在退出作用域时调用,解除分配它使用的堆。

当然,您可能会发现它确实保留了其值,但这只是再次分配相同内存区域的巧合(这可能会一次又一次地发生,具体取决于您的程序、内存环境、编译器等)。