반응형
💡[[no_unique_address]] 란
"[[no_unique_address]]"는 C++20부터 추가된 attribute로 "Empty Class 타입의 멤버를 가질 때 독립적인 주소를 가질 필요 없다."는 의미를 가진다. Empty Class를 멤버변수를 가지고 있어도 크기에 포함되지 않는다.
앞서 살펴 보았던 EBCO와 결과가 같은 것을 볼 수 있다.
[C++] EBCO란?
💡EBCO란? Empty Base Class Optimization의 약어로, Empty Class로 부터 상속을 받는 경우 Base Class인 Empty Class의 크기는 0 btye로 최적화 된다는 말이다. * Empty Class에 대해서 알고 싶은 분은아래 링크..
jaegeun.tistory.com
[C++] Empty Class란?
목표 Empty Class 특징에 대해서 알아보고, 어떠한 것들이 Empty Class를 말하는지 예시를 통해서 알아보자. Empty Class 특징 size가 1byte (non-static) member 변수가 없다. 가상 함수가 없다. 가상 상속을 하..
jaegeun.tistory.com
📝예시 코드
예시 코드를 보면 [[no_unique_address]] 속성을 붙인 Empty Class의 크기가 없으며 data와 동일한 주소를 가지고 있는것을 볼 수 있다.
#include <iostream>
class Empty {};
class TestClass {
[[no_unique_address]] Empty e;
int data;
};
int main() {
TestClass tc;
std::cout << sizeof(TestClass) << std::endl; // 4 byte
std::cout << &tc.e << std::endl; // 동일한 주소
std::cout << &tc.data << std::endl; // 동일한 주소
return 0;
}
반응형
'개발 > C++' 카테고리의 다른 글
[C++] EBCO란? (0) | 2021.10.08 |
---|---|
[C++]Tag Dispatching(꼬리표 분배)이란?-Empty Class 이용한 예(example) (0) | 2021.10.08 |
[C++] Empty Class란? (0) | 2021.10.08 |