Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi '的默认值是什么;结果';在德尔菲?_Delphi - Fatal编程技术网

Delphi '的默认值是什么;结果';在德尔菲?

Delphi '的默认值是什么;结果';在德尔菲?,delphi,Delphi,函数的结果变量是否有任何保证的默认值,如0、0或nil?还是应该在使用前对结果进行初始化 我有一个函数返回如下字符串: function Foo(): String begin while {...} do Result := Result + 'boingbumtschak'; end; 它工作得很好,但现在我得到了一些字符串,其中包含以前调用该函数时的内容。当我在开头添加一个结果:=''时,它是正常的。何时应该初始化结果变量,何时不必初始化?(字符串、原语、类实例(nil)

函数的结果变量是否有任何保证的默认值,如0、0或nil?还是应该在使用前对结果进行初始化

我有一个函数返回如下字符串:

function Foo(): String
begin
    while {...} do
    Result := Result + 'boingbumtschak';
end;

它工作得很好,但现在我得到了一些字符串,其中包含以前调用该函数时的内容。当我在开头添加一个
结果:=''
时,它是正常的。何时应该初始化
结果
变量,何时不必初始化?(字符串、原语、类实例(nil))

类型为
string
的函数返回值实际上被编译器视为隐式var参数。当函数开始执行时,
Result
变量包含局部变量中的任何内容,返回值随后将分配给该局部变量

因此,您应该始终初始化函数返回值。此建议不仅适用于字符串,而且适用于所有数据类型

昨天在这里讨论了堆栈溢出的问题:


我不知道在Delphi中是什么样子,但我总是在对变量执行操作之前将变量初始化为一个正常值(即使该正常值为
null
,在某些情况下很可能是这样)。很多时候它是不需要的,但在这些情况下,如果它愿意,我依靠编译器或JITter来优化赋值,而不是依赖于可能未记录的语言语义或编译器实现细节。也许是我的C语言背景,它本身并不能保证初始值,但为了得到更清晰的代码,我觉得花额外的一行代码(最多)是值得的。通过在开始处理变量之前显式赋值,可以与读取代码的人建立明确的契约;他们可以相信,他们关于变量起始值的想法实际上是成立的

但是,关于这个问题;
Result
不应该是作用域中的局部函数吗?如果这样一个变量(尽管很特殊)保留了以前调用函数时的值,我会非常惊讶

如果函数退出而没有 将值赋给结果或 函数名,然后是函数的 返回值未定义


参见>>

单个最难看的事情是编译器既不抱怨单元化的结果,也不把它当作输出的
来处理和自动初始化。相反,它更像是一种
var
,因此给了你做蠢事的能力(如果我们想这样称呼它的话)™ 你所指的链接最终会链接到巴里·凯利的答案。很难比这更精确。我已经投票决定关闭这家公司。是的,看起来我应该关闭!添加到列表中的另一个原因是我喜欢在使用变量之前总是初始化变量。