VS2015在尝试执行此代码时会抛出很多错误:
int a = 5;
int *p = &a;
std::vector<decltype(*p)> v;
但是,当我检查这个decltype返回的类型时,我得到一个int!
typeid(decltype(*p)) == typeid(int) // returns true
任何人都可以向我解释一下吗?我通过简单地解除引用指针和decltyping我得到的值来完成解决方法。但是为什么不能通过直接取消引用指针来实现呢?
答案 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"));