auto a = 10;
当编译器知道a
是int
,在编译时还是在运行时?如果它在运行时推断类型,它不会影响性能吗?
谢谢
编译时间。在 C++ 中,运行时类型信息在编译期间被剥离(没有 RTTI 或虚拟继承)。事实上,在运行时检查原始类型是不可能的。
我只是想添加一些其他答案没有解决的东西。
auto
不会得到特殊处理,它必须在编译时推断出类型。 auto
应该如何使用。是的,您可以这样做auto i = 2;
,而且效果很好。但是,您需要 auto 的情况是例如 lambda。lambda 没有可命名的类型(尽管您可以将其分配给std::function
)。另一种有用的情况是在类或函数模板中,很难确定某些操作的类型(有时可能是不可能的),例如,当在模板类型上调用函数时,该函数可能会返回不同的东西,具体取决于在给定的类型上,对于多种类型,基本上不可能弄清楚它将返回哪种类型。您当然可以将函数包装在 adecltype
中以计算返回值,但auto
编写起来更简洁。 auto
它完全在编译时完成,没有性能差异。
auto i = 2;
编译相同
int i = 2;
声明的变量类型auto
是在编译时完成的,这意味着如果您有以下代码片段:
auto i = 10; // i is an integer
i = 3.14; // i is still an integer, will truncate to 3
Herb Sutter(目前负责 C++ 标准化委员会的人)建议“尽可能使用 auto。它之所以有用有两个原因。首先,最明显的是,它方便我们避免重复我们已经说过的类型名称和“ (见他博客上的这篇文章)。的预期用途auto
是使开发人员的工作更轻松,所以只要它看起来合适,就可以随意使用它。