Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Template is_reference ใน C++

ในบทความนี้ เราจะพูดถึงการทำงาน ไวยากรณ์ และตัวอย่างของ template std::is_reference ใน C++ STL

is_reference เป็น template ที่อยู่ใน header <type_traits> ใช้ตรวจสอบว่าชนิด T ที่กำหนดเป็น reference type หรือไม่

Template นี้เป็นการรวมของ is_rvalue_reference และ is_lvalue_reference หากอย่างใดอย่างหนึ่งเป็น true ผลลัพธ์ของ is_reference ก็จะเป็น true

Reference ใน C++ คืออะไร?

Reference คือชื่อเรียกอื่น (alias) ของตัวแปรที่มีอยู่แล้ว Reference ต่างจาก Pointer ดังนี้:

  • ไม่สามารถตั้งค่า reference เป็น null ได้ แต่ pointer สามารถเป็น null pointer ได้
  • เมื่อ reference ถูก initialize กับออบเจกต์แล้ว ไม่สามารถเปลี่ยนไปชี้ออบเจกต์อื่นได้ Pointer สามารถเปลี่ยนได้ตลอดเวลา
  • Reference ต้อง initialize ตอนสร้าง Pointer สามารถ initialize ภายหลังได้

ประกาศ reference ด้วยสัญลักษณ์ & นำหน้าตัวแปรที่ต้องการอ้างอิง

ไวยากรณ์

template <class T> is_reference;

พารามิเตอร์

Template รับพารามิเตอร์เพียงอย่างเดียวคือชนิด T ตรวจสอบว่าเป็น reference type หรือไม่

ค่าที่คืน

คืนค่า Boolean: true หาก T เป็น reference type, false หากไม่ใช่

ตัวอย่าง

Input: is_reference<int>::value; Output: false
Input: is_reference<int&>::value; Output: true
Input: is_reference<int&&>::value; Output: true

ตัวอย่างโค้ด

#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;
    cout << "\n char: " << is_reference<char>::value;
    cout << "\n char&: " << is_reference<char&>::value;
    cout << "\n char&&: " << is_reference<char&&>::value;
    cout << "\n float: " << is_reference<float>::value;
    cout << "\n float&: " << is_reference<float&>::value;
    cout << "\n float&&: " << is_reference<float&&>::value;
    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