我有这样的课
class aClass
{
public:
aClass() : N(5) {}
void aMemberFunction()
{
int nums[N] = {1,2,3,4,5};
}
private:
const int N;
};
Run Code Online (Sandbox Code Playgroud)
测试代码是
int main()
{
aClass A;
A.aMemberFunction();
const int N = 5;
int ints[N] = {5,4,3,2,1};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我编译(g ++ 4.6.2 20111027)时,我收到错误
problem.h: In member function ‘void aClass::aMemberFunction()’:
problem.h:7:31: error: variable-sized object ‘nums’ may not be initialized
Run Code Online (Sandbox Code Playgroud)
如果我注释掉行,int nums[N]我没有得到编译错误,所以ints数组的类似代码是好的.N编译时是否知道值?
这是怎么回事?为什么被nums认为是一个可变大小的数组?为什么数组nums和ints处理方式不同?
N编译时是否知道值?
在aMemberFunction编译时,编译器现在不是什么N,因为它的值是在运行时确定的.看到只有一个构造函数并假设其值N可能不同于5 ,这是不够智能的.
| 归档时间: |
|
| 查看次数: |
19729 次 |
| 最近记录: |