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

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

Bjarne Stroustrup在他的关于auto C ++ 0x FAQ中提到:

“auto的旧含义(”这是一个局部变量“)是多余的和未被使用的。一些委员会成员在数百万行代码中搜寻了少量几个用途 – 其中大多数是在测试套件中或似乎是错误“。

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

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

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

 vector  v; auto it = v.begin(): 

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

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

这个答案是错的 ,请看下面的问题 ,我在这里留下答案作为参考。


AFAIK C ++ 0x对auto的使用与C传统的auto使用并不矛盾。 在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规则一起使用时(如果没有指定type – >它是一个int )在这种情况下,我的例子中的第二行曾经有c2类型int和现在它的类型为char

它很少使用; 它意味着一个局部变量。 现代编译器如VS2010 C ++赋予它新的含义 。