Eclipse-CDT为什么说自我赋值是错误的?

5 c++ eclipse-cdt googletest

我正在使用谷歌测试在eclipse g ++中进行单元测试.当我尝试在我设计的课程中对自我分配检查进行单元测试时,我收到了错误.

像往常一样,重载是非常标准的,看起来像这样:

CLASS operator=(const CLASS& rhs);
Run Code Online (Sandbox Code Playgroud)

当我试图在测试中有这个:

CLASS A;
A = A;   //compile error here, saying self assignment to itself. have no clue why, though.
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种特定的自我分配测试方法.谢谢.

仅供参考,以下是错误的快照

在此输入图像描述

Mik*_*han 15

自我指定声明x = x; 当然,这不是C++中的错误,并且您在此处没有任何编译器错误.

如果运行项目的构建并查看"IDE 控制台" 选项卡中的输出,而不是" 问题"选项卡,则会看到编译器未报告此类错误.除非它确实报告了一些错误,否则您的项目将成功构建.

如果查看" 问题" 选项卡下报告的自我分配错误,您将看到其类型代码分析问题,而不是C/C++问题.这意味着问题由Eclipse CDT Code Analyzer(Codan)报告,而不是由编译器报告.

Codan将自我分配报告为错误,因为自我分配几乎总是编程错误.但在你的情况下,这是故意的.

你有两个选择:

  • 1).忽略代码分析错误
  • 2).更改项目的代码分析设置,以便不报告此错误.

要做2):

  • 导航属性 - > C/C++常规 - > 代码分析
  • 启用使用项目设置
  • 或者: -
    • 禁用问题分配给自己,或
    • 选择Assignment to self,然后导航Customize Selected ... - > Preferences 并将问题的严重性从Error更改为WarningInfo.
  • OK out of project Properties

  • @STNYU是的.重新阅读答案并注意如何将Codan错误转换为*警告*或*info*诊断.并重申主要观点:无论Codan说什么,编译器仍然会为您编译自我分配. (3认同)