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

Template is_rvalue_reference ใน C++

ในบทความนี้ เราจะพูดถึงการทำงาน ไวยากรณ์ และตัวอย่างของ template std::is_rvalue_reference ใน C++ STL ใช้ตรวจสอบว่าชนิดที่กำหนดเป็น rvalue reference หรือไม่

Rvalue คืออะไร?

Rvalues คือค่าที่อยู่ขวาของ assignment operator

Rvalue Reference คืออะไร?

Rvalue reference ระบุด้วยสัญลักษณ์ && ใช้ initialize กับ rvalue เท่านั้น

ไวยากรณ์

template <class T> is_rvalue_reference;

พารามิเตอร์

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

ค่าที่คืน

คืนค่า Boolean: true หากเป็น rvalue reference, false หากไม่ใช่ หรืออ้างอิงตำแหน่งที่ไม่รู้จัก

ตัวอย่าง

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

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

#include <iostream>
#include <type_traits>
using namespace std;

int main() {
    cout << boolalpha;
    cout << "Checking for is_rvalue_reference: ";
    cout << "\nint : " << is_rvalue_reference<int>::value;
    cout << "\nint& : " << is_rvalue_reference<int&>::value;
    cout << "\nint&&: " << is_rvalue_reference<int&&>::value;
    cout << "\nchar : " << is_rvalue_reference<char>::value;
    cout << "\nchar& : " << is_rvalue_reference<char&>::value;
    cout << "\nchar&&: " << is_rvalue_reference<char&&>::value;
    cout << "\nfloat : " << is_rvalue_reference<float>::value;
    cout << "\nfloat& : " << is_rvalue_reference<float&>::value;
    cout << "\nfloat&&: " << is_rvalue_reference<float&&>::value;
    cout << "\ndouble : " << is_rvalue_reference<double>::value;
    cout << "\ndouble& : " << is_rvalue_reference<double&>::value;
    cout << "\ndouble&&: " << is_rvalue_reference<double&&>::value;
    return 0;
}

เอาต์พุต

Checking for is_rvalue_reference:
int : false
int& : false
int&&: true
char : false
char& : false
char&&: true
float : false
float& : false
float&&: true
double: false
double& : false
double&&: true

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

#include <iostream>
#include <type_traits>
using namespace std;

class TP { };

int main() {
    cout << boolalpha;
    cout << "Checking for is_rvalue_reference: ";
    cout << "\nTP class : " << is_rvalue_reference<TP>::value;
    cout << "\nTP& : " << is_rvalue_reference<TP&>::value;
    cout << "\nTP&&: " << is_rvalue_reference<TP&&>::value;
    return 0;
}

เอาต์พุต

Checking for is_rvalue_reference:
TP class : false
TP& : false
TP&&: true