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和平台而异。