C++常见错误汇总

不得不吐槽 C++ 不是很友好

常见问题1.

误用 unsigned 类型造成数组越界检查失败

#include <vector>
#define ARR std::vector<double>

double normalize( const ARR & arrx, const ARR & arry, size_t indref){
    size_t indl = indref;
    double valtmp = arry[indl];
    double sum = 0;
    while ( indl >= 0 && valtmp > 1.0e-5)
        sum += arry[indl--];
    return sum;
}

非常丢脸的没有意识到 size_t 值不会小于〇,造成数组越界检查失败。不过 C++ 编译和执行的错误提示实在不友好,一点指示性都没有,花了几个小时才发现问题出在哪里。


问题2.

std::inner_product 计算错误,最近尝试写一下算相关系数的代码,调用标准库中的 std::inner_product 函数来计算相关系数。结果两个完全相同的序列,相关系数竟然和1差很远,但是自己写一小段代码计算的结果就没问题。疑惑好久

然后发现如果最后的单位是整形的话,inner_product 会把两个向量的数据类型当成整形。只有写成 0.0 才会当成浮点型。不知道什么样的脑残逻辑才设计成这样啊。

double r = std::inner_product(arrfrom, arrend, brrfrom, 0.0);

这样写才能得到正确的结果。

Visits: 387

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

*