gpt4 book ai didi

delphi - Delphi 中通过引用传递 const

转载 作者:行者123 更新时间:2023-12-03 15:44:46 25 4
gpt4 key购买 nike

XE2 中是否有与 Delpi 等效的 C++ 引用传递常量? C++ 代码为:

void passByRef(const MyClass& param);

最佳答案

void passByRef(const MyClass& param);

这里的const表示您不能修改引用引用的值。

假设MyClass 映射到Delphi 类,则没有任何等效项。在 Delphi 中,类是引用类型。您可以像这样传递 const 引用:

procedure Foo(const param: TMyClass);

这意味着该函数不允许修改param的值。

param := ...; // this would result in a compilation error

但是该方法允许改变 param 引用的对象。

param.DataMember := ...; // compiles
param.SomeProperty := ...; // compiles
param.MutateObject(); // compiles

Delphi 只是缺少 C++ 中可用的 const 的这一方面。

如果您映射到记录而不是类,情况会有所不同。然后你就会:

procedure Foo(const param: TRecord);

同样,您无法分配给 param,但由于这是值类型,因此您也无法直接修改 param 的任何数据成员。

param.DataMember := ...; // does not compile, for TRecord being a record

但是编译器不会阻止您在此类记录上调用改变内部状态的方法。在我看来,这是一种疏忽,但考虑到语言设计者可以使用的工具,他们很难避免这种情况。同样,C++ 的设计在这方面更加丰富,允许更细粒度的常量规范。

出于这个原因,我强烈建议您考虑不要使用会改变记录状态的实例方法来编写记录类型。

关于delphi - Delphi 中通过引用传递 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41042928/

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