在C ++规范中定义了for循环头中声明循环索引的行为吗?

当我阅读Code Complete 2nd Edition时,有一段代码:

for ( int recordCount = 0; recordCount < MAX_RECORDS; recordCount++ ) {
  // looping code that uses recordCount
}
// intervening code
for ( int recordCount = 0; recordCount < MAX_RECORDS; recordCount++ ) {
  // additional looping code that uses a different recordCount
}

作者声称他发现了3种不同的C ++编译器,它们对此具有3种不同的行为:

但是,当我使用三种不同的C ++编译器检查此功能时,我得到了三种不同的结果:

  • 第一个编译器在第二个for循环中将recordCount标记为多个变量声明,并生成错误。
  • 第二个编译器在第二个for循环中接受了recordCount,但允许它 在第一个for循环之外使用。
  • 第三个编译器允许recordCount的两种用法,并且不允许两种用法 在声明它的for循环外使用的一个。

编译器实现通常具有更深奥的语言功能 会有所不同。

这一段让我非常困扰,因为我一直认为,就C ++规范而言,第三个编译器的行为是唯一正确的行为。

有人可以帮我找出C ++规范的哪一部分指定了这种行为吗?

xxnj916 回答:在C ++规范中定义了for循环头中声明循环索引的行为吗?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2633786.html

大家都在问