다음 프로그램은 정상적으로 컴파일되어 실행됩니다.왜 C++에서는 초기 정의에서 선언 된 변수를 참조 할 수 있습니까?
clang++ -o wut -Wall -Wextra -Werror -pedantic -ansi test.cc
내가이 아마 더 의미
size_t foo;
foo = sizeof(foo);
에 해당하는 것을 이해 컴파일 명령을 사용하여
#include <iostream>
using namespace std;
int main() {
size_t foo = sizeof(foo);
cout << foo << endl;
return 0;
}
.
그러나 초기 사례는 LHS (또는 전반적인 성명)가 실행되기 전에 평가되는 RHS를 생각하기 때문에 약간의 마음을 상하게합니다.이 경우에는 foo
이 아직 존재하지 않을 수도 있습니다.
그러나 가정 할 때 size_t foo
은 항상 컴파일 타임에 자체 문으로 나뉘어 정의되고 그 다음에 선언문이 만들어집니다.
내 가정이 맞습니까? 이것이 명세에서 다루고 잘 정의되어 있는가? 그렇다면 어떤 섹션입니까? 나는 -ansi
으로 컴파일 된 것을 알지만,이 코드는 오류없이 모든 표준 버전에서 작동합니다. 당신은 [basic.scope.pdecl]을 찾고
@JesperJuhl 물론 프로그램은 의미가 없습니다. 다소 명백한 것에 감사드립니다. 나는 그것이 유효하다는 것을 결코 말하지 않았다, 다만 그것은 clang 하에서 경고/에러없이 컴파일되었다. 나는 구체적으로, 이것을 지배하는 표준의 섹션 또는 그것이 잘 정의되었는지 여부에 대해 질문했다. 자유롭게 답변을 추가하십시오. – Qix
@JesperJuhl'std :: cout'없이 잘 정의되어 있습니다. 그리고 그것은'std :: uintptr_t'로 전환함으로써 해결 될 수 있습니다. –
아마 관련된 질문입니다 : 생성자에서'this'를 참조하는 것이 타당 할 것이라고 생각합니까? –