每个片段的编译器行为有何不同?

Hot*_*ead 3 c++ comparison

请考虑以下代码:

1.

uint16 a = 0x0001;

if(a < 0x0002)
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

2.

uint16 a = 0x0001;

if(a < uint16(0x0002))
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

3.

uint16 a = 0x0001;

if(a < static_cast<uint16>(0x0002))
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

4.

uint16 a = 0x0001;
uint16 b = 0x0002;

if(a < b)
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

backgorund中的编译器做了什么以及上面测试的最佳(和正确)方法是什么?

抱歉,但我找不到更好的标题:)

编辑:

值0x0001和0x0002仅是示例.可以改为任何2字节值.

先感谢您!

Jas*_*ams 6

最后一个示例是最好的代码,因为您不应该在代码中使用"魔术常量".

事实上,最好的方法是使b const,(编辑)和使用有意义的名称:

uint16 currentSpeed = 0x0001; 
const uint16 cMaxSpeed = 0x0002; 

if (currentSpeed < cMaxSpeed) 
{ 
    // do something 
} 
Run Code Online (Sandbox Code Playgroud)

除此之外,你的例子之间"在引擎盖下"几乎没有什么区别.

  • 显然,名字b实际上描述了它的含义. (3认同)