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