이 기사에서는 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