bot*_*aio 1 c++ decltype visual-studio-2015
尝试执行此代码时,VS2015会抛出很多错误:
int a = 5;
int *p = &a;
std::vector<decltype(*p)> v;
Run Code Online (Sandbox Code Playgroud)
但是,当我检查这个decltype返回的类型时,我得到一个int!
typeid(decltype(*p)) == typeid(int) // returns true
Run Code Online (Sandbox Code Playgroud)
有谁可以向我解释一下?我通过简单地解除引用指针和decltyping我得到的值来完成解决方法.但是为什么不能通过直接取消引用指针来实现呢?
作为@Brian提出的解决方案的替代方案,您可以使用:
std::vector<std::remove_reference<decltype(*p)>::type> v;
Run Code Online (Sandbox Code Playgroud)
您还可以使用:
std::vector<std::remove_pointer<decltype(p)>::type> v;
Run Code Online (Sandbox Code Playgroud)
要么
std::vector<std::decay<decltype(*p)>::type> v3;
Run Code Online (Sandbox Code Playgroud)
decltype(*p)是int&,不是int,你不能有一个引用的向量.遗憾的typeid是,由于它剥离了引用和cv限定符,因此不会公开这种差异.
这有效:
std::vector<decltype(a)> v;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1120 次 |
| 最近记录: |