首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在声明它的例程之外改变一个局部类型的常量?

有没有办法在声明它的例程之外改变一个局部类型的常量?
EN

Stack Overflow用户
提问于 2012-03-11 21:18:52
回答 1查看 189关注 0票数 7

请注意,这只是一个思想实验。

我知道全局(静态)变量是不好的,而且在任何情况下打破作用域都不是一个好主意。

考虑以下代码:

代码语言:javascript
复制
function IsItChanged: integer;
const
  CanIBeChanged: integer = 0;
begin
  Result:= CanIBeChanged; 
end;

假设启用了可写常量,我如何在声明CanIBeChanged的函数作用域之外更改它的值?

附言:没有,我不打算使用这段代码,这只是一个问题,出于兴趣。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-11 22:05:07

好吧,这只能通过泄漏指向可写类型常量的指针来完成。下面是一个示例,它采用了一种相当复杂的方法来打印野兽的编号:

代码语言:javascript
复制
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的作用域仅限于定义它的函数,因此上面概述的方法是唯一可能的解决方案。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9655281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档