• 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

  • 相关阅读:
    mysql 查询结果中增加序号
    mycat配置文件备份
    解决Python安装模块出错 ImportError: No module named setuptools
    sed 详解【转】
    CentOS下配置SFTP操作日志
    解决redis aof文件过大的问题
    mysql主从复制搭建中几种log和pos详解
    Linux下使用命令行配置IPMI
    Zabbix笔记
    zabbix_agentd.conf配置文件详解
  • 原文地址:https://www.cnblogs.com/findumars/p/7230786.html
Copyright © 2020-2023  润新知