我有这样的课
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处理方式不同?
请考虑执行相同计算的以下三个功能:
#include <x86intrin.h>
void testfunc_loop(double a, double b, double* dst)
{
double f[] = {a,b,-a,-b};
for(int n = 0; n < 4; ++n)
{
dst[n] = 0.1 + f[n]*(1.0 + 0.5*f[n]);
}
}
void testfunc_flat(double a, double b, double* dst)
{
dst[0] = 0.1 + ( a)*(1.0 + 0.5*( a));
dst[1] = 0.1 + ( b)*(1.0 + 0.5*( b));
dst[2] = 0.1 + (-a)*(1.0 + 0.5*(-a));
dst[3] = 0.1 + (-b)*(1.0 + 0.5*(-b));
}
void testfunc_avx(double a, double b, double* …Run Code Online (Sandbox Code Playgroud)