如何在C++ 11中获取指针的类型

onq*_*tam 1 c++ c++11

我有以下内容:

type* ptr;
Run Code Online (Sandbox Code Playgroud)

我想type离开ptr.我尝试使用declval/ declval/ decay但无法让它工作(这就是当你对你正在做的事情没有深刻理解时会发生什么).

那么我怎样才能获得类型并创建相同类型的变量 - 比如 type some_var;

Vit*_*meo 6

您可以使用std::remove_pointer类型特征:

using ptr_type = int*;
using type = std::remove_pointer<ptr_type>::type;

static_assert(std::is_same<type, int>::value, "");
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用decltypestd::declval:

using ptr_type = int*;
using type = decltype(*std::declval<ptr_type>());

static_assert(std::is_same<type, int>::value, "");
Run Code Online (Sandbox Code Playgroud)

std::remove_reference如果您直接在内部使用解除引用表达式,则可能还需要使用decltype:

int* ptr = nullptr; 
std::remove_reference<decltype(*ptr)>::type var = 7;
Run Code Online (Sandbox Code Playgroud)

  • @onqtam:您是否阅读了答案和链接文档?你需要使用`:: type`. (2认同)