이 기사에서는 C++ STL에서 std::is_reference 템플릿의 작동, 구문 및 예에 대해 논의할 것입니다.
is_reference는
이 템플릿은 is_rvalue와 is_lvalue의 조합으로 둘 중 하나가 참이면 is_reference의 결과도 참인지 확인합니다.
C++에서 참조란 무엇입니까?
참조는 이미 존재하는 변수의 별칭 또는 다른 이름입니다. 참조는 포인터와 다릅니다 -
- 참조를 null로 설정할 수 없지만 포인터는 null 포인터가 될 수 있습니다.
- 참조가 개체에 대해 초기화되면 변경할 수 없습니다. 포인터는 언제든지 다른 개체를 가리킬 수 있습니다.
- 참조는 생성 시 초기화되어야 하며 포인터는 생성 후 나중에 초기화될 수 있습니다.
참조하려는 변수 앞에 앰퍼샌드(&) 기호를 사용하여 참조를 선언할 수 있습니다.
구문
template <class T> is_reference;
매개변수
템플릿은 T 타입의 파라미터만 가질 수 있으며, 주어진 타입이 참조 타입인지 확인합니다.
반환 값
Boolean 값을 반환하고, 주어진 유형이 참조 유형이면 true를 반환하고, 참조 유형이 아니면 false를 반환합니다.
예시
Input: is_reference<int>::value; Output: False Input: is_reference<int&>::value; Output: True
예시
#include <iostream>
#include <type_traits>
using namespace std;
class TP {
};
int main() {
cout << boolalpha;
cout << "Checking for is_reference: ";
cout << "\n class TP : "<<is_reference<TP>::value;
cout << "\n class TP&: "<<is_polymorphic<TP&>::value;
cout << "\n class TP&&: "<<is_polymorphic<TP&&>::value;
return 0;
} 출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
Checking for is_reference: class TP : false class TP&: false class TP&&: false
예시
#include <iostream>
#include <type_traits>
using namespace std;
int main() {
cout << boolalpha;
cout << "Checking for is_reference: ";
cout << "\n int: "<<is_reference<int>::value;
cout << "\n int&: "<< is_reference <int&>::value;
cout << "\n int&&: "<< is_reference <int&&>::value;
// char
cout << "\n char: "<<is_reference<char>::value;
cout << "\n char&: "<< is_reference <char&>::value;
cout << "\n char&&: "<< is_reference <char&&>::value;
//float
cout << "\n float: "<<is_reference<float>::value;
cout << "\n float&: "<< is_reference <float&>::value;
cout << "\n float&&: "<< is_reference <float&&>::value;
//double
cout << "\n double: "<<is_reference<double>::value;
cout << "\n double&: "<< is_reference <double&>::value;
cout << "\n double&&: "<< is_reference <double&&>::value;
return 0;
} 출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
Checking for is_reference: int: false int&: true int&&: true char: false char&: true char&&: true float: false float&: true float&&: true double: false double&: true double&&: true