ในบทความนี้ เราจะพูดถึงการทำงาน ไวยากรณ์ และตัวอย่างของ template std::is_lvalue_reference ใน C++ STL
is_lvalue_reference template ใช้ตรวจสอบว่าชนิดที่กำหนดเป็น lvalue reference หรือไม่
Lvalue คืออะไร?
Lvalues คือค่าที่อยู่ซ้ายของ assignment operator เป็น expression ที่อ้างอิงตำแหน่งหน่วยความจำ
Lvalue Reference คืออะไร?
Lvalue reference เป็น reference ที่ bind กับ lvalue คล้ายกับการอ้างอิงตัวแปรใน C/C++ แบบดั้งเดิม โดยใช้สัญลักษณ์ & กับตัวแปรเพื่ออ้างอิงที่อยู่
ตัวอย่าง
int& a;
ไวยากรณ์
template <class T> is_lvalue_reference;
พารามิเตอร์
Template รับพารามิเตอร์ชนิด T เพียงอย่างเดียว ตรวจสอบว่าเป็น lvalue reference หรือไม่
ค่าที่คืน
คืนค่า Boolean: true หากเป็น lvalue reference, false หากไม่ใช่
ตัวอย่าง
Input: is_lvalue_reference<int&>::value; Output: true Input: is_lvalue_reference<int>::value; Output: false
ตัวอย่างโค้ด 1
#include <iostream>
#include <type_traits>
using namespace std;
class TP { };
int main() {
cout << boolalpha;
cout << "Checking for is_lvalue_reference: ";
cout << "\nTP class : " << is_lvalue_reference<TP>::value;
cout << "\nTP& : " << is_lvalue_reference<TP&>::value;
cout << "\nTP&&: " << is_lvalue_reference<TP&&>::value;
return 0;
}
เอาต์พุต
Checking for is_lvalue_reference: TP class : false TP& : true TP&&: false
ตัวอย่างโค้ด 2
#include <iostream>
#include <type_traits>
using namespace std;
int main() {
cout << boolalpha;
cout << "Checking for is_lvalue_reference: ";
cout << "\nint : " << is_lvalue_reference<int>::value;
cout << "\nint& : " << is_lvalue_reference<int&>::value;
cout << "\nint&&: " << is_lvalue_reference<int&&>::value;
cout << "\nchar : " << is_lvalue_reference<char>::value;
cout << "\nchar& : " << is_lvalue_reference<char&>::value;
cout << "\nchar&&: " << is_lvalue_reference<char&&>::value;
cout << "\nfloat : " << is_lvalue_reference<float>::value;
cout << "\nfloat& : " << is_lvalue_reference<float&>::value;
cout << "\nfloat&&: " << is_lvalue_reference<float&&>::value;
cout << "\ndouble : " << is_lvalue_reference<double>::value;
cout << "\ndouble& : " << is_lvalue_reference<double&>::value;
cout << "\ndouble&&: " << is_lvalue_reference<double&&>::value;
return 0;
}
เอาต์พุต
Checking for is_lvalue_reference: int : false int& : true int&&: false char : false char& : true char&&: false float : false float& : true float&&: false double: false double& : true double&&: false