Namespaces
Variants

std:: is_pointer

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
(C++11)
is_pointer
(C++11)
(C++11)
(C++11)
(C++11)
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Определено в заголовочном файле <type_traits>
template < class T >
struct is_pointer ;
(начиная с C++11)

std::is_pointer является UnaryTypeTrait .

Проверяет, является ли T указателем на объект или функцию (включая указатель на void , но исключая указатель на член) или его cv-квалифицированной версией. Предоставляет константу-член value , которая равна true , если T является типом указателя на объект/функцию. В противном случае value равна false .

Если программа добавляет специализации для std::is_pointer или std::is_pointer_v , поведение не определено.

Содержание

Параметры шаблона

T - тип для проверки

Шаблон вспомогательной переменной

template < class T >
constexpr bool is_pointer_v = is_pointer < T > :: value ;
(начиная с C++17)

Наследуется от std:: integral_constant

Константы-члены

value
[static]
true если T является типом указателя, false в противном случае
(public static member constant)

Функции-члены

operator bool
преобразует объект в bool , возвращает value
(public member function)
operator()
(C++14)
возвращает value
(public member function)

Типы-члены

Тип Определение
value_type bool
type std:: integral_constant < bool , value >

Возможная реализация

template<class T>
struct is_pointer : std::false_type {};
template<class T>
struct is_pointer<T*> : std::true_type {};
template<class T>
struct is_pointer<T* const> : std::true_type {};
template<class T>
struct is_pointer<T* volatile> : std::true_type {};
template<class T>
struct is_pointer<T* const volatile> : std::true_type {};
**Примечание:** Весь код C++ внутри тегов `
` и `` был сохранен без изменений, как и требовалось. HTML-разметка и атрибуты также остались нетронутыми.

Пример

#include <type_traits>
int main()
{
    struct A
    {
        int m;
        void f() {}
    };
    int A::*mem_data_ptr = &A::m;     // указатель на член данных
    void (A::*mem_fun_ptr)() = &A::f; // указатель на член-функцию
    static_assert(
           ! std::is_pointer<A>::value
        && ! std::is_pointer_v<A>    // то же самое, что выше, но в C++17!
        && ! std::is_pointer<A>()    // то же самое, что выше, используя унаследованный operator bool
        && ! std::is_pointer<A>{}    // аналогично
        && ! std::is_pointer<A>()()  // то же самое, что выше, используя унаследованный operator()
        && ! std::is_pointer<A>{}()  // аналогично
        &&   std::is_pointer_v<A*>
        &&   std::is_pointer_v<A const* volatile>
        && ! std::is_pointer_v<A&>
        && ! std::is_pointer_v<decltype(mem_data_ptr)>
        && ! std::is_pointer_v<decltype(mem_fun_ptr)>
        &&   std::is_pointer_v<void*>
        && ! std::is_pointer_v<int>
        &&   std::is_pointer_v<int*>
        &&   std::is_pointer_v<int**>
        && ! std::is_pointer_v<int[10]>
        && ! std::is_pointer_v<std::nullptr_t>
        &&   std::is_pointer_v<void (*)()>
    );
}

Смотрите также

проверяет, является ли тип указателем на нестатический член-функцию или объект
(шаблон класса)
проверяет, является ли тип указателем на нестатический член-объект
(шаблон класса)
проверяет, является ли тип указателем на нестатическую член-функцию
(шаблон класса)
(C++11)
проверяет, является ли тип массивом
(шаблон класса)
(C++11)
проверяет, является ли тип скалярным типом
(шаблон класса)