我们开始在Windows上使用Coverity扫描跨平台代码库。在Windows上,我们选择了五个 Missing move assignment operator (MISSING_MOVE_ASSIGNMENT)
结果。在Unix,Linux或OS X上没有这些发现。
我们是一个与C ++ 03兼容的C ++库 - C ++ 17。到目前为止,我们只留下了移动任务,因为Jonathan Wakely建议我们这样做(来自GCC邮件列表上的How to determine when a C++11 move is synthesized?):
所以你不应该关心[关于提供行动]。如果搬家可能不安全,那就不会发生。如果移动是安全的,那么可能会发生,但在这些情况下,你可能最好让编译器生成正确的移动而不是干扰。
我想知道Coverity用于该发现的标准。 Coverity如何确定我们有机会改进编译器生成的一个?
(我并不挑战这一发现。我试图更好地理解它,理解为什么扫描服务认为我们可以做得更好,并了解机会所处的位置。并且&em>& #34;更好的工作" 可能只适用于Windows)。
此处one of the findings。其他可在Coverity Scan网站上找到。
CID undefined (#1 of 1): Missing move assignment operator (MISSING_MOVE_ASSIGNMENT)
missing_move_assignment: Class CryptoPP::EC2NPoint may benefit from adding a move assignment
operator. See other events which show the copy assignment operator being applied to rvalue(s),
where a move assignment may be faster.
22 struct CRYPTOPP_DLL EC2NPoint
23 {
24 virtual ~EC2NPoint() {}
25
26 EC2NPoint() : identity(true) {}
27 EC2NPoint(const PolynomialMod2 &x, const PolynomialMod2 &y)
28 : identity(false), x(x), y(y) {}
30
31 bool operator==(const EC2NPoint &t) const
31 {return (identity && t.identity) || (!identity && !t.identity && x==t.x && y==t.y);}
32 bool operator< (const EC2NPoint &t) const
33 {return identity ? !t.identity : (!t.identity && (x<t.x || (x==t.x && y<t.y)));}
34
35 bool identity;
36 PolynomialMod2 x, y;
37 };