zoukankan      html  css  js  c++  java
  • 关于常量参数

    摘自肯图的书

    Constant parameters
    While it works as expected for most types, for class and dynamic array parameters, const doesn’t actually prevent the
    source object or array from being modified:
    uses System.SysUtils;
    procedure NotSoConst(const Arr: TArray<string>;
    const Obj: TStringBuilder);
    begin
    Arr[0] := 'Er, what''s up with this?';
    Obj.Append('Funny sort of "const"!');
    end;
    The reason for this behaviour is that classes and dynamic arrays are pure reference types. Because of that, using const
    only prevents you from from changing the reference, not the data it points to. You might then expect strings to exhibit
    similar behaviour, given they are reference types too. However, the compiler implements quasi-value type semantics for
    strings:
    type
    TMyStaticArray = array[0..4] of string;
    TMyRec = record
    X, Y: Integer;
    end;
    procedure MuchBetter(const Arr: TMyStaticArray;const R: TMyRec; const S: string; const V: Variant);
    begin
    Arr[0] := 'Won''t compile';
    R.X := 100; //won't compile
    S[1] := '!'; //won't compile
    S := 'Won''t compile either';
    V := 'Nor will this';
    end;
    While amongst the reference types const only makes strings actually constant, it is still a good idea to use, assuming the
    routine isn’t intending to change the values passed. In the case of dynamic arrays and other managed types, it relieves
    the compiler from having to increment the argument’s reference count on entry and decrement it on exit; and for value
    types whose instances are more than a few bytes, const will cause the compiler to pass internally just a pointer to the
    source data rather than a copy of it, which is more efficient.

    我记得论坛有一次这方面的热烈讨论

  • 相关阅读:
    第一章ASP.NET SignalR简介
    第六章SignalR的服务器广播
    第五章SignalR的实时高频通讯
    第四章SignalR自托管主机
    第三章SignalR在线聊天例子
    第二章SignalR所支持的平台
    DevExpress ASPxHtmlEditor控件格式化并导出Word (修复中文字体导出丢失)
    改进的简单Tooltips显示
    C# WebForm 使用NPOI 2 生成简单的word文档(.docx)
    一些自用的小工具,分享给非程序猿们
  • 原文地址:https://www.cnblogs.com/jankerxp/p/7774043.html
Copyright © 2011-2022 走看看