zoukankan      html  css  js  c++  java
  • Delphi中返回类型为string的函数的一个陷阱(不是很懂)

    如果类的一个成员函数的返回值是string类型,需要注意一个问题

    其返回值可能是错误的


    例如函数的实现如下


    function GetString( s: string ): string;
    begin
      Result := Result + s;
    end;


    调用方式如下:

    procedure test();
    var
      i: Integer;
      s: string;
    begin
        s := '';
        s := GetString( IntToStr( 1 ) );
        s := GetString( IntToStr( 2 ) );
    end;

    那么s的值是什么呢?

    答案是“12”,不是“2”

    原因是:第一次调用GetString方法,把s和GetString的result指向了同一个地址,第二次调用GetString方法,result指向的仍然是之前的地址,其值仍然为'1',所以结果是'1' + '2' = '12'

    当然其中一个问题就是这个函数的返回值没有初始化,当返回值的类型为string时,而delphi并不会进行警告或提示

    所以我们一定要养成良好的习惯,如上述实现不应该在初始化result前使用它

    ==============================================

    另一个例子

    function GetNumberType( n: Integer ): string;
    begin
      if n mod 2 = 0 then
        Result := '偶数';
    end;  

    procedure TF_Main.btnTestClick(Sender: TObject);
    var
      i: Integer;
    begin
    //
      for i := 1 to 4 do
        AddMsg( '结果:' + GetNumberType( i ) );
    end;
    结果是:

    结果:

    结果:偶数

    结果:偶数

    结果:偶数

    http://blog.csdn.net/youthon/article/details/4298524

  • 相关阅读:
    div标签和span标签的简单区别
    方法重载的好处及区别
    异步计算工具
    设置"用于统计的冗余字段"要谨慎
    如何建立索引
    NFS,Memcached,Tokyo tyrant实现session共享性能测试
    mysql cache功能小记
    PHP程序员也要学会使用“异常”
    xdebug: var_dump函数设置
    用shell写个简单的log监控程序
  • 原文地址:https://www.cnblogs.com/findumars/p/7230786.html
Copyright © 2011-2022 走看看