auto a = 10;
编译器在编译时或运行时知道a
是int
吗?如果它在运行时推断类型,是否会影响性能?
由于
答案 0 :(得分:49)
编译时间。在C ++中,运行时类型信息在编译期间被剥离(没有RTTI或虚拟继承)。实际上,在运行时检查基元类型是不可能的。
答案 1 :(得分:17)
我只是想补充一些其他答案没有解决的问题。
auto
不会得到特殊处理,它必须在编译时推断出类型。 auto
。是的,你可以做auto i = 2;
,它运作正常。但是你需要auto的情况就是lambda。 lambda没有namable类型(尽管你可以将它分配给std::function
)。另一种有用的情况是在类或函数模板中,很难弄清楚某些操作的类型(有时可能是不可能的),例如,当在模板类型上调用函数时,该函数可能会返回不同的函数。在给定的类型上,有多种类型,这基本上不可能确定它将返回哪种类型。你当然可以将函数包装在decltype
中来计算返回值,但auto
写得更清晰。 auto
的主要用途答案 2 :(得分:9)
它完全在编译时完成,没有性能差异。
auto i = 2;
编译与
相同int i = 2;
答案 3 :(得分:7)
声明为auto
的变量的类型在编译时完成,这意味着如果您有以下代码片段:
auto i = 10; // i is an integer
i = 3.14; // i is still an integer, will truncate to 3
Herb Sutter(目前负责C ++标准化委员会的人)建议“尽可能使用auto。它有两个原因。首先,最明显的是它方便我们避免重复我们已经输入的类型名称声明并且编译器已经知道了。其次,当一个类型具有未知或不可知的名称(例如大多数lambda函数的类型)时,它不仅仅是一种方便,你不能轻易拼写或根本不能拼写。“ (请参阅他的博客上的this帖子)。 auto
的用途是让开发人员更容易使用,所以只要看起来合适,就可以随意使用它。