如何在C ++ 11中自动实现

时间:2012-04-18 07:51:01

标签: c++ c++11

auto如何实施C++11?我尝试过关注,它适用于C++11

auto a = 1;
// auto = double
auto b = 3.14159;
// auto = vector<wstring>::iterator
vector<wstring> myStrings;
auto c = myStrings.begin();
// auto = vector<vector<char> >::iterator
vector<vector<char> > myCharacterGrid;
auto d = myCharacterGrid.begin();
// auto = (int *)
auto e = new int[5];
// auto = double
auto f = floor(b);

我想查看如何使用普通C++

实现这一目标

4 个答案:

答案 0 :(得分:10)

它与在函数模板中用于类型推导的操作大致相同,例如:

auto x = 1;

与...相同:

template <class T>
T function(T x) { return input; }

function(1);

编译器必须弄清楚您传递的表达式的类型作为参数,并从中实例化具有适当类型的函数模板。如果我们从这开始,那么decltype基本上会向我们提供此模板中T的内容,而auto正在向我们提供此模板中的x。< / p>

我怀疑模板类型推导的相似性使委员会更容易接受autodecltype语言 - 他们基本上只是添加新的方法来访问已经需要的类型推导用于功能模板。

答案 1 :(得分:7)

在C ++中,每个表达式都有类型。例如,(4+5*2)是一个表达式,其值等于14且类型为int。所以当你写这个:

auto v = (4+5*2);

编译器检测到右侧表达式的类型,并用检测到的类型替换auto(有一些例外,读取注释),它变成了:

int v = (4+5*2); //or simply : int v = 14;

同样,

auto b = 3.14159; //becomes double b = 3.14159;

auto e = new int[5]; //becomes int* e = new int[5];

等等

答案 2 :(得分:1)

auto关键字只是一种声明变量的方法,同时根据值对其进行类型化。

所以你的

auto b = 3.14159;

会知道b是双倍的。

有关auto的其他阅读,请参阅以下参考资料

C++ Little Wonders: The C++11 auto keyword redux

The C++0x auto keyword

答案 3 :(得分:1)

它像以前一样工作:)

您是否从未遇到编译器错误告诉您:

  

错误:无法从const char*转换为int

这样的代码片段:int i = "4";

好吧,auto只是利用编译器知道=符号右侧表达式类型的事实,并重用它来键入你声明的变量。