Что такое мусор для проверки лягушки

Я получил следующее предупреждение:

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

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

4

Решение

Это выглядит как ошибка 22833, который фиксируется в багажнике:

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

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

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

Другие решения

Других решений пока нет …