gpt4 book ai didi

delphi - `type` 关键字在类型定义中使用时实际意味着什么?

转载 作者:行者123 更新时间:2023-12-03 14:45:26 25 4
gpt4 key购买 nike

我最近阅读了VCL源代码的一些行,并找到了 TCaption 的定义类型:

TCaption = type string;

我一直以为这只是 string 的另一个名字。类型,我认为它的定义如下:

TCaption = string;

所以,我寻找了 documentation关于type关键字,我发现了这个:

  1. type Name = Existing type
    Refers to an existing type, such as string by a new Name.

  2. type Name = type Existing type
    This has the same effect as above, but ensures that at run time, variables of this type are identified by their new type name, rather than the existing type name.

读完后,我仍然很困惑,我不明白什么“...确保在运行时,这种类型的变量由它们的新类型名称标识...” 实际上意味着。

有人可以解释一下吗?

最佳答案

考虑以下代码,并注意过程 Check() 有一个 var 参数:

type
Ta = string; // type alias
Tb = type string; // compatible but distinct new type

procedure Check(var s: string);
begin
ShowMessage(s);
end;

procedure TMain.Button2Click(Sender: TObject);
var
a: Ta;
b: Tb;
begin
a := 'string of type Ta,';
b := 'string of type Tb.';
Check(a);
Check(b);
end;

Check(b) 导致编译器错误:E2033 实际和形式 var 参数的类型必须相同

在上面,类型 Tbstring 兼容,因为您可以 f.前任。分配 a := b,但不同之处在于 类型标识符(在底层)具有不同的值,因此不接受作为 Check 的参数(var s:字符串)

关于delphi - `type` 关键字在类型定义中使用时实际意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45773897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com