C++ 静态分配数组的初始化列表大小错误的编译器警告

C++ 静态分配数组的初始化列表大小错误的编译器警告,c++,c++11,g++,C++,C++11,G++,假设类foo,其中包含一个静态分配的数组作为成员 class foo { private: char d_chars[5]; public: foo(); }; 如果初始值设定项列表的大小不同于数组的大小,是否有任何编译器标志会产生警告 例如,下面的代码可能在语法上是有效的,但开发人员可能忘记添加所有必要的初始值设定项 foo::foo() : d_chars{'A', 'B', 'C', 'D'} 另一方面,我知道如果初始值设定项列表超过数组的大小,编译器将正常地产生一个

假设类
foo
,其中包含一个静态分配的数组作为成员

class foo
{
 private:
  char d_chars[5];

 public:
  foo();
};
如果初始值设定项列表的大小不同于数组的大小,是否有任何编译器标志会产生警告

例如,下面的代码可能在语法上是有效的,但开发人员可能忘记添加所有必要的初始值设定项

foo::foo() :
  d_chars{'A', 'B', 'C', 'D'}

另一方面,我知道如果初始值设定项列表超过数组的大小,编译器将正常地产生一个错误。

这不完全是您要查找的,但类似的情况(包含在
-Wextra
中)。但这会检测到缺少的未初始化字段(例如结构的字段),而不是静态分配的数组。如果您的
d_chars
是一个由五个字符组成的结构(必须命名),而不是一个数组,并且您的初始值设定项列表是
:d_chars({'a'})
,它会抱怨没有足够的值。嗯,我明白了。谢谢但是,对于包含大量初始值的
int
数组,我需要它。他们基本上说,如果初始化列表太短,其余的值将得到默认初始化。(你可能知道这一部分。)他们的结论是,你不能生成这样的警告,但这是一篇老文章(5年),所以他们也引用了旧的文档。也许从那以后他们又增加了一些东西。当然,这也取决于编译器(您使用的是
g++
标记,所以我假设是gcc)和您使用的编译器版本。是的,我已经知道了。但我希望有任何警告,特别是对于较新的gcc版本(5.2+)。