发布于 2020-07-17 00:23:13
一个简单的例子是初始化lambda变量。lambda的类型是匿名的,因此不能显式命名,必须推断:
auto var = [capture]{};发布于 2020-07-17 00:29:04
另一个例子是:
struct {
int x, y;
} g_xy;这里,g_xy是一个未命名类型的全局变量。例如,如果您试图返回它,就必须让编译器推断函数的返回类型,因为您不能命名它:
auto foo()
{
return g_xy;
}尽管可能的未命名类型(lamdas除外)很少有用和使用。
发布于 2020-07-17 03:53:12
样式指南给出了编译器进行自动类型推断的几个示例。最明显的情况是,当您使用auto关键字时,C++11引入了auto。auto是实际类型的占位符。无论何时使用auto,编译器都会从以下几个方面推导出类型:用于使变量无效的表达式类型;函数的尾部类型或返回表达式的类型。
通常,您会声明如下所示的变量:
int i = 0;其中为变量int指定类型i。但是,在现代C++中,您可以声明变量而不指定它们的类型,编译器将自动推断它们的类型:
auto a = 42; // a is an int
auto& b = a; // b is an int&
auto c = b; // c is an int
auto d{42}; // d is an int, not a std::initializer_list<int>
auto v = {1, 2, 3}; //v is a std::initializer_list<int>其他示例包括一个命名的lambda函数:
auto lower = [] (const char c) { return tolower(c); };在C++14中,返回类型和lambda参数都可以是auto的泛型lambda。
auto add = [](const auto a, const auto b) { return a + b; }需要注意的一点是,auto是类型的占位符,而不是const、volatile或引用规范的占位符。
使用auto的一些优点包括:
https://stackoverflow.com/questions/62945023
复制相似问题