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