我想声明我的方法顶部的阵列,但它不是编译:C++:如何在方法的顶部声明一个数组?
Foo Bar()
{
int arr[]; // C2133
// …
// C2059, C2143, C2143
arr[] = {1, 2, 3};
}
什么我错在这里做什么?
UPDATE我知道C++并不强迫我这样做,但项目的约定要求在方法顶部声明所有变量。
我想声明我的方法顶部的阵列,但它不是编译:C++:如何在方法的顶部声明一个数组?
Foo Bar()
{
int arr[]; // C2133
// …
// C2059, C2143, C2143
arr[] = {1, 2, 3};
}
什么我错在这里做什么?
UPDATE我知道C++并不强迫我这样做,但项目的约定要求在方法顶部声明所有变量。
当您在C/C++中声明数组时,您需要指定大小。如果不指定大小,则需要在同一个声明语句中定义数组元素,如下所示:
int arr[] = {1, 2, 3};
如果您不知道数组的大小并且无法在声明中指定元素,则需要使用指针并动态分配内存,但这是另一个问题的主题。 – 2010-07-02 00:16:17
如果你带着指针走,你会失去执行神奇的“= {1,2,3}”的能力,对吧? – 2010-07-02 00:33:53
@Owen右。实际上,如果你在初始化时没有这样做,即使数组是在固定大小的栈上声明的(例如'int arr [3]; arr = {1,2,3} ;'不合法)。该大括号语法仅适用于初始化,不适用于分配。 – 2010-07-02 02:55:46
这只是无效的语法。如果你想要做arr = { ... };
,它必须是你声明变量的时候。但是C++不会强制你在函数的开头声明变量,所以你可以这样做:
Foo Bar() {
// other stuff goes here
// ...
int arr[] = {1, 2, 3};
}
你不能。无论是项目的惯例需要给,或者您的初始化代码:
Foo Bar() {
int a[3];
...
a[0] = 1;
a[1] = 2;
a[2] = 3;
}
什么项目约定,要求你声明非特定数组的大小,而不是初始化它们? – YeenFei 2010-07-02 01:34:30
我在这段时间看到过一些疯狂的约定,但从来没有强迫你编写无效代码的约定。 – 2010-07-02 01:52:41
一个好的编码惯例需要相反的,在需要而不是更早的地方声明一个变量。 – starblue 2010-07-03 18:53:42