다음 코드를 고려하십시오.
#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를 정의 할 수없는 이유를 알고 싶습니다.