Can you use the sizeof one member when declaring another member?

后端 未结 2 1406
情歌与酒
情歌与酒 2021-01-04 01:48

Is this legal C++?

struct foo
{
  int a[100];
  int b[sizeof(a) / sizeof(a[0])];
};

GCC 4.6 accepts it, but MSVC 2012 doesn\'t. It seems li

相关标签:
2条回答
  • 2021-01-04 02:16

    This was illegal in C++03 because these members are nonstatic datamembers.

    Starting from C++11 this is legal since in an unevaluated operand you can use nonstatic datamembers without having a corresponding object.

    0 讨论(0)
  • 2021-01-04 02:22

    Try this: This is a workaround for MSVC 2010 and MSVC 2012

    struct Aoo
    {
        typedef int ArrayType;
        ArrayType a[100];
    };
    
    struct foo : public Aoo
    {   
        enum {bSize = sizeof(Aoo) / sizeof(Aoo::ArrayType)};
        int b[bSize];
    };
    
    0 讨论(0)
提交回复
热议问题