为什么clang ++警告"建议围绕子对象初始化[-Wmissing-braces]"?

Sco*_*ter 36 clang++

我有这个代码:

#include <array>

int main(int, char **argv)
{
   std::array<int, 3> a = {1,2,3};
}
Run Code Online (Sandbox Code Playgroud)

这编译很好(-std = c ++ 11),但如果你包含-Wall它会发出我不明白的警告:

clang_pp_error.cpp:5:28: warning: suggest braces around initialization of subobject [-Wmissing-braces]
   std::array<int, 3> a = {1,2,3};
                           ^~~~~
                           {    }
Run Code Online (Sandbox Code Playgroud)

Fra*_*kHB 16

这应该是一个错误:https://llvm.org/bugs/show_bug.cgi?id = 21169.

另请参阅忽略gcc/clang的"-Wmissing-braces"警告是否明智?.

  • 不应该禁止此警告.如果代码是根据C++ 11,则建议使用`{{..}}`而不是单个`{..}`的初始化列表.它有一个目的,因此不应该抑制警告,而不是改进以后可能导致问题的代码. (4认同)
  • @SohailSi 这对于防止要初始化的子对象和正在初始化的对象之间的混淆很有用,但是对于像 `std::array` 这样的情况来说,这是完全错误的,其中封闭类旨在替换唯一的数组数据成员. 对此类情况执行此警告会泄露实施细节。在可以通过某种可移植的方式(例如属性)单独抑制它之前,默认情况下启用它是不明智的。 (3认同)