(delphi11最新学习资料) Object Pascal 学习笔记---第4章第2.3节(常量参数)

4.2.3 常量参数

​ 作为引用参数的替代,您可以使用const参数。由于您无法在例程内为const参数赋予新值,因此编译器可以优化参数传递。编译器可以选择与引用参数相似的方法(或者在C++术语中是const引用),但行为类似于值参数,因为无法通过函数修改原始值。

​ 实际上,如果尝试编译以下代码(在ParamsTest项目中可用,但被注释掉),系统将报出错误:

function DoubleIt(const Value: Integer): Integer;
begin
  Value := Value * 2; // 编译错误
  Result := Value;
end;

​ 您将看到的错误消息可能不太直观,因为它说:

[dcc32 Error] E2064 Left side cannot be assigned to

​ 对于字符串来说常量参数非常常见,因为在这种情况下,编译器可以禁用引用计数机制以获得轻微的优化。这是使用常量参数的最常见原因,这种特性对序数和标量类型来说意义有限。常量参数也不常用于对象,因为在Object Pascal中,当将对象作为常量参数传递时,保持不变的是对象引用,而不是对象本身。换句话说,编译器不允许您将新对象赋值给常量参数,但它允许调用对象的任何可能更改其数据的方法。

注解: 传递常量参数的另一种鲜为人知的方法是为其添加ref属性,如“const [ref]”。这个属性强制编译器通过引用传递常量参数,而默认情况下,编译器将根据参数的大小选择通过值传递还是通过引用传递的方式,结果因目标CPU和平台而异。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值