相关疑难解决方法(0)

Delphi中"结果"的默认值是多少?

函数的Result变量是否有任何保证的默认值,如0,''或nil?或者结果总是在使用前初始化?

我有一个函数返回一个这样的字符串:

function Foo(): String
begin
    while {...} do
    Result := Result + 'boingbumtschak';
end;
Run Code Online (Sandbox Code Playgroud)

它运行正常,但现在我得到一些字符串,其中包含之前调用该函数的内容.当我Result := ''在开头添加一个,它没关系.我什么时候应该初始化Result变量,什么时候不需要?(字符串,基元,类实例(零))

delphi

13
推荐指数
2
解决办法
5193
查看次数

我是否需要在初始化时将setLength设置为动态数组?

type Tmyclass = class(TObject)
  somearray: array of TSometype
  FBool: Boolean;
  Fint: Integer;
  Fstr: string;
  constructor Create;
  destructor Destroy; override;
end;

implementation

constructor Tmyclass.Create;
begin
  inherited;
  SetLength(somearray,0); //is this needed?
end;

destructor TmyClass.Destroy;
begin
  SetLength(somearray,0); //this IS needed!
  inherited;
end;
Run Code Online (Sandbox Code Playgroud)

还有什么类型在创建时初始化?例如我在课堂上宣布的内容.FBool被保证是假的吗?是FInt保证是0吗?是Fstr保证是''?

当地情况怎么样?只有字符串?

我使用Delphi XE.

delphi delphi-xe

3
推荐指数
4
解决办法
5173
查看次数

作为该函数的结果的记录的奇怪行为

示例代码:

unit Main;

interface

uses
  Winapi.Windows, System.SysUtils, Vcl.Forms;

type

  TSomeRec = record
    SomeData: Integer;
    SomePtr: Pointer;

    procedure Reset;
    class operator Implicit(const SomeData: Integer): TSomeRec;
  end;

  TMainForm = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    FSomeRec: TSomeRec;
  end;

var
  MainForm: TMainForm;
  GSomeRec: TSomeRec;

implementation

{$R *.dfm}

function SomeFunc(Value: Integer): TSomeRec;
begin
  OutputDebugString(PWideChar(Result.SomeData.ToString + ' : ' + Integer(Result.SomePtr).ToString));
  Result.SomeData := Value;
end;

{ TSomeRec }

procedure TSomeRec.Reset;
begin
  SomeData := 5;
  SomePtr  := nil;
end;

class operator TSomeRec.Implicit(const SomeData: Integer): TSomeRec;
begin
  OutputDebugString(PWideChar(Result.SomeData.ToString …
Run Code Online (Sandbox Code Playgroud)

delphi

2
推荐指数
1
解决办法
531
查看次数

标签 统计

delphi ×3

delphi-xe ×1