我可以在编译时检测(并警告)冗余吗?

Tim*_*ell 0 c++

有没有什么方法可以在编译时捕获并警告冗余?

if (abc && abc)
Run Code Online (Sandbox Code Playgroud)

要么

if (def || def)
Run Code Online (Sandbox Code Playgroud)

好吧,这实际上并不是从优化的角度来看 - 我正在考虑更多的代码错误 - 所以当编码器打算写

if (abc && abc)
Run Code Online (Sandbox Code Playgroud)

实际上他们打算写的时候

if (abc && def)
Run Code Online (Sandbox Code Playgroud)

编译器将默默地优化错误,而我实际上想知道是否可以让编译器警告我,如果发生这种情况,万一它在那里是错误的!

Tes*_*rex 5

首先,技术上不是重言式,而是冗余.例如,重言式意味着它总是如此

if (abc || !abc)
Run Code Online (Sandbox Code Playgroud)

为了捕捉它们 - 你不需要做任何事情,任何值得它的编译器都会为你优化它.但我确实希望你实际上没有这样的代码.

  • 如果它是一个基本类型,它可以被优化掉,但是如果abc是一个定义了布尔或数字转换运算符的对象,那么编译器不应该优化它,因为如果调用两次,则无法保证转换将返回相同的值. (2认同)