C中"auto"关键字的目标是什么?使用C++ 0x它有新的含义,但这是否意味着如果我将C代码移植到C++ 0x编译器,我的代码将会中断?
小智 44
如果您的代码包含auto关键字,它将会中断.在将近30年的C和C++编程中,我从来没有遇到任何这样的事情.关键字是在第一个C编译器中引入的,用于指定本地函数变量,但编译器几乎立即变得足够聪明,不需要它,并且很少使用它的代码将在今天生存 - 这就是为什么C++ 0x选择回收它而不是引入一个会导致可移植性问题的新关键字.
C++ 0X中auto关键字的目的是允许编译器计算变量的类型,这是可能的:
vector <int> v;
auto it = v.begin():
Run Code Online (Sandbox Code Playgroud)
编译器可以看到v.begin()必须返回a vector<int>::iterator,因此可以创建该类型的变量,从而节省了大量的键盘输入或typedef创建.
Luc*_*cas 13
Bjarne Stroustrup在他的C++ 0x FAQ中提到auto:
"auto的旧含义("这是一个局部变量")是多余的和未使用的.一些委员会成员在数百万行代码中搜寻了少量几个用途 - 其中大多数是在测试套件中或似乎是错误".
所以我认为,编译器不会被标准强制实现旧的含义auto.
这个答案是错误的,请看下面的问题,我在这里留下答案作为参考.
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)
Run Code Online (Sandbox Code Playgroud)
它可以改变代码含义的唯一地方是当auto与隐式int规则一起使用时(如果没有指定类型 - >它是一个int)在这种情况下,我的例子中的第二行曾经有c2类型int,现在它是类型char.