我正在使用Delphi Berlin和默认的编译器选项.我正在做一些例程并且有一个案例,其中内联更改答案.
我的代码:
function BitGetFromQWord( const AQWord: UInt64; ABitIdx: UInt64 ): Boolean; //inline; begin Assert( ABitIdx<64 ); Result := ((1 shl ABitIdx) and AQWord)<>0; end; procedure TForm22.Button1Click(Sender: TObject); begin ShowMessage( BoolToStr( BitGetFromQWord( $CBBE02D50FD8262F,31 ),True ) ); end; procedure TForm22.Button2Click(Sender: TObject); var x: Integer; begin x := 31; ShowMessage( BoolToStr( BitGetFromQWord( $CBBE02D50FD8262F,x ),True ) ); end;
对于Button1Click,当添加内联时,答案从False(看起来正确)变为True.我的下表是:
Button2Click只是用变量替换常量,总是产生False.
我正在进行大量的检查和设置,并遇到了这种异常现象.这就是为什么随机十六进制数在这里.
在一个较大的项目中,我也有一个具有相同十六进制数和第31位的情况,根据Debug或Release产生不同的结果.无法将其简化为一个合理的例子.
所以我的问题是为什么内联词会改变答案?
谢谢你的帮助.