|
|
1
7
如果 溢出检查 已打开。基本上 股份有限公司 不 进行溢出检查 .按照建议操作,并在打开这些编译器选项时使用反汇编窗口查看差异(每个选项都不同)。 如果关闭这些选项,则没有区别。经验法则,当你不关心范围检查失败时,使用Inc(因为你不会得到异常!)。 |
|
|
2
17
现代编译器优化了代码。
用你喜欢的任何一种。 编辑:正如Jim McKeeth所纠正的那样:使用溢出检查是有区别的。Inc不进行范围检查。 |
|
|
3
6
这一切都取决于“i”的类型。在Delphi中,通常将循环变量声明为“i:Integer”,但它也可以是“i:PChar”,在Delphi 2009和FPC(我猜在这里)以下的所有版本上解析为PAnsiChar,在Delphi2009和Delphi上解析为PWideChar。NET(也是猜测)。 由于Delphi 2009可以进行指针数学,Inc(i)也可以在类型指针上进行(如果它们是在打开pointer_math的情况下定义的)。 例如:
正如其他安瑟斯已经说过的那样:通过打开,可以相对容易地看到编译器对你的代码做了什么:
请注意,编译器选项如OPTIMIZATION、OVERFLOW_CHEKS和RANGE_CHECKS可能会影响最终结果,因此您应该注意根据自己的喜好进行设置。 关于这一点的提示:在每个单元中,$INCLUDE都有一个引导编译器选项的文件,这样,当你的.bdsproj或.dproj以某种方式损坏时,你就不会失去设置。(查看JCL的源代码,以获得一个很好的例子) |
|
|
4
3
您可以在调试时在CPU窗口中验证它。对于这两种情况,生成的CPU指令是相同的。
我同意
更正:我刚在Inc的文档中找到这个:
因此,坚持股份有限公司可能是明智的。 |
|
|
5
1
您始终可以编写这两段代码(在单独的过程中),在代码中放置断点,并在CPU窗口中比较汇编程序。 一般来说,我会使用inc(I),只要它显然只被用作某种类型的循环/索引,就使用+1,只要1会使代码更容易维护(即,将来可能会更改为另一个整数),或者从算法/规范的角度来看更具可读性。 |
|
|
6
0
“在某些平台上,Inc可能会生成优化的代码,特别是在紧密循环中有用。” 对于像Delphi这样的优化编译器,它并不在乎。这是关于旧编译器的(例如Turbo Pascal) |
|
Sweepy Dodo · JSON lite的格式化 1 年前 |
|
|
giantjenga · 优化整数向量到二进制向量的转换 1 年前 |
|
Zegarek · Postgresql递归查询未提供预期结果 1 年前 |
|
|
Joe · 为什么这两个查询之间的性能存在如此大的差异? 2 年前 |
|
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 2 年前 |