什么是垃圾值铛检查

问题描述:

我有以下警告:什么是垃圾值铛检查

test.cpp:14:25: warning: The right operand of '/' is a garbage value 
    return (std::abs(a)/size) > 10; 
         ^~~~~ 

的这段代码:

#include <algorithm> 
#include <complex> 
#include <vector> 
#include <iostream> 

using namespace std; 
double 
pitchDetect(const std::vector<std::complex<double>> &dft, 
           unsigned int samplingRate) noexcept { 
    if (dft.empty()) 
    return 0.0; 
    auto it = find_if(begin(dft), end(dft), 
        [size = dft.size()](const std::complex<double> &a) { 
    return (std::abs(a)/size) > 10; 
    }); 
    return 0.0; 
} 

我不明白是什么问题!

这看起来像bug 22833,其固定在躯干:

给予一个lambda捕获参数的显式值(新特征在C++ 14)使得分析器相信值是未定义的。

作为一种变通方法,你可以尝试冲顶拉姆达外初始化捕获:

auto const size = dft.size(); 
    auto it = find_if(begin(dft), end(dft), 
        [size](const std::complex<double> &a) { 
    return (std::abs(a)/size) > 10; 
    });