Modern C++ - decltype

진경천·2024년 3월 14일
0

C++

목록 보기
82/90

decltype

decltype(<타입을 나타내는 식>)
decltype은 () 안의 식이 나타내는 타입으로 치환되어 타입을 알아내거나 혹은 같은 타입으로 선언, 참조 등을 할 때 용이하다.

#include <iostream>

using namespace std;

int main() {
	decltype(1) num0 = 10;	// int

	decltype(num0) num1 = 20;	// int
	decltype(num1)& num2 = num1;	// int&

	const decltype(num0) num3 = 10;	// const int
	const decltype(num0)& num4 = num2;	// const int&

	const decltype((num0)) num5 = num0; // int&
	decltype(1 + 22.2f) num6 = 1.f;	// float
    
    decltype(auto) num7 = 70;		// int

	int nums0[] = { 1, 2, 3 };
	decltype(nums0) nums1 = { 10, 20, 30 };	// int[3]
}

decltype(auto) num7 = 70;
decltype의 식에 auto를 넣어도 type추론을 통해 num7을 int로 선언할 수 있다.

함수에서의 decltype

decltype(func) f
func의 받는 인자와 반환 타입을 f가 받게 된다.
하지만 statement는 받지 않기 때문에 f에 대한 statement를 따로 작성해야 한다.

#include <iostream>

using namespace std;


int func(float) {
	return 10;
}

int f(float) {
	return 200;
}

struct Person {
	float weight;
	float height;


};

int main() {

	decltype(func) f;  // int f(float)
	cout << f(10.f) << endl;
    
	decltype(func)& f0 = func;
	cout << f0(10.f) << endl;

	decltype(func)* f1 = func;
	cout << f1(10.f) << endl;

	decltype(func(1.f)) num7 = 20;

	Person p;
	decltype(p.weight) weight;			// float
	decltype(Person::height) height;	// float
}

실행 결과

200
10
10

decltype의 ( ) 안의 식은 실제로 작동하지 않는다.

profile
어중이떠중이

0개의 댓글