小编sta*_*rdt的帖子

可能无法初始化可变大小的对象

我有这样的课

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认为是一个可变大小的数组?为什么数组numsints处理方式不同?

c++ arrays

5
推荐指数
1
解决办法
2万
查看次数

如何使用GCC获得更好的矢量化?

请考虑执行相同计算的以下三个功能:

#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)

gcc sse clang avx auto-vectorization

4
推荐指数
1
解决办法
559
查看次数

标签 统计

arrays ×1

auto-vectorization ×1

avx ×1

c++ ×1

clang ×1

gcc ×1

sse ×1