전에 본 적이 없습니다. ":: sample"의 오타라고 생각했지만 실제로 컴파일되는 것을 보았을 때 매우 혼란 스러웠습니다. 누구든지 제발 알아낼 수 있습니까? 나는 그것이 goto
레이블 이라고 생각하지 않습니다 .
void f() {
class: sample {
// there were some members declared here
} x;
}
전에 본 적이 없습니다. ":: sample"의 오타라고 생각했지만 실제로 컴파일되는 것을 보았을 때 매우 혼란 스러웠습니다. 누구든지 제발 알아낼 수 있습니까? 나는 그것이 goto
레이블 이라고 생각하지 않습니다 .
void f() {
class: sample {
// there were some members declared here
} x;
}
sample
있습니까?
goto
레이블 이 아니에요 ? 수정, goto
의 최고 class
!
답변:
이름이 지정되지 않은 클래스이며 콜론은 sample
. 처럼 봐
class Foo : private sample
{
// ...
};
Foo x;
sample*
,를 반환 하지만 sample
여기서는 액세스 할 수없는 기본 클래스 임).
나는 그것이 에서 파생 되는 명명되지 않은 클래스를 정의 하고 있다고 생각합니다 sample
. 그리고 x
이름이 지정되지 않은 클래스의 변수입니다.
struct sample{ int i;};
sample f()
{
struct : sample
{
// there were some members declared here
} x;
x.i = 10;
return x;
}
int main()
{
sample s = f();
cout << s.i << endl;
return 0;
}
ideone의 샘플 코드 : http://www.ideone.com/6Mj8x
PS : 접근성 class
을 struct
위해로 변경 했습니다 !
이름없는 클래스입니다.
예를 들어 C ++ 11 이전의 로컬 함수를 대체하는 데 사용할 수 있습니다.
int main() {
struct {
int operator() (int i) const {
return 42;
}
} nice;
nice(0xbeef);
}
콜론 다음에 오는 것은 sample
단순히 기본 상속 을 sample
사용하여 파생 된다는 의미 입니다. (구조체 : 공용, 클래스 : 개인용)