【发布时间】:2016-11-12 16:02:08
【问题描述】:
我对 C++ 还很陌生,所以如果我在这里太天真,请原谅我。我有一个证明我的问题的 sn-p:
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* 指针。这是怎么回事?
【问题讨论】:
-
It works for me 您使用的是哪个 IDE?哪个版本?
-
CLion 2016.2.3,带有最新更新。
-
以下划线后跟大写的标识符保留给实现。使用它们不是一个好主意。你不能保证代码会编译,或者如果它编译会产生任何特定的效果。
-
很高兴知道,C++ 解析起来相当复杂,而且我用于 C++ 的所有 IDE 都不可避免地有误报和误报(例外是正确配置的 libclang 设置,但 AFAIK CLion 不为此使用 libclang)。所以一般来说,你的 IDE 标记了一些东西,并不意味着它是错误的。尝试编译它,如果它编译,要么你的 IDE 配置错误,要么是一个错误。
-
感谢 cmets,我会带他们上船的。