PVS工作室6.17來構造(Windows 7中,64位,VS2017,C++ - 03)似乎給一個錯誤警告上以下降爲代碼錯誤肯定警告PVS Studio:V821性能下降。在「RHS」變量可以在一個較低的水平範圍
#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
-element,所以它看起來像PVS-Studio是錯誤的。我錯過了什麼?
順便說一句:
有一個在PVS工作室消息一個錯字:
perfomance->performance
參考
也許PVS正在討論'rhs'開始只有在'fred(lhs)'爲真時才使用。即使你不能改變(你真的不能嗎?)我會認爲這是一個真正的積極的 – user463035818
我不確定你希望從中得到什麼樣的答案。您可能會稍微重新排列代碼,並可能會更改警告,但最終可能並不重要。甚至他們的文件談判的誤報。 https://www.viva64.com/en/w/V821/ –
你可以std ::移動rhs和lhs,因爲你之後立即彈出它們。它會避免複製。 –