C++11新特性(一):auto关键字看这一篇就够了

在 C++11 当中 auto 关键字用于根据一个值或者表达式让编译器自动推导所定义变量的类型。

本章从 auto 关键字的作用、推导规则以及使用 auto 关键字的常见场景三个部分来介绍 auto 关键字。

作用

auto 关键字主要用于在编译时期让编译器根据一个常量或者另一个变量自动推导所定义变量的类型。实际上,auto关键字还可以用在函数的返回值推导上面。
下面是 auto 的一些基本用法:

auto x = 6;				// x是int类型
auto pi = new auto(1);  // pi是int*
const auto *v = &x, u = 6;	// v是const int*,u是const int类型
static auto y = 0.0;		// y的类型是double

auto 的推导规则

auto 不仅可以和指针、引用结合起来使用,还可以带上 cv 限定符(cv-qualifierconstvolatile 限定符)。
再来看一些例子:

int x = 0;
// 注释当中写的是auto推导出的类型
auto *a = &x;  // int类型
auto b = &x;	// int*
auto &c = x;	// int
auto d = c;		// int

const auto e = x;	// int
auto f = e;			// int

auto 关键字的推导规则如下:

  1. 当声明变量不带指针或者引用时,auto的推导结果与初始化表达式抛弃引用和 cv 限定符后类型一致;例如说,const int x = 0; auto y = x;。这里 y 的类型是 int 类型,而不是 const int
  2. 当声明变量带指针或者引用时,auto 的推导结果将保持初始化表达式的 cv 属性。

不能使用 auto 自动推导的情况

  1. 函数的参数
  2. 结构体内部的非静态成员变量;
  3. 定义数组
void func(auto a = 1) {}   // 不能用于函数参数
struct Foo
{
    auto var1 = 0;	// 错误:不能用于非静态成员变量
    static const auto var2 = 0;  // var2的类型是static const int
};

使用 auto 的一些常见场景

  1. 变量的类型声明。
auto x = 1.0;   // x -> double
  1. autodecltype 结合使用构成尾置返回值类型
template<typename T1, typename T2>
auto add(const T1& a, const T2& b) -> decltype(a + b) 
{
    return a + b;
}

这样我们就能够让编译器根据函数的参数推导出函数返回值的类型,而不必再增加一个额外的模板参数。

  1. 简化容器迭代器的声明
std::vector<int> vec = {1, 2, 3, 4};
for (auto it = vec.begin(); it != vec.end(); ++it) {
    std::cout << *it << std::endl;
}
  1. 范围 for 循环
for (auto x : vec)
{
    std::cout << x << std::endl;
}
  1. lambda 表达式
auto add = [](int a, int b) { return a + b; };  // 自动推导 lambda 的返回类型
int result = add(10, 20);
std::cout << "Result: " << result << std::endl; 
  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值