auto
很有用,因为您不必写出类型。但我想知道的是,auto
推导出的类型是否会影响类型可能不同的系统上的程序结果。我使用auto
编写的程序可以随身携带,还是我必须手动担心类型?
答案 0 :(得分:4)
如果您的类型需要特定或最小尺寸,则可能需要使用<stdint.h>
中的这些类型,否则auto
不应存在可移植性问题。
答案 1 :(得分:2)
auto
的结果是否可移植?好吧,让我们来看看这个简单的例子:
auto i = 123456;
这会到处编译吗?是。到处都是一样的意思吗?在16位系统上,这会将i
声明为long
。那是问题吗?并不是的。实际上,它恰好通过在需要时声明更大的类型来帮助实现可移植性。但那只是运气:
auto i = 192 * 643;
溢出,虽然它在数学上是一样的。
在第二个示例中,您不知道std::vector<int>::iterator
的实际类型是什么,因此auto i = myVec.begin()
具有未知类型。这种类型在编译器之间会有所不同。但同样,这些细节并不重要。重要的是,i
可用于迭代(和更改)myVec
。