개발/C++

[C++] "[[no_unique_address]]" 란? C++20 attribute

재근이 2021. 10. 8. 13:51
반응형

 

💡[[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