Joh*_*ica 7 delphi scope static-variables
请注意,这只是一个思想实验.
我知道全局(静态)变量很糟糕,在任何情况下破坏范围都是一个坏主意.
请考虑以下代码:
function IsItChanged: integer;
const
CanIBeChanged: integer = 0;
begin
Result:= CanIBeChanged;
end;
Run Code Online (Sandbox Code Playgroud)
假设已启用可写常量,如何更改CanIBeChanged
其声明的函数范围之外的值?
PS不,我不打算永远使用这个代码,这只是一个有趣的问题.
Dav*_*nan 12
好吧,它只能通过泄漏指向可写入类型常量的指针来完成.这是一个以相当复杂的方式打印野兽数量的例子:
program NaughtyNaughtyVeryNaughty;{$J+}
{$APPTYPE CONSOLE}
procedure Test(out MyPrivatesExposed: PInteger);
const
I: Integer=665;
begin
MyPrivatesExposed := @I;
inc(I);
end;
var
I: PInteger;
begin
Test(I);
Writeln(I^);
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
由于局部范围仅限于定义它的函数,因此上述方法是唯一可行的解决方案.
归档时间: |
|
查看次数: |
186 次 |
最近记录: |