Trong bài viết này, ta sẽ thảo luận về hoạt động, cú pháp và ví dụ của template std::is_pointer trong C++ STL.
is_pointer là một template nằm trong header <type_traits>. Template này dùng để kiểm tra xem kiểu T có phải là kiểu con trỏ hay không.
Con trỏ là gì?
Con trỏ là kiểu không tĩnh (non-static) chứa địa chỉ của kiểu khác, hoặc trỏ đến vị trí bộ nhớ nào đó. Dùng dấu * để khai báo con trỏ và khi muốn truy cập giá trị tại địa chỉ con trỏ giữ cũng dùng *.
Chúng có thể khởi tạo là null và sau đó thay đổi kiểu theo nhu cầu.
Cú pháp
template <class T> is_pointer;
Tham số
Template chỉ có tham số kiểu T, kiểm tra xem T có phải con trỏ hay không.
Giá trị trả về
Trả về giá trị boolean: true nếu T là kiểu con trỏ, false nếu không.
Ví dụ
Input: is_pointer<int>::value; Output: False Input: is_pointer<int*>::value; Output: True
Ví dụ
#include <iostream> #include <type_traits> using namespace std; class TP{ }; int main() { cout << boolalpha; cout << "checking for is_pointer:"; cout << "\nTP: " << is_pointer<TP>::value; cout << "\nTP*: " << is_pointer<TP*>::value; cout << "\nTP&: " << is_pointer<TP&>::value; cout << "\nNull Pointer: "<< is_pointer<nullptr_t>::value; return 0; }
Đầu ra
Nếu chạy mã trên sẽ cho kết quả:
checking for is_pointer: TP: false TP*: true TP&: false Null Pointer: false
Ví dụ
#include <iostream> #include <type_traits> using namespace std; int main() { cout << boolalpha; cout << "checking for is_pointer:"; cout << "\nint: " << is_pointer<int>::value; cout << "\nint*: " << is_pointer<int*>::value; cout << "\nint **: " << is_pointer<int **>::value; cout << "\nint ***: "<< is_pointer<int ***>::value; return 0; }
Đầu ra
Nếu chạy mã trên sẽ cho kết quả:
checking for is_pointer: int: false int*: true Int **: true Int ***: true