나는이 질문을하게하는 연결된 질문 인 reading이었다.중첩 된 함수는 허용되지 않지만 중첩 된 함수 프로토 타입이 허용되는 이유는 무엇입니까? [C++]
모든 말한다
int main()
{
string SomeString();
}
는, 컴파일러는 함수의 프로토 타입이 아닌 문자열 개체로이 소요 다음 코드를 고려하십시오. 이제 다음 코드를 살펴보십시오.
int main()
{
string Some()
{
return "";
}
}
중첩 된 함수 정의가 허용되지 않으므로 컴파일러에서 유효하지 않습니다. 허용되지 않는 경우 중첩 된 함수 프로토 타입이 허용되는 이유는 무엇입니까? 혼란을 만들기보다는 어떤 이점도주지 않습니다 (또는 여기에 몇 가지 유효한 포인트가 누락 되었습니까?).
다음 내용이 유효하다는 것을 알았습니다.
int main()
{
string SomeFun();
SomeFun();
return 0;
}
string SomeFun()
{
std::cout << "WOW this is unexpected" << std::endl;
}
이것은 혼란 스럽습니다. 기능을 기대하고 있었는데 SomeFun()은 메인의 범위를 가질 것입니다. 그러나 나는 틀렸다. 왜 컴파일러는 위와 같은 코드를 컴파일 할 수 있습니까? 위와 같은 코드가 의미있는 실시간 상황이 있습니까?
의견이 있으십니까?
+1 동일한 검색어 만 누르면 아래 답변에 모든 정보가 포함됩니다. – slashmais