, 그는 구조체와 이런 타입 정의를 정의?
typedef
는
boolean_struct
개체 내부
int
부재의 포인터에 해당
boolean_type
라는 타입을 생성한다.
은이 아니며, int
에 대한 포인터와 같습니다. 차이점은 boolean_type
의 오브젝트는 참조 해제하기 위해 boolean_struct
오브젝트가 필요하다는 것입니다. int
에 대한 일반적인 포인터는 그렇지 않습니다. 이것이 어떻게 다른지 확인하는 가장 좋은 방법은 몇 가지 코드 예제를 사용하는 것입니다.
는 int
의 만 일반 포인터를 생각해 보면 알 수 있듯이
struct boolean_struct { int member; };
typedef int boolean_struct::* boolean_type;
int main()
{
// Two boolean_struct objects called bs1 and bs2 respectively:
boolean_struct bs1;
boolean_struct bs2;
// Initialize each to have a unique value for member:
bs1.member = 7;
bs2.member = 14;
// Obtaining a pointer to an int member inside a boolean_struct
boolean_type pibs = &boolean_struct::member;
// Note that in order to dereference it I need a boolean_struct object (bs1):
int value3 = bs1.*pibs;
// value3 now has value 7.
// I can use the same pibs variable to get the value of member from a
// different boolean_struct (bs2):
int value4 = bs2.*pibs;
// value4 now has value 14.
return 0;
}
, 구문과 행동은 우리가 boolean_struct
내부 int
멤버에 대한 포인터를 사용하는 경우
이제
struct boolean_struct { int member; };
int main()
{
// Two boolean_struct objects called bs1 and bs2 respectively:
boolean_struct bs1;
boolean_struct bs2;
// Initialize each to have a unique value for member:
bs1.member = 7;
bs2.member = 14;
// Obtaining a pointer to an int, which happens to be inside a boolean_struct:
int* pi1 = &(bs1.member);
// I can dereference it simply like this:
int value1 = *pi1;
// value1 now has value 7.
// Obtaining another pointer to an int, which happens to be inside
// another boolean_struct:
int* pi2 = &(bs2.member);
// Again, I can dereference it simply like this:
int value2 = *pi2;
// value2 now has value 14.
return 0;
}
고려 다른.
operator boolean_type() const throw()
{
return Traits::invalid() != m_value ? &boolean_struct::member : nullptr;
}
"& boolean_struct :: 회원"의 의미는 무엇입니까 :
또 다른 문제는 다음 코드와 직결된다?
boolean_struct
안에 member
변수의 주소를 반환합니다. 위 코드 예제를 참조하십시오.
답변 해 주셔서 감사합니다. 하지만 boolean_struct 객체가 없으므로 & boolean_struct :: member는 정확히 무엇을 가리 킵니까? – Rong
@Rong : 그것이 가리키는 것은 컴파일러의 구현 세부 사항입니다. 일반적으로 클래스 멤버에 오프셋 된 어떤 종류의 정수로 구현됩니다. 그러나 정확한 수치는 상관 없습니다. 특정 유형의 객체의 특정 부분을 고려하지 않고 특정 유형의 객체의 특정 부분에 액세스 할 수있게하는 것이 중요합니다. 그것은 마치 인체의 다리를 가리키는 것과 같습니다. 나는 개인에 관계없이 그것을 할 수있다. 이것이 바로'boolean_struct :: member' 표현식이 작동하는 이유입니다. 특정 인스턴스에 관계없이'boolean_struct' 안의'member'를 가리킬 수 있습니다. –