C++ 使用局部变量中的类成员类型

C++ 使用局部变量中的类成员类型,c++,types,member,C++,Types,Member,如果使用复杂类型声明变量,例如: std::unordered_map<PathKey,unsigned int> childDict; 但这不是有效的C++。 我知道还有其他选择: 自动,但我试图避免它有很多原因,包括代码的不可读性。您不容易弄清楚变量类型是什么(它是迭代器、对还是指针?)。上述方法不存在此问题 typedef首先定义类型,但是如果上面的方法有效,我认为它会更简洁,代码也会非常清晰 有办法做到这一点吗?C++11decltype()可以: #include &

如果使用复杂类型声明变量,例如:

std::unordered_map<PathKey,unsigned int> childDict;

但这不是有效的C++。 我知道还有其他选择:

  • 自动,但我试图避免它有很多原因,包括代码的不可读性。您不容易弄清楚变量类型是什么(它是迭代器、对还是指针?)。上述方法不存在此问题
  • typedef首先定义类型,但是如果上面的方法有效,我认为它会更简洁,代码也会非常清晰
有办法做到这一点吗?

C++11
decltype()
可以:

#include <vector>
struct A {
    vector<int> v;
    void f() {
        decltype(v)::iterator i = v.begin();
    }
};

int main() {
    return 0;
}
#包括
结构A{
向量v;
void f(){
decltype(v)::迭代器i=v.begin();
}
};
int main(){
返回0;
}

我会争论它是否比
auto
更具可读性,尽管它几乎正是您想要的语法。我认为没有其他方法可以从变量推断类型。

decltype(childDict)::迭代器
?在我看来,工具应该适合您的需要,而不是您应该适应该工具。这意味着,如果您的IDE阻止您使用auto,那么您应该寻找另一个IDE。我只是好奇,你使用的IDE中有什么与“自动”有关的问题?而且,除了缺少自动完成功能之外,我个人讨厌用自动阅读代码。这是品味和宗教的问题。
#include <vector>
struct A {
    vector<int> v;
    void f() {
        decltype(v)::iterator i = v.begin();
    }
};

int main() {
    return 0;
}