![](/img/trans.png)
[英]Is a local variable an lvalue when deducing its type using 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.