【问题标题】:Why is clang++ warning "suggest braces around initialization of subobject [-Wmissing-braces]"?为什么clang ++警告“建议围绕子对象[-Wmissing-braces]的初始化大括号”?
【发布时间】:2015-07-22 06:35:55
【问题描述】:

我有这个代码:

#include <array>

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

这编译得很好 (-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};
                           ^~~~~
                           {    }

【问题讨论】:

    标签: clang++


    【解决方案1】:

    【讨论】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 2020-12-10
      相关资源
      最近更新 更多