使用decltype

时间:2015-09-28 21:19:36

标签: c++ visual-studio-2015 decltype

VS2015在尝试执行此代码时会抛出很多错误:

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

但是,当我检查这个decltype返回的类型时,我得到一个int!

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

任何人都可以向我解释一下吗?我通过简单地解除引用指针和decltyping我得到的值来完成解决方法。但是为什么不能通过直接取消引用指针来实现呢?

2 个答案:

答案 0 :(得分:7)

作为@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;

答案 1 :(得分:5)

decltype(*p)int&,而不是int,您无法获得引用向量。不幸的是,typeid名称 std::vector<decltype(a)> v; 没有公开这种差异,因为它剥离了引用和cv限定符。

但这有效:

svg.append("path")
    .attr("transform", function(d) { return "translate(" + x(d.x) + "," + y(d.y) + ")"; })
    .attr("d", d3.svg.symbol().type("triangle-up"));