静态绑定和Array的动态绑定之间的区别

car*_*995 4 c++ arrays dynamic-binding static-binding

我刚刚阅读了关于我现在在stackoverflow中询问的相同主题的所有搜索结果,并没有真正回答我的好奇心.但这就是事情.

问题

1.)据我所知,静态绑定意味着它在编译期间设置,并且它在运行时存在,而动态绑定意味着它在运行时设置.

2.)所以我读过的书介绍了动态数组,它提到动态数组大小可以在运行时设置.这是以这种方式完成的.

代码

int size;
cin >> size;
int * pz = new int [size]; // dynamic binding, size set at run time
delete [] pz; // free memory when finished
Run Code Online (Sandbox Code Playgroud)


3.)在这段代码中,书中提到动态数组大小可以在运行期间设置.出于好奇,我试试这个.

代码

int size;
cin >> size;
int array[size];
//After the array declaraction i assign value to it to check whether it works or not.
Run Code Online (Sandbox Code Playgroud)


4.)上面的代码也有效,所以我只是好奇动态数组有什么特别之处,因为普通静态数组可以做同样的工作.

5.)是因为动态数组可以在运行时释放它的内存而静态不能使它如此特殊吗?


感谢您花时间阅读我的问题,请指出我所犯的任何错误.

Xeo*_*Xeo 6

具有动态大小的静态数组(称为可变长度数组,短VLA)仅适用于编译器中的语言扩展.它是C99的东西,它不包含在C++标准中,这意味着它不可移植.

另一个明显的区别是你可以将指针传递给其他地方的动态数组,将它保存在某个地方,从函数返回它,或者换句话说,让它比它创建的范围更长.你不能用静态数组做到这一点,因为它们在范围的末尾被销毁.