1

当我在阅读 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++ 规范的哪一部分指定了这种行为?

4

0 回答 0