如果我在函数中有以下代码,我不会得到错误,我可以编译没有问题,但是,一旦我把它放在全局范围内,我会收到一个错误"无法分配大小为零的数组",以及其他几个错误。为什么会发生这种情况以及如何摆脱错误。我知道全局变量的风险,这只是一个简单的测试用例。
int* intest[2];
intest[0] = new int;
全局范围内进行声明,但不允许使用 new 运算符或赋值。因此,您需要全局范围内的 int *intest[2] 声明(并且您的所有代码都会看到它),但C++要求 new 位于主代码的序列中。(可能在应用程序的某种启动功能中)。
编辑:正如@phresnel所指出的,您可以在此范围内使用新运算符,但不能使用赋值(这是不寻常的,但不是非法的)。但是,以下用作启动的新运算符将为您工作:
int *x[2]={new int,new int};
通常,强烈建议不要使用这种全局缓冲区,并且被认为是一种反模式 - 如果您可以避免使用它,则可能应该使用它。
int* intest[2];
但是,在本地范围内放置是有效的:
intest[0] = new int;
莫。
区别在于,上面的是初始语句(创建变量),而下面的是已执行的代码段。
应该"执行"的代码不能在全局范围内调用,例如,不能在全局范围内调用函数。何时调用该函数?
我可以在全局范围内创建我想要的变量数量,但我不能从中运行代码,除了初始化全局变量时调用的构造函数。
如果要执行诸如 :
intest[0] = new int;
您必须通过 main 或其他函数执行它,否则程序将不知道何时执行它。
AFAIK,全局范围只允许你放置define
并declaration
它。而intest[0] = new int;
是 c/c++ 编译器在编译时应失败的赋值。