【发布时间】:2013-08-14 07:33:38
【问题描述】:
一些重构导致了一段代码,使我得到了这个最小的测试用例:
int main () {
if (int i=1) {
/* IF-BLOCK */
} else {
throw i;
}
}
这编译得很好。但是,我一直认为i 只对IF-BLOCK 可见,但似乎并非如此。这是编译器错误吗?
另外,为什么以下工作?
int main () {
if (int i=1) {
} else if (int i=2) {
} else {
throw i;
}
}
注意第二个if“重新声明”i。另一个编译器错误?
【问题讨论】:
-
这是 C++ 中一个非常有用的特性。我认为人们想到的主要用例是
if (auto p = dynamic_cast<Foo*>(q)) { /* ... use p ... */ }之类的东西,或者任何一种创建可能为空的指针的情况。