C++ 如何在VisualStudio中识别缺少的typename
在VS中是否仍然可以识别缺少的typename?VS是否至少产生了某种警告C++ 如何在VisualStudio中识别缺少的typename,c++,visual-studio,C++,Visual Studio,在VS中是否仍然可以识别缺少的typename?VS是否至少产生了某种警告 template<class T> void dum() { std::vector<T> dum_vector; typename std::vector<T>::iterator it = dum_vector.begin(); // VS compiles it with or without typename, but I would like to know
template<class T>
void dum() {
std::vector<T> dum_vector;
typename std::vector<T>::iterator it = dum_vector.begin();
// VS compiles it with or without typename, but I would like to know whether
// I forgot to put a typename, since without typename the code may not compile
// with another compiler (e.g. GCC)
}
模板
无效dum(){
std::向量dum_向量;
typename std::vector::iterator it=dum_vector.begin();
//VS编译它时使用或不使用typename,但我想知道
//我忘了输入typename,因为没有typename代码可能无法编译
//使用另一个编译器(例如GCC)
}
实际上,在当前版本的C++(C++ 11)中,你不需要写那么多。你可以这样写:
auto it = dum_vector.begin();
你完成了
请注意,MSVC10支持auto
,因此如果您正在使用它,我建议您使用auto
代替blah::blah::iterator
。如果您使用的是旧版本,最好升级并尽可能利用C++11特性的优点。如果您不能做到这一点,那么MSV不太可能告诉您缺少的typename,因为编译器首先编译的是非标准代码 我不确定它是否有100%的标准一致性,但MSVC为所有或大多数明确需要typename
的情况提供了产品。因此,只要您使用编译器标志/W1
或更高版本进行编译,您就可以了。“因为没有类型名,代码可能无法使用其他编译器进行编译”=>“因为没有类型名,代码的格式不好,C++”。我们谈论的是什么版本的VS?@FredOverflow这是如何重复的?这个问题不是问关键词是什么或它们在哪里应用,而是如何让MSVC从其唯一性宝座上退下来,至少提到它何时接受非标准语法。@Angew如果你知道规则,手动识别缺少的typename
s是可能的;)@虽然也可以编写没有bug的代码,但很少有人能够管理;-)这就是为什么我们有编译器会给我们警告和错误。谢谢,虽然我非常感谢C++11中的auto,但我目前从事的项目还没有切换到与C++11兼容的编译器。另外,谢谢你的补充说明,我也同意这一点。如果我的问题没有其他答案,我将接受你的答案(因为你试图解释为什么不提供这种支持)。这很奇怪。我正在使用\W3,但是VS10没有收到任何警告。