请检查这段代码,它编译并运行得非常好。
问题是,当我开始学习 c++ (turbo c++) 时,我从来无法将任何类型的数组声明为 ..
datatype var[variable_set_at_runtime];
我想当然地认为这在最新的 gcc 编译器中是不可能的...但令人惊讶的是这是可能的...
所以我的相关问题是,那么新的运营商需要什么?
我知道 new 运算符做了很多事情,包括在运行时动态分配堆中的内存、返回该资源的地址......等等。
我觉得有什么区别是我的代码在堆栈上动态分配内存,而 new 在堆上分配内存?这是唯一的区别吗...
写完这样的东西后我真的很惊讶,因为当我开始学习 C++ 时我无法做到这一点......添加到它我也可以对自定义数据类型执行此操作...:-O
#include<iostream>
using namespace std;
struct A
{
int a;
int b;
};
int main()
{
int a;
cin>>a;
int ch[a];
for(int i=0;i<a;i++)
ch[i]=i+1;
for(int i=0;i<a;i++)
cout<<"\n\nch=="<<ch[i];
A obj[a];
cin>>obj[a-1].a;
cin>>obj[a-1].b;
cout<<"\n\n obj.a,obj.b=="<<obj[a-1].a<<" , "<<obj[a-1].b;
}
请透露一些信息..
Thanks.
我想当然地认为这
在最新的 gcc 中不可能
编译器......但令人惊讶的是这是
可能的...
它在 C 中是合法的,但在 C++ 中不合法。 GCC 可能允许它,具体取决于编译器标志,但如果您将代码编译为严格的 C++(您应该这样做),则不允许动态长度数组,并且您必须使用new
。 (我很惊讶还没有人提到这个小细节)
除此之外,另外两个很大的区别是:
- 当栈上的数据超出范围时会自动清理
- 通常只为堆栈分配 1MB 之类的空间。大型数据结构应该放在堆上。
但实际上,最重要的一点是第一点——它不是有效的 C++。 (正如 Neil 指出的,它在 C++0x 中也无效。没有计划将其添加到 C++ 中)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)