请注意,这只是一个思想实验.
我知道全局(静态)变量很糟糕,在任何情况下破坏范围都是一个坏主意.

请考虑以下代码:

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.

由于局部范围仅限于定义它的函数,因此上述方法是唯一可行的解​​决方案.

delphi – 有没有办法从* outside *声明的例程中更改本地类型的常量?的更多相关文章

  1. ios – Swift:如何从不同的swift文件中调用函数

    我的Xcode6beta-2项目中有多个类型为UIViewController的swift文件.我基本上想知道文件A中的一些数据在文件B中使用.我的文件都是UIViewControllers,我创建了一个没有参数的函数,它返回UIViewController_A中的字符串.当我尝试在UIViewController_B中调用所述函数时,intellisense为我填写,但是我必须有一个自动填充为U

  2. ios – 我在哪里可以找到用于创建IPad应用程序的Delphi资源?

    我之前一直在使用Delphi并且一直都是Windows家伙.我的妻子为我的生日买了一台新的iPad,我昨晚第一次使用它.哇!…

  3. 如何从命令行部署OSX或IOS Delphi项目?

    我正在使用像这样的脚本构建我的Delphi应用程序现在我想添加一个选项将应用程序部署到OSX系统修改这样的脚本,那么可以从命令行部署OSX或IOSDelphi项目吗?

  4. Swift 2

    letlabel="Thewidthis"letwidth=94letwidthLabel=label+String练习:删除最后一行中的String,错误提示是什么?你可以一起使用if和let来处理值缺失的情况。switch支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。运行switch中匹配到的子句之后,程序会退出switch语句,并不会继续向下运行,所以不需要在每个子句结尾写break。

  5. 【swift总结】swift语言总览

    变量声明常量的声明字符串声明变量类型转换swift语言中类型没有隐式转换,所有类型只能强制转换在字符串中打印值数组声明与使用字典的声明是使用控制语句for语句switch语句switch语句不需要加break语句,语句执行以后会自动跳出。号的变量声明函数返回一个参数返回多个参数可变参数的函数函数里面可以嵌套函数函数返回一个函数函数是swift里面的一级成员,最大,所以他也可以返回一个函数函数作为参数传递函数是特殊的闭包?

  6. OC代码转Swift代码

    初始化函数对于oc中的[[XXalloc]init]swift不需要alloc也不需要init。直接调用以类名为函数名的工厂方法进行初始化。声明的变量可以不显式声明类型除此之外一般的OC类也可以这样使用访问属性和OC一样,可以使用点(.)操作符访问成员变量调用函数和OC一样,可以使用点(.)操作符调用函数括号内填入参数苹果原文链接

  7. swift——基础数据类型

    Swift也提供了与C和Objective-C类似的基础数据类型,包括整形Int、浮点数Double和Float、布尔类型Bool以及字符串类型String。除了常见的数据类型之外,Swift还集成了Objective-C中所没有的“元组”类型,可以作为一个整体被传递。Swift还提供了可选类型,用来处理一些未知的不存在的值。可选类型是大部分Swift新特性的核心。可选性类型只是Swift作为类型安全的编程语言的一个例子。Swift可以帮助你更快地发现编码中的类型错误。像其他Swift类型一样,这些类型名

  8. Swift2.0初见笔记

    Swift2.01.简单值1.使用let来声明常量,常量无法改变;使用var来声明变量.2.常量或者变量的类型必须和你赋给它们的值一样。后面的东西都会被忽略,并且整个表达式返回nil。在switch里,枚举成员使用缩写.Hearts来引用,因为self的值已经知道是一个suit。SimpleClass的声明不需要标记任何方法因为类中的方法经常会修改类。

  9. Swift - 基础部分

    Swift允许使用max或min访问对应类型的最大值或最小值。Swift提供了一个特殊的整数类型Int,长度与当前平台的原生字长相同。Swift提供了两种有符号浮点数类型:Double表示64位浮点数。Swift允许将元组的元素拆分成单个的常量或变量,接下来即可正常使用这些常量或变量了。if语句以及强制解析Swift允许使用if语句和nil比较来判断一个可选值是否包含值。隐式解析可选类型主要被用在Swift中类的构造过程中。

  10. swift自学注意点

    ",半闭合范围运算符”....”。例如:在swift中,for循环的写法如下:foriin0…5{println}//输出0到5注意在for循环中,不用再重新定义i变量,直接写i即可,且不再需要括号,直接使用forin即可。

随机推荐

  1. delphi – 主窗口按进程名称处理

    DelphiXe,Win7x64如何从进程名称(exe文件的完整路径)获取主窗口句柄,或至少一个类或窗口名称(如果该进程只有一个窗口).例:解决方法我同意Petesh的说法,你需要枚举顶级窗口并检查创建它的进程的模块文件名.为了帮助您开始枚举顶级窗口,这是一个delphi实现.首先,当你回调给你时,你需要一些与EnumWindows方法通信的方式.为此声明一条记录,该记录将保存您要查找的模块的文件

  2. 如何在Delphi中纯粹通过RTTI信息(即不使用任何实际对象实例)获取TObjectList的子项类型?

    我正在使用RTTI实现用于流式传输任意Delphi对象的通用代码,并且为了使其工作(更具体地说,为了使加载部分工作),我需要以某种方式获得TObjectList的子项类型<T>不使用任何实际对象实例的字段.要求不使用任何实际对象实例的明显原因是,在从流加载对象的情况下(仅基于要加载的对象的类类型的知识),我将不会有任何实例在加载完成之前完全可用–我宁愿只能访问相关类的纯RTTI数据.我希望能

  3. inno-setup – Inno Setup – 安装程序背景图片

    图像作为安装程序背景如何用inno5.5.9做到这一点?

  4. inno-setup – Inno Setup – 如何添加多个arc文件进行解压缩?

    使用InnoSetup解压缩弧文件.我希望有可能解压缩多个arc文件以从组件选择中安装文件(例如).但仍然显示所有提取的整体进度条.这可能吗?的回答的修改预备是相同的,参考其他答案.在ExtractArc中,为要提取的每个存档调用AddArchive.

  5. delphi – 如何在DataSet的帮助下在TAdvStringGrid中显示数据库中的BLOB图像

    解决方法CreateBlobStream正在创建一个TStream对象,而不是TMemoryStream.由于您不想将JPG写入数据库,因此应使用bmRead而不是bmReadWrite.我不习惯sqlite,但你必须确保使用合适的二进制日期类型.为了确保存储的图像真的是JPG,您应该编写JPG以进行测试,例如:

  6. inno-setup – 在Inno Setup的Code部分下载程序后运行程序

    如何运行我通过Internet下载的应用程序,在代码部分中使用,并等待该应用程序完成运行.我有,使用InnoTools下载程序,下载这两个文件,我想,在第二个完成下载后运行该下载,或jdk-8u111-windows-x64.exe,然后继续安装.解决方法使用其他下载插件,而不是ITD(请参阅下面的原因).例如,InnoDownloadPlugin.当您包含idp.iss时,它定义了一个全局IDP

  7. progress-bar – Inno Setup Run部分的简单进度页面

    我的安装程序非常简单,它基本上是:>欢迎页面>进展页面>最终页面欢迎页面和最终页面是标准页面.在Progress页面,我正在静默安装一堆其他程序.实际的脚本是在[Run]部分中安装每个程序.问题是酒吧达到100%然后停留在那里.我只能更改消息文本.我想要实现的是使用Pascal脚本显示进度,例如:这样我就可以显示更准确的进度条.这就是我所拥有的:问题是,当我构建安装程序时,它不显示欢迎页面.我做错了什么?

  8. delphi – 如何使“显示/隐藏桌面图标”设置生效?

    下面的代码调用SHGetSetSettings函数来隐藏桌面图标但它只是从视图菜单中取消选中“显示桌面图标”.我打电话给SHChangeNotify;更新桌面,但这不起作用?解决方法isa,要刷新桌面,您可以将F5键发送到progman窗口隐藏桌面图标的另一种方法是再次显示

  9. inno-setup – Inno Setup – 避免显示子安装程序的文件名

    我试图使用InnoSetup–Howtohidecertainfilenameswhileinstalling?(FilenameLabel)的想法Theonlysuresolutionistoavoidinstallingthefiles,youdonotwanttoshow,usingthe[Files]section.Installthemusingacodeinstead.UsetheEx

  10. inno-setup – Inno Setup磁力链接下载实施

    我目前正在使用InnoDownloadPlugin为我的安装程序下载文件,这个问题最大的问题是faila正确下载文件.因为连接不良等诸多原因.我想添加一种替代方法来下载文件,因此用户可以选择是否需要常规方式或torrent方式.我知道我可以使用aria2c.exe应用程序(https://aria2.github.io/),有人可以帮我实现它的inno设置代码吗?我需要的是使用torrent(ar

返回
顶部