可能错误使用赋值运算符而不是比较运算符的位置,=Vs== 我正在做一个C++编译器项目,在这里我需要在赋值运算符可以被错误地使用的地方标记警告,而不是比较操作符。例如 在if语句中进行比较时,将变量a检查为10有时我们错误地键入if(a=10),这将导致if语句总是true,而我只想在a为10时为true。我能想到的一些例子是: if(var=a),逻辑上应该是if(var=a) while(var=a) for(;var=a;) do{}while(var=a) var=a?“一些XYZ”:“一些ABC”

可能错误使用赋值运算符而不是比较运算符的位置,=Vs== 我正在做一个C++编译器项目,在这里我需要在赋值运算符可以被错误地使用的地方标记警告,而不是比较操作符。例如 在if语句中进行比较时,将变量a检查为10有时我们错误地键入if(a=10),这将导致if语句总是true,而我只想在a为10时为true。我能想到的一些例子是: if(var=a),逻辑上应该是if(var=a) while(var=a) for(;var=a;) do{}while(var=a) var=a?“一些XYZ”:“一些ABC”,c++,compiler-errors,compilation,compiler-warnings,C++,Compiler Errors,Compilation,Compiler Warnings,您能否帮助我了解更多可能发生此逻辑错误的情况,即用户本应使用=而错误地使用了=?我最近遇到的一个令人讨厌的错误是断言(A=b)。之所以如此令人讨厌,是因为断言中所述的假设是两者已经相等,因此该声明很可能是无害的。但如果它们不是,这会让您陷入一个糟糕的调试会话,因为调试版本在功能上与发布版本不同。反过来如何,使用比较而不是赋值?我已经看过好几次了。至于你的“问题”,一些编译器可以检测到这一点并发出警告。还有很多很好的静态分析工具可以检测这些问题(还有更多),如果我是你的话,我就不会浪费时间了。有时

您能否帮助我了解更多可能发生此逻辑错误的情况,即用户本应使用
=
而错误地使用了
=

我最近遇到的一个令人讨厌的错误是
断言(A=b)
。之所以如此令人讨厌,是因为断言中所述的假设是两者已经相等,因此该声明很可能是无害的。但如果它们不是,这会让您陷入一个糟糕的调试会话,因为调试版本在功能上与发布版本不同。

反过来如何,使用比较而不是赋值?我已经看过好几次了。至于你的“问题”,一些编译器可以检测到这一点并发出警告。还有很多很好的静态分析工具可以检测这些问题(还有更多),如果我是你的话,我就不会浪费时间了。有时,您希望将赋值作为循环条件,例如字符串复制习惯用法。有时候,当你通常写作业时,你需要一个比较。我认为,人们只需要将这种差异融入其中。编写一个静态分析工具是一个不错的项目,但如果你想做一些伟大的事情,可以选择表明这是有意的。仅仅因为这种用法对你来说可能是一个错误,并不意味着这是一个错误的时期。我的意思是,想想拔示巴告诉你的吧,不,请选择一个。有一个微妙的区别。<代码> A==B<代码>的结果类型是C中的 int <代码>,例如C++中的 Boo.<代码>,这是纯EVLLWELL,使用<代码> AsStRe>代码>总是错误的。