【发布时间】:2010-03-06 13:53:39
【问题描述】:
考虑以下代码:
#include <iostream>
using namespace std;
int main()
{
int x, y, i;
cin >> x >> y >> i;
switch(i) {
case 1:
// int r = x + y; -- OK
int r = 1; // Failed to Compile
cout << r;
break;
case 2:
r = x - y;
cout << r;
break;
};
}
G++ 抱怨crosses initialization of 'int r'。我的问题是:
- 什么是
crosses initialization? - 为什么第一个初始化器
x + y通过编译,而后者却失败了? - 所谓的
crosses initialization有什么问题?
我知道我应该使用方括号来指定r 的范围,但我想知道为什么,例如为什么不能在多案例 switch 语句中定义非 POD。
【问题讨论】:
-
我的理解,给出下面的答案,第 3 点是这个错误是对 c++ 的过度限制。如果标签后面没有使用r,则没有影响(即使这里的示例使用了r,也可以在情况2中将其删除,编译器会给出相同的错误)。更好的证据是它在 C 中是允许的,甚至在 C11 中也是如此。
标签: c++ initialization