c++ - 无法理解 float 和对象实例化之间比较的原因

标签 c++ valgrind tesseract

我无法理解来自 Tesseract 的 control.cpp 的以下代码:

(stats_.doc_outline_errs / static_cast<float>(page_res->char_count) <=
     quality_outline_pc)

stats_.doc_outline_errs 是一个shortpage_res->char_count 是一个intquality_outline_pc 是:

double_VAR_H(quality_outline_pc, 1.0,
               "good_quality_doc lte outline error limit");

double_VAR_H 是:

#define double_VAR_H(name,val,comment)\
  tesseract::DoubleParam     name

似乎我们正在比较一个 short 除以一个 int 转换为 float 和一个变量声明,即 tesseract::双参数 quality_outline_pc?

它是某些 C++ 特定功能吗?

我正在研究这个的原因是我在这一行从 Valgrind 得到一个错误:

==29454== Conditional jump or move depends on uninitialised value(s)
==29454==    at 0x5AB9E76: tesseract::Tesseract::rejection_passes(PAGE_RES*, ETEXT_DESC*, TBOX const*, char const*) (control.cpp:665)

最佳答案

It seems we are comparing a short divided by an int casted to float with a variable declaration, namely tesseract::DoubleParam quality_outline_pc?

我不知道你所说的“与变量声明比较”是什么意思。您正在将计算值与变量值进行比较。 DoubleParam类型可转换为 double,使用其转换运算符 operator double()。除法的结果将从 float 转换为 double 以匹配,并将比较这两个值。

Is it some C++ specific feature?

我也不知道你说的是什么意思。所有这些操作(类型转换、除法和比较)都是 C++ 语言的一部分。

The reason I'm looking into this is that I get an error from Valgrind

这意味着其中一个变量还没有被初始化。

关于c++ - 无法理解 float 和对象实例化之间比较的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29650831/

相关文章:

c++ - 计算二维平面中黑白形状的大小

c++ - 将析构函数中的关键函数放在 "enhance atomicity"中?

c++ - shmat 返回的指针指向地址空间的末尾,这会导致段错误

c - 这个函数中未初始化的值在哪里?

ruby-on-rails - Mac OS X 上的 Tesseract-ocr gem 问题

python - 在 python 中使用 opencv 检测低对比度图像中的正方形,以便通过 tesseract 读取

python - 使用 tesseract 和 OpenCV 对平面图屏幕截图进行 OCR

c++ - 组播波形发生器

c - Valgrind/内存错误

c++ - 如何为我的程序修复这个小的内存泄漏?