gpt4 book ai didi

C++ 为类中未初始化的变量启用警告

转载 作者:太空狗 更新时间:2023-10-29 22:54:19 25 4
gpt4 key购买 nike

让我们有这段代码:

#include <iostream>
#include <simd/simd.h>
class X {
public:
X(int a) : x{a} {} // <-- only x is initialized, y is not

int x;
int y;
simd_double3 d;
};

int main(int argc, const char * argv[]) {
X x(1);
X* xx = new X(2);
std::cout<<x.x<<" "<<x.y<<" "<<x.d.x; // <-- y and x.d are used, but not initialized
std::cout<<xx->x<<" "<<xx->y<<"END\n";
return 0;
}

我想发出 X 中的 y 未初始化的警告。 -Wall, -Wmissing-field-initializers 似乎什么都不做。它编译时没有警告。此示例代码产生以下输出:1 0 6.95323e-310所以即使 y 被初始化为 0(实际上不是,因为 clang 分析将其标记为未初始化),显然 simd_double3 没有被初始化为 0。

clang 分析也将 x.y 标记为未初始化。 (第一个函数调用参数是未初始化的值)

另外,在 Release模式下在堆上创建 X 时,x.y 的内容是垃圾。第二行打印:2 -1094795586,y显然没有初始化。

最佳答案

我使用 clang 8(最新发布版本)命令行检查所有警告:
clang -O2 -Wall -Wextra -Weverything
检查:https://godbolt.org/z/kKp-N5
Clang 对类和结构中未初始化的变量没有任何警告。但是使用带有检查 cppcoreguidelines-pro-type-member-init 的 clang-tidy 可能对您有帮助。
https://releases.llvm.org/8.0.0/tools/clang/tools/extra/docs/clang-tidy/checks/cppcoreguidelines-pro-type-member-init.html

关于C++ 为类中未初始化的变量启用警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56456570/

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