Delphi 有没有一种方法可以将本地类型的常量从其';什么是申报的?

Delphi 有没有一种方法可以将本地类型的常量从其';什么是申报的?,delphi,scope,static-variables,Delphi,Scope,Static Variables,请注意,这只是一个思维实验。 我知道全局(静态)变量是不好的,在任何情况下,破坏作用域都是个坏主意 考虑以下代码: function IsItChanged: integer; const CanIBeChanged: integer = 0; begin Result:= CanIBeChanged; end; 假设已启用可写常量,如何从声明它的函数范围之外更改CanIBeChanged的值 PS不,我不打算使用这段代码。这只是一个出于兴趣的问题。好吧,只有通过泄漏指向可写类型常量

请注意,这只是一个思维实验。
我知道全局(静态)变量是不好的,在任何情况下,破坏作用域都是个坏主意

考虑以下代码:

function IsItChanged: integer;
const
  CanIBeChanged: integer = 0;
begin
  Result:= CanIBeChanged; 
end;
假设已启用可写常量,如何从声明它的函数范围之外更改
CanIBeChanged
的值


PS不,我不打算使用这段代码。这只是一个出于兴趣的问题。

好吧,只有通过泄漏指向可写类型常量的指针才能完成。下面是一个以相当复杂的方式打印野兽编号的示例:

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.

由于本地可写常量的作用域仅限于其定义的函数,因此上述方法是唯一可能的解决方案。

本地可写常量的生存时间是多少?直到代码离开这个方法(像一个普通的局部变量),或者它是共享的?在第一种情况下,您的代码有未定义的行为。@CodeInChaos这是一个非常奇怪的构造。它们实际上是全局变量。相当于具有静态存储的C局部变量。我模糊地记得类似的内容,但不再确定。如果将
inc(I)
移动到
inc(I^)试验@AndriyM,有一件事是揭露他们。。。但事实上,把它们包括进来,是一种更大的顽皮。