2015-11-25 5 views
3

я получил следующее предупреждение:Что такое значение для мусора лязг проверки

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; 
} 

Я не понимаю, в чем проблема!

ответ

1

Это выглядит как bug 22833, который закреплен в багажнике:

Давая параметру захвата лямбда явное значение (новая функция в C++ 14) приводит к тому, анализатору полагать, что значение не определено.

В качестве обходного пути, вы можете попробовать водружают Init-захват вне лямбда:

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; 
    });