何时使用"静态"进行持久化

use*_*991 1 c++

我知道静态可以为c ++中的东西提供持久性,但我很困惑什么时候有必要.

例如,如果我有一个功能:

const int get5(){
  int x = 5;
  return x;
}
Run Code Online (Sandbox Code Playgroud)

而且我打印出来的回报,5会自然出现.但是,如果我对数组尝试相同:

const int* getArray() {
    int arr[5];
    arr[0] = 5;
    arr[1] = 6;
    arr[2] = 7;
    arr[3] = 8;
    arr[4] = 9;
    return arr;
}
Run Code Online (Sandbox Code Playgroud)

我迭代遍历数组的每个元素,我只是变得格格不入:

const int* ptr = getArray();
for (int index = 0; index < 5; index++) {
    cout << ptr[index] << endl;
}
Run Code Online (Sandbox Code Playgroud)

结果:

5
19920968
257848734
258124688
258124688
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用static修饰符为arr添加前缀,并赋予其持久性,则它可以:

5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么我需要将数组声明为静态,因为它的值是持久的,但在其他类型中,它没有必要?谢谢!

Mar*_*som 5

不同之处在于,在第一个示例中,您将返回一个副本,在第二个示例中,您将返回一个指针.当您返回副本时,原始值是否被销毁无关紧要.但是当你返回一个指针时,你必须确保指向对象的生命周期超出函数的末尾,否则你将得到未定义的行为.