我对C ++很新,所以如果我在这里天真,请原谅我。我有一个片段来演示我的问题:
template<typename _T, typename _Key, typename _Val>
class Foo {
typedef std::pair<_Key, _Val> _P1;
using _P2 = std::pair<_Key, _Val>;
_T *t = new _T();
_P1 *p1 = new _P1();
_P2 *p2 = new _P2(); // (IDE) error: can't resolve constructor '_P2'
}
我的理解是using
等同于typedef
。为什么前两个声明有效但第三个声明由我的IDE标记?此外,它编译没有错误,我可以很好地获得_P2*
指针。这里发生了什么?