繁体   English   中英

使用decltype从指针推导类型

[英]Deducing type from pointer using decltype

VS2015在尝试执行以下代码时引发很多错误:

int a = 5;
int *p = &a;
std::vector<decltype(*p)> v;

但是,当我检查此decltype返回的类型时,我得到了一个整数!

typeid(decltype(*p)) == typeid(int) // returns true

谁能向我解释? 我通过简单地取消引用指针并抹除我得到的值来解决此问题。 但是为什么不能通过直接取消引用指针来实现呢?

作为@Brian提出的解决方案的替代方案,您可以使用:

std::vector<std::remove_reference<decltype(*p)>::type> v;

您还可以使用:

std::vector<std::remove_pointer<decltype(p)>::type> v;

要么

std::vector<std::decay<decltype(*p)>::type> v3;

decltype(*p)int& ,不是int ,并且您不能有引用向量。 不幸的是,由于没有引用和cv限定符,因此typeid不会暴露这种差异。

这可以工作:

 std::vector<decltype(a)> v;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM