C的“自动”关键字的目标

时间:2010-05-17 07:56:19

标签: c++ c c++11

C中“auto”关键字的目标是什么?使用C ++ 0x它有新的含义,但这是否意味着如果我将C代码移植到C ++ 0x编译器,我的代码将会中断?

5 个答案:

答案 0 :(得分:44)

如果您的代码包含auto关键字,它将会中断。在将近30年的C和C ++编程中,我从来没有遇到任何这样的事情。关键字是在第一个C编译器中引入的,用于指定本地函数变量,但编译器几乎立即变得足够聪明而不需要它,并且很少使用它的代码将在今天生存 - 这就是为什么C ++ 0x选择回收它而不是引入一个新的关键字导致可移植性问题。

C ++ 0X中auto关键字的目的是允许编译器计算变量的类型,这是可能的:

vector <int> v;
auto it = v.begin():

编译器可以看到v.begin()必须返回vector<int>::iterator,因此可以创建该类型的变量,从而节省了大量的键盘输入或typedef创建。

答案 1 :(得分:13)

Bjarne Stroustrup在C++0x FAQ中提及auto

  

“汽车的旧意义(”这是一个   局部变量“)是多余的   没用过。几个委员会成员   在数百万行中搜寻   代码只找到少数用途 -   其中大部分都在测试套件中   或似乎是错误。“

所以我假设,编译器不会被标准强制实现auto的旧含义。

答案 2 :(得分:9)

在C中,auto指定了自动存储持续时间(与staticexternregister相对)。由于这是默认设置,因此我从未在任何代码中看到auto。不过,我没有做太多的C。

答案 3 :(得分:5)

此答案错误,请参阅following question,我将此处留下答案作为参考。


AFAIK C ++ 0x使用autoauto的C传统用法并不矛盾。在C auto中与类型一起使用。

auto char c1 = 'a'; // OK, old meaning of auto is still valid
auto c2 = 'b'; // OK, new meaning of auto (deduce c2 is a char)

唯一可以改变代码含义的地方是当auto与隐式int 规则一起使用时(如果没有指定类型 - &gt;它是{{ 1}})在这种情况下,我的示例中的第二行曾经有int类型c2,现在它的类型为int

答案 4 :(得分:2)

很少使用;它意味着一个局部变量。现代编译器如VS2010 C ++给它一个new meaning