请注意,这只是一个思想实验。
我知道全局(静态)变量是不好的,而且在任何情况下打破作用域都不是一个好主意。
考虑以下代码:
function IsItChanged: integer;
const
CanIBeChanged: integer = 0;
begin
Result:= CanIBeChanged;
end;假设启用了可写常量,我如何在声明CanIBeChanged的函数作用域之外更改它的值?
附言:没有,我不打算使用这段代码,这只是一个问题,出于兴趣。
发布于 2012-03-11 22:05:07
好吧,这只能通过泄漏指向可写类型常量的指针来完成。下面是一个示例,它采用了一种相当复杂的方法来打印野兽的编号:
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.由于local的作用域仅限于定义它的函数,因此上面概述的方法是唯一可能的解决方案。
https://stackoverflow.com/questions/9655281
复制相似问题