delphi – 未记录的内在例程

前端之家收集整理的这篇文章主要介绍了delphi – 未记录的内在例程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Delphi有这个列表: Delphi Intrinsic Routines
但是这个列表是不完整的.

哪些无证的内在功能存在,因为他们的目的何时何地?

@H_404_5@

解决方法

我知道以下无证件的内在功能.

德尔福2007:hereHallvard’s blog

默认

function Default(T: Typeidentifier): value of T;

返回类型标识符T的零表示.

下面介绍了XE7中介绍的内在的in the XE7 beta blogStefan Glienke

IsManagedType

function IsManagedType(T: TypeIdentifier): Boolean;

如果T是接口,字符串或动态数组,或包含此类记录的记录,则为真.包含托管类型的类将返回false.

HasWeakRef

function HasWeakRef(T: TypeIdentifier): Boolean;

不确定它是做什么的,它只能在NextGen编译器中有用.

GetTypeKind

function GetTypeKind(T: TypeIdentifier): TTypeKind;

与PTypeInfo(System.TypeInfo(T))^.类似,但是因为它是一个编译器,内在的函数在compiletime中解析,并且评估为false的条件代码将被编译器剥离.

IsConstValue

function IsConstValue(const Value): Boolean;

如果Value是常数,则为True,否则为false.
这有助于编译器消除死代码,因为在编译时对该函数进行了评估.
这只适用于内联函数,它允许较短的生成代码.

所属类别

function TypeInfo(T: typeindentifier): PTypeInfo;

这个函数不是没有这样的文档,但是没有证明的是XE7是一个内在函数.
这意味着如果TypeInfo(T)= TypeInfo(byte)then …不会生成任何代码,如果T不是一个字节,并且测试将在compiletime解析,那么代码段.
但是,编译时解决方案仅在通用例程中工作,并且仅在执行if(TypeInfo(T)= TypeInfo(sometype))测试时才起作用.
测试如果TypeInfo(byte)= TypeInfo(smallint)然后不会被消除,即使它总是评估为false.
也不会使用TypeInfo(T).

退货地址

在returnaddress构造中使用以下引发异常.

function ReturnAddress(Expression): pointer;          //Delphi ?
function AddressOfReturnAddress(Expression): pointer; //Delphi ?

据我所知,你不能直接从用户代码调用它们.

IsConstValue的示例

type
   TFlavor = (Tasty,Nasty);
   TIntegerHelper = record helper for integer
     function GetSomething(Flavor: TFlavor): TPoint; inline;
   private
     function GetTastyPoint: TPoint;
     function GetNastyPoint: TPoint;
   end;
 
 function TIntegerHelper.GetSomething(Flavor: TFlavor): TPoint;
 begin
   if IsConstValue(Flavor) then begin
     if Flavor = Tasty then Result:= Self.GetTastyPoint
     else Result:= Self.GetNastyPoint;
   end else begin
     Assert(1=0,'This function can only be called with constant parameters');
   end;
 end; 

procedure Test;
var
  pt: TPoint;
begin
  pt:= 100000.GetSomething(Tasty); 

调用将被转换为GetTastyPoint,并且if / then序列将被链接器消除.

@H_404_5@ @H_404_5@

猜你在找的Delphi相关文章