如何在c ++中自动工作?

时间:2015-12-04 09:38:41

标签: c++

从我所读到的" auto"声明是它根据函数的返回值获取数据类型。

int main()
{
    vector <int>  v;
    for(int i=0;i<5;i++)
    v.push_back(i);
    auto it=max_element(v.begin(),v.end());
    cout<<*it;
}

此代码有什么问题?什么地方我可以使用&#34; auto&#34;?

我收到错误&gt;&gt; &#34;它没有命名类型&#34;

1 个答案:

答案 0 :(得分:3)

auto 不仅限于函数的返回值,而是主要用于编译器实际上可以推断出变量类型的所有内容,而不必明确告诉它。所以:

  std::vector< std::string >::iterator it = myVector.begin();  // C++98 -> c'mon compiler, you know what the returned value of begin is, why do I have to write it?
  auto it = myVector.begin();  // C++11 -> ah, that's much more convenient
                                 // note that the type of it is still the same, you just didn't have to write it down

在C ++ 14中,auto也可以用于返回类型的函数,所以

// c++98
std::vector< std::string > createAFancyStringVector()
{
  std::vector< std::string > vec;
...
  return vec;
}

// c++14
auto createAFancyStringVector()
{
  // same function body, the compiler deduces the return type from the return statement
}

为了深入阅读,我推荐Scott Meyer的“Effective Modern C ++”,第2章。

啊,并回答这个问题:你的代码看起来很好,没有其他地方使用auto有意义(你可以在循环中使用auto而不是int,但这没有带来真正的好处)

其他信息:由于auto是C ++ 11的一项功能,它显然取决于支持它的编译器并启用了此功能。即那将是例如Clang&gt; 3.3或GCC> 4.3(带编译器标志-std = c ++ 11)或VC ++ 2013/2015