gpt4 book ai didi

c++ - Clang-Tidy 关于未能初始化匿名 union 的所有字段的警告是误报吗?

转载 作者:行者123 更新时间:2023-12-04 21:28:48 29 4
gpt4 key购买 nike

我在 C++ 项目中有如下代码:

struct Foo {
union {
double d = 1.0;
char c;
};
};

当我通过 Clang-Tidy 运行它时,它警告我构造函数没有初始化字段 c .但是,当我编译代码时,我没有看到有关此 union 初始化的任何警告。

这段代码是否潜伏着潜在的问题?还是来自 Clang-Tidy 的警告是可以安全忽略的误报?

最佳答案

实际上,在该代码中,您无法初始化这两个变量。检查 structs and unions initialization rules .编译器会沿着这条线抛出一些东西 Error: only one non-static data member of a union may have a default member initializer .所以不仅是你可以 忽略 Clang 警告,你 在这种特殊情况下。如果它是误报或 Clang 的错误,不能说,但它显然不应该提示这一点,因为修复此警告将阻止您的代码编译。

关于这些警告的更一般的说明。一个未初始化的变量本身不会破坏你的程序,除非你尝试做一些取决于变量值的事情,然后 许多 事情可能会发生,有些不好,有些未知,有些甚至可以正常工作。

通过显式初始化变量,您可以确保它处于一致且已知的状态,该状态在使用时不太可能导致您的程序中断(除非您传递给它的值使它如此)。如果您真的知道自己在做什么,或者它们只是没有意义(例如这个),则忽略这些警告,风险自负。

关于c++ - Clang-Tidy 关于未能初始化匿名 union 的所有字段的警告是误报吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58830081/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com