다른 공간에서 이름이 같은 변수 사용
이 코드는 컴파일되지만 Visual Studio에 런타임 오류가 있습니다.
런타임 점검 실패 #3 - 변수 'x'가 초기화되지 않고 사용되고 있습니다...
int x = 15;
int main()
{
int x = x;
return 0;
}
그런 행동을 이해할 수가 없어요오류 상자에서 계속을 클릭하면 프로그램이 다시 시작되고 x에 손상된 내용이 있습니다(예:-8556328
대신에15
).
왜 이 코드는 문제 없이 작동하고 int 배열은 잘 선언되었습니까?
const int x = 5;
int main()
{
int x[x] = {1,2,3,4};
return 0;
}
x
의 왼쪽에 정의됩니다.=
.
그래서x[x]
,[x]
세계적인 것을 참조하십시오.
반면에x = x;
,x
세계를 숨깁니다.x
자체적으로 초기화합니다. -> UB.
새 변수를 선언하면 해당 변수의 이름이 바로 여기에 표시됩니다.
int x =
// ^- there
왜냐하면 그 시점에서 변수가 완전히 선언되어 있기 때문입니다. 변수의 이름은 의미가 있습니다.이 시점에서 주변 범위에 있는 다른 변수(이전에 선언된 변수)는 숨겨집니다.
C에는 스코프 해상도 연산자가 없으므로 사용하지 못할 수 있습니다.
int x = x;
당신의 프로그램에서.
SRO(Scope resolution operator ::)를 사용하여 컴파일러에게 어떤 x가 진짜 x인지 알려주시기 바랍니다.사용자 정의 이름은 수준의 모호성을 피하기 위해 이와 같은 것을 망치기 때문에(이름은 장식됨), 이는 컴파일러가 가장 적합하게 사용하는 이름일 뿐입니다.
int x = 15;// Real name = gui_x
int main()
{
int x = x;// lui_x
return 0;
}
이러한 방식으로 런타임은 사용 중인 버전을 알 수 있지만 모호성을 방지하기 위해 특정 이름을 사용할 것으로 예상됩니다.사용자가 이미 사용된 이름을 사용하고 있는지 모를 경우 위의 문제가 발생할 수 있습니다.이를 위해 C++이 SRO를 만들었습니다.
자, 배열 x가 주소이고 어떤 것을 저장하는 정수가 아닌 경우, 그것이 컴파일러가 뒤죽박죽이 되지 않은 이유입니다.당신은 글을 써야 합니다.
namespace abc //now all global variables are belongs to this ns abc
int x = 15;// Real name = gui_x
int main()
{
int x = abc::x;// lui_x
return 0;
}
언급URL : https://stackoverflow.com/questions/32896140/using-a-variable-with-the-same-name-in-different-spaces
'programing' 카테고리의 다른 글
vue.항목의 불변적이고 지속적인 위치. (0) | 2023.06.21 |
---|---|
관리자 도커 컨테이너를 mariadb 도커 컨테이너와 연결하려면 어떻게 해야 합니까? (0) | 2023.06.21 |
윈도우에서 도커 mongo 이미지를 시작할 수 없습니다. (0) | 2023.06.21 |
Oracle DB의 조건부 고유 제약 조건 (0) | 2023.06.21 |
SELECT를 사용할 수 없는 이유...집계 기능이 있는 업데이트의 경우? (0) | 2023.06.21 |