C中“auto”关键字的目标是什么?使用C ++ 0x它有新的含义,但这是否意味着如果我将C代码移植到C ++ 0x编译器,我的代码将会中断?
答案 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
指定了自动存储持续时间(与static
,extern
,register
相对)。由于这是默认设置,因此我从未在任何代码中看到auto
。不过,我没有做太多的C。
答案 3 :(得分:5)
此答案错误,请参阅following question,我将此处留下答案作为参考。
AFAIK C ++ 0x使用auto
与auto
的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。