PVS 스튜디오 6.17에서 구성 할 수있다 (윈도우 7, 64 비트는 VS2017는 C++ - 03) 코드를거짓 긍정 경고 PVS Studio : V821 성능 저하. '우'변수가 낮은 수준 범위
#include <stack>
#include <string>
#include <vector>
bool fred(const std::string &x)
{
return x == "ab";
}
std::vector<std::string> bar(std::stack<std::string> & s)
{
std::vector<std::string> v;
const std::string rhs(s.top()); // V821 Decreased perfomance. The 'rhs' variable can be constructed in a lower level scope.
s.pop();
const std::string lhs(s.top());
s.pop();
if (fred(lhs))
{
v.push_back(rhs);
}
return v;
}
경고에서 감소 다음에 잘못된 경고를 보인다 PVS 스튜디오는
V821 성능이 저하되었습니다. 'rhs'변수는 하위 수준 범위에서 구성 할 수 있습니다.
s
은 std::stack
유형이므로 해당 알고리즘은 rhs
요소가 스택에서 튀어 나와야하므로 PVS-Studio가 잘못된 것처럼 보입니다. 내가 뭐 놓친 거 없니? 그런데
perfomance->performance
참조
어쩌면 PVS가'rhs'에 대해서 말하는 것은'fred (lhs)'가 true 일 때만 사용됩니다. 비록 당신이 그것을 바꿀 수 없다하더라도 (당신은 정말로 가능하지 않습니까?) 저는 그것을 진정한 긍정적 인 것으로 생각할 것입니다. – user463035818
나는 이것으로부터 어떤 종류의 대답을 얻기를 희망하는지 모르겠습니다. 잠재적으로 코드를 약간 재정렬 할 수 있으며 경고가 변경 될 수 있지만 결국에는 문제가되지 않습니다. 그들의 문서조차 오 탐율에 대해 이야기합니다. https://www.viva64.com/en/w/V821/ –
당신은 std :: move rhs와 lhs를 즉시 사용할 수 있기 때문에 이것을 할 수 있습니다. 복사본을 피할거야. –