当前位置: 首页 > 面试题库 >

为什么在构造标准中,使用前缀增量被认为比后缀增量更好

燕建中
2023-03-14
问题内容

我最近为Eclipse安装了Checkstyle插件,并个人认为它很棒。但是它给我的警告之一有些晦涩。确切的警告是“
不允许使用”。它是关于后缀在某行像++``++

for(int i = 0; i < SOMETHING; i++)

好的,我知道这foreach是更好的迭代构造,但是它不能在所有地方都应用,有时老套++是唯一的选择。

当我将行更改为

for(int i = 0; i < SOMETHING; ++i)

警告消失。我知道之间的区别i++,并++i和这一点我的生活我认为他们在标准的可互换for建设。但是Checkstyle认为这是i++有害的(或容易出错)。

问题: 为什么在for构造中前缀增量比后缀增量更好?还是… Checkstyle对此是否有错?


问题答案:

仅当在需要修改前的旧值的表达式中使用后缀增量时,后缀增量才有意义。在无效值(该值在for循环中)被丢弃的空上下文中,保存旧值没有任何意义。

换一种说法:

// makes sense because you need the old value to subscript the array
stack[top++] = x;
// in a void context, the old value is discarded
top++;

特别是在C ++中,这两个运算符都可能被重载,并且由于需要返回旧值,后缀之一的实现效率很低-它通常涉及复制旧对象以符合后缀运算符的原始语义。 。

对于原始类型,任何合适的编译器都会在两种情况下产生相同的代码,但是从语言的语义角度来看,第二种更好。



 类似资料:
  • 学习lvalue和rvalue。定义是“address of”是左值,否则是rvalue。 我检查了运算符的优先级,前缀和后缀增量都比“address of”运算符有更高的优先级。 对于下面的两个示例,谁能解释一下为什么第一个“&++value1”是lvalue,而第二个“&value1++”是RValue。 我对这两种情况的错误理解是:pValue1指向value1变量。无论在建立地址相关性之前

  • 我在互联网上搜索了一个很好的实现,它不是把数字表达式,而是把变量表达式从中缀符号转换成前缀和后缀。我做的所有搜索都没有成功。基本上,我想看看PHP中是否有任何实现,这样我就可以修改它以支持更多的操作符,而不仅仅是(-,*,=)。 例如转换: 同时保留变量名,不必输入数字进行计算。

  • 问题内容: 我了解对此主题有很多疑问。但是我仍然有些困惑,不确定何时使用这些操作。我正在为参加考试而做的旧考试。其中一种方法返回可访问的残疾人可用教室的数量。我编写了counter方法,但不确定是应该先递增还是递后递增计数器。我对它如何与方法中的return语句混淆。我仍然不知道该方法将在下面返回什么值。其他问题未在方法中显示返回值,因此我对它的工作方式感到困惑。这是代码: 问题答案: 当您要在表

  • 问题内容: 从下面或此处的程序中,为什么最后一次调用要打印该值7? 问题答案: 这将打印出“ 6”,因为它将i加1并返回值。5 + 1 = 6;这是前缀,在操作中使用该编号之前会添加该编号。 这将打印出“ 6”,因为它需要i,存储副本,加1并返回副本。因此,你获得了我当时的价值,但同时又增加了它。因此,你可以打印出旧值,但是它会增加。后缀增量的好处。 然后,当你打印出i时,它会显示i的实际值,因为