C++의 포인터 - 투 - 회원 기능은 흥미롭고 강력하지만 클래스의 인스턴스화 된 객체에만 국한되어야하는지, 아니면 정적 멤버를 가리키는 것이 좋은지 궁금합니다. 매우 유익한 것처럼 보일지라도 사용 사례는 정적 또는 정적이 아닌 기능 사용에 대해 나에게 분명하지 않습니다.구성원에 대한 포인터가 정적 구성원에 적합한가?
-2
A
답변
1
통계에 대한 포인터는 실제로 "정상적인"포인터입니다 (예 : 그들은 값을 역 참조에 클래스 인스턴스를 필요로하기 때문에 비 정적 멤버
class MyClass
{
public:
static int x;
static int f(int a)
{
return a+1;
}
};
// ...
int* pint = &MyClass::x; // pointer to static property
int (*pfunc)(int) = &MyClass::f; // pointer to static method
포인터는 "특별한"입니다. 그것들은 이 "클래스 인스턴스 내부의 멤버의 오프셋"이라고 생각하면이 될 수 있습니다. (이것은 매우 거칠고 메소드 포인터에 적용 할 수 없습니다!).
대조적으로 정적 멤버는 실제로 제한된 가시성을 가진 네임 스페이스가있는 전역 변수와 매우 비슷합니다. 클래스 인스턴스와 독립적 인 정적 메모리 주소가 있습니다. 모든 인스턴스는 하나의 정적 멤버를 공유합니다.
1
다음은 합법적 인 C++ 11 코드입니다.
struct X
{
static void f() {}
static int i;
X() = delete;
};
typedef void(*funcPtr)();
int main()
{
funcPtr g = &X::f;
int * j = &X::i;
}
정적 멤버 데이터 및 기능에 대한 주소 지정에 대해서는 아무런 문제가 없습니다. 보시다시피 클래스는 언제든지 인스턴스화되지 않습니다.
관련 문제
- 1. 집합 구성원에 대한 TTL
- 2. 계산 된 구성원에 대한 식
- 3. 배열 구성원에 대한 타이머를 설정
- 4. Python : 집합의 구성원에 액세스
- 5. 인터페이스 구성원에 다형성 사용
- 6. 구성원에 기본 생성자가 없습니다.
- 7. Java의 스레드 구성원에 어떻게 액세스합니까?
- 8. 포인터 개체의 구성원에 대한 액세스 위반
- 9. 모든 구성원에 대한 자동 매기기 표준화
- 10. synchronized가 개체 구성원에 영향을 줍니까?
- 11. PHP에서 배열 구성원에 액세스하는 방법
- 12. 템플릿의 개인 정적 변수 구성원에 대해 정의되지 않은 기호
- 13. C# - 목록 구성원에 깊은 복사본이 필요합니까?
- 14. 모든 구성원에 대해 xml 메모를 강제로 적용
- 15. 시간 구성원에 문자열 추가 및 데이터베이스에 저장
- 16. 모든 구성원에 대해 Moq 예외 예외가 발생했습니다.
- 17. PowerShell 배열/추가 구성원에 데이터 추가
- 18. 배열 구성원에 액세스 할 수 없습니다.
- 19. C의 배열 구성원에 정확히 액세스하려면 어떻게해야합니까?
- 20. 구성원에 숫자 연산을 허용하는 스칼라 유형 서명
- 21. 개체 구성원에 따라 헤더 카드 배경색이 달라집니다.
- 22. Mongodb Index보고 용 복제 세트 구성원에 대해서
- 23. 목록의 모든 구성원에 대해 조건이 적용되는지 확인
- 24. 인터페이스 유형의 배열 구성원에 액세스하는 방법 C#
- 25. 건설 중 익명 유형의 구성원에 액세스
- 26. REST : 여러 ID를 통해 컬렉션 구성원에 액세스
- 27. 중첩 된 Entity Framework 구성원에 대한 FakeItEasy를 사용한 단위 테스트
- 28. SQL Server 2005의 데이터베이스 역할 구성원에 대한 스크립트 생성
- 29. Eclipse에서 Pydev를 사용하여 클래스 구성원에 대한 코드 완성
- 30. 팀으로 iOS 프로젝트 작업 및 팀 구성원에 대한 액세스 정의
정적 멤버는 개체 종속적이지 않으므로 일반 변수와 비슷합니다. –
정적 멤버에서 멤버로 포인터를 만들 수 없습니다. – Simple