Visual Studio经过长时间的发展,很多用户都很了解Visual Studio auto关键字了,这里我发表一下个人理解,和大家讨论讨论。在C++0x中,auto关键字的意义发生了改变。从Visual C++ 2010开始,Visual Studio auto关键字将用于指引编译器根据变量的初始值来决定变量的数据类型。换句话说,我们可以把auto当成一种新的数据类型,它可以“从初始化器(initialize)中推导出所代表的变量的真正类型”。这种对auto关键字的使用方式可以大大消除当前替代方式所导致的冗长和易出错的代码。我们看一个实际的例子:
- #include <iostream>
- #include <map>
- #include <ostream>
- #include <regex>
- #include <string>
- using namespace std;
- using namespace std::tr1;
- int main() {
- map<string, string> m;
- const regex r("(\\w+) (\\w+)");
- for (string s; getline(cin, s); ) {
- smatch results;
- if (regex_match(s, results, r)) {
- m[results[1]] = results[2];
- }
- }
- for (auto i = m.begin(); i != m.end(); ++i) {
- cout << i->second << " are " << i->first << endl;
- }
- return 0;
- }
#t#在这段代码中,我们使用Visual Studio auto关键字来代替了真正的数据类型map<string, string>::iterator,这使得整个代码自然而简洁。
另外,跟其他数据类型一样,我们也可以对Visual Studio auto关键字进行修饰,例如添加const,指针(*),左值引用(&),右值引用(&&)等等,编译器会根据auto类型所代表的真正的数据来决定这些修饰的具体含义。
为了兼容一些旧有的C++代码,我们可以使用/Zc:auto这个编译器选项,来告诉编译器是采用Visual Studio auto关键字的原有定义还是在新标准C++0x中的定义。