ในบทความนี้ เราจะพูดถึงการทำงาน ไวยากรณ์ และตัวอย่างของ 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