반응형
#define offsetof(type, member)
[매개 변수]
type: 구조체 또는 클래스의 이름
member: 멤버 변수 이름
[반환값]
type 내의 member의 offset을 계산하여 반환한다.
C++ 17 미만은 type으로 오직 standard layout type 대해서만 그 기능이 정의되어있다. standard layout type이란 오직 C 스타일의 데이터로만 이루어진 데이터 구조 타입을 말한다. 예를 들면 기본 타입 int, float, double, char 등, 함수가 포함되지 않은 구조체가 그 예이다.
C++ 17부턴 함수가 포함된 클래스의 멤버 변수의 오프셋도 계산할 수 있다.
[예제]
class Foo
{
public:
Foo() = default;
~Foo() = default;
void Func1() const;
void Func2() const;
int mInteger;
float mFloatingPoint;
char mCharacter;
char mString[10];
char* mCharPtr;
string mStringClassType;
vector<string> mVector;
};
int main()
{
cout << offsetof(Foo, mInteger) << endl;
cout << offsetof(Foo, mFloatingPoint) << endl;
cout << offsetof(Foo, mCharacter) << endl;
cout << offsetof(Foo, mString) << endl;
cout << offsetof(Foo, mCharPtr) << endl;
cout << offsetof(Foo, mStringClassType) << endl;
cout << offsetof(Foo, mVector) << endl;
return 0;
}
[결과]
'C,C++ > C++' 카테고리의 다른 글
[C++] 해시맵(Hashmap)을 이해해보자 | std::unordered_map | 기술면접 (0) | 2020.03.15 |
---|---|
[C++] 범위 내의 난수 생성하기 | 비결정적 난수 (0) | 2020.03.05 |
[C++] 가독성을 위해 default와 delete 키워드를 사용하기 (클래스) (0) | 2020.02.29 |
[C++] static_assert 매크로에 대해 알아보자. (0) | 2020.02.28 |
[C++] 스택과 힙 메모리, "RAII"라는 패턴 및 기법에 대해 알아보자 (0) | 2020.02.23 |
댓글