【发布时间】:2021-10-02 04:20:56
【问题描述】:
我正在寻找使用clang-tidy 避免cppcoreguidelines-init-variables 警告的最佳方法。
std::istringstream in(line);
float x, y, z, rotx, roty, rotz;
in >> x >> y >> z >> rotx >> roty >> rotz;
-> 变量“x”未初始化,变量“y”未初始化,...
double min_intensity, max_intensity;
cv::Point point_min, point_max;
cv::minMaxLoc(input, &min_intensity, &max_intensity, &point_min, &point_max, elliptic_mask_around_center);
-> 变量 'min_intensity' 未初始化,...
我可以为x、y、...、min_intensity 和max_intensity 指定一个值,但我不明白为什么要这样做。
避免此警告的最佳方法是什么?
float x = 0.F; // initialize to a value, but 6 lines, and it makes no sense because x is never 0
float x = NAN; // works but 6 lines, and needs <cmath> inclusion
float x, y, z, rotx, roty, rotz; // NOLINT [not very practical, and means the warning is a false positive]
感谢您的帮助。
【问题讨论】:
-
当来自流的输入失败时,变量将具有不确定的值,稍后在代码中使用它们将调用未定义的行为。你最好初始化它们
-
实际检查 IO 操作是否成功,而不是一味地假设它成功了并继续前进,如果一切顺利也不会受到伤害。
-
@463035818_is_not_a_number 检查读取是否有效在这里是必不可少的,因为即使您使用任意值初始化它们,如果读取失败,它也是一个等待发生的错误。
-
@463035818_is_not_a_number:自at least C++11 以来,情况并非如此。
-
@DavisHerring 是和否。如果
x提取失败,则流处于错误状态,后续提取不会初始化其他变量
标签: c++ clang-tidy