我知道静态可以为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)
我的问题是,为什么我需要将数组声明为静态,因为它的值是持久的,但在其他类型中,它没有必要?谢谢!
不同之处在于,在第一个示例中,您将返回一个副本,在第二个示例中,您将返回一个指针.当您返回副本时,原始值是否被销毁无关紧要.但是当你返回一个指针时,你必须确保指向对象的生命周期超出函数的末尾,否则你将得到未定义的行为.
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |