某日二师兄参加XXX科技公司的C++工程师开发岗位第15面:

面试官:了解auto关键字吗?

二师兄:嗯,了解一些(我很熟悉)。

面试官:说一说auto的用法吧?

二师兄:auto主要是为了编译器进行类型推导。比如:

auto i = 42;	//i 被推导位int型
std::vector<int> vi;
for(auto it = vi.cbegin(); it != vi.cend(); ++it)
{
std::cout << *it << std::endl;
} //迭代器的类型又臭又长
auto l_fun = [](int a, int b){return a+b;} //lambda的类型基本上不可能手写出来

二师兄:也可以作为函数返回类型的占位符:

auto add(int a, int b)->(decltype(a+b))
{
return a + b;
} //C++11 auto add(int a, int b)
{
return a + b;
} //C++14及以后

二师兄:在C++20中还可以推导参数的类型,从而实现类似模板的效果:

auto add(auto a,auto b)
{
return a+b;
} //C++20 此时可以这样使用 auto res = add(std::string("hello"),"world"); //类似以下效果,不过上面的写法更简洁
template<typename T,typename U>
auto add(T&& t, U&& u)->decltype(t+u)
{
return t + u;
}

面试官:嗯,不错。你觉得auto有哪些好处?

二师兄:主要有三点吧。一是使用auto关键字定义的变量必须被初始化。

int a;	//未初始化,直接使用是未定义的行为
auto b; //无法通过编译,必须被初始化
auto b = 1024; //等于 int b = 1024;

这个特征可以避免变量未初始化就使用所导致的未定义的行为。第二点就是减少五吴意义的代码,如迭代器的类型、lambda表达式的类型等。第三就是简化泛型编程。如前文代码所示。

面试官:好的。你还有什么要补充的吗?

二师兄:哦,还有一点,auto关键字在定义多个变量时,多个变量要推导出同一类型才可通过编译:

auto a = 42, b = 3.14;	//无法通过编译
auto a = 42, b = 1024; //a,b被推导位int型

面试官:好的,今天的面试就到这里,回去等通知吧。

今日二师兄的表现很好,基本上回答出了auto关键字的语法特性。实际上auto关键字在C++98/03中就有了,当作自动变量修饰符使用:

int main(int argc, char* argv[])
{
int a = 42; //自动变量
auto int b = 1024; //自动变量
}

大伙应该能看出来,在C++98/03中的auto关键字是否存在都不影响程序正确性,所以很少有程序员在在C++98/03使用auto关键字。C++标准委员会在C++11标准的制定中想到了被冷落的auto关键字,并在C++11新标准中赋予了它新的能力。

好了,今日份面试到这里就结束了。二师兄的表现不错,求各位小伙伴一个赞不过分吧。

关注我,带你21天“精通”C++!(狗头)

C++面试八股文:了解auto关键字吗?的更多相关文章

  1. 初学C++ 之 auto关键字(IDE:VS2013)

    /*使用auto关键字,需要先赋初值,auto关键字是会根据初值来判断类型*/ auto i = ; auto j = ; cout << "auto i = 5" & ...

  2. C++11 - 类型推导auto关键字

    在C++11中,auto关键字被作为类型自动类型推导关键字 (1)基本用法 C++98:类型 变量名 = 初值;   int i = 10; C++11:auto 变量名 = 初值;  auto i ...

  3. C++11特性:auto关键字

    前言 本文的内容已经不新鲜了.关于auto,翻来覆去被人知道的都是这些东西,本文并没有提出新颖的auto用法. 本人原是痛恨博客一篇篇都是copy而来缺乏新意的探索,当然,本文不是copy而来,但发布 ...

  4. 你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)

    3.5.2  字符串类型 使用char类型的变量我们可以表示单个字符,那么,我们又该如何表示拥有多个字符的字符串呢? 我们注意到,一个字符串是由多个字符串连起来形成的.很自然地,一种最简单直接的方法就 ...

  5. C++ auto 关键字的使用

    C++98 auto 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余的,因为就算不使用auto声明,变量依旧拥有自动的生命期: ...

  6. auto关键字使用

    auto类型变量--根据初始值推断真实的数据类型. 有些时候并不能很确定一个变量应该具备的数据类型,例如:将一个复杂表达式的值赋给某个变量,此时并不能很明显的确定这个值所具备的数据类型.此时auto关 ...

  7. 【C++11新特性】 auto关键字

    原文链接: http://blog.csdn.net/xiejingfa/article/details/50469045 熟悉脚本语言的人都知道,很多脚本语言都引入了“类型自动推断”技术:比如pyt ...

  8. C++ 11 auto关键字

    熟悉脚本语言的人都知道,很多脚本语言都引入了“类型自动推断”技术:比如Python,可以直接声明变量,在运行时进行类型检查.随着C++11标准的发布,C++语言也引入了类型自动推断的功能,这就是我们今 ...

  9. 关于C/C++中的“auto”关键字

    C/C++ 98标准 C++03标准 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期.此用法是多余的,因为即使定义变量时不加" ...

  10. 《面试八股文》之kafka21卷

    微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是moon,最新一篇面试八股文系 ...

随机推荐

  1. IO流中「线程」模型总结

    目录 一.基础简介 二.同步阻塞 1.模型图解 2.参考案例 三.同步非阻塞 1.模型图解 2.参考案例 四.异步非阻塞 1.模型图解 2.参考案例 五.Reactor模型 1.模型图解 1.1 Re ...

  2. pysimplegui之读写配置项操作

    用户设置 API 在 4.30.0 版中,有一组新的 API 调用可用于帮助"用户设置".将用户设置视为自动写入硬盘的字典.基本上就是这样. 在 4.50.0 版中,除了现有的 J ...

  3. [Linux/CENTOS]YUM提示: Another app is currently holding the yum lock; waiting for it to exit...

    1 问题描述 使用yum安装Nginx的安装依赖组件: yum -y install gcc gcc-c++ automake autoconf libtool make 但是,在执行过程中出现如下信 ...

  4. UESTC__ACM 1264 人民币的构造

    链接地址:https://acm.uestc.edu.cn/contest/198/problem/J 我们都知道人民币的面值是1.2.5.10,为什么是这个数值呢,我们分析了下发现,从1~10的每个 ...

  5. TS(一)环境搭建与基本类型

    1 TypeScript 环境搭建 1 准备NodeJs环境 2 npm全局安装typeScript npm i -g typescript 3 编写一个ts文件 4 使用tsc命令编译ts文件为js ...

  6. 万字长文,带你彻底搞懂 HTTPS(文末附实战)

    大家好,我是满天星,欢迎来到我的技术角落,本期我将带你一起来了解 HTTPS. 前言 其实网上写 HTTPS 的文章也不少了,但是不少文章都是从原理上泛泛而谈,只讲概念,没有讲原因,作为小白,看完还是 ...

  7. 如何在模型中引入可学习参数(Pytorch)

    错误实例: def init(self): self.w1 = torch.nn.Parameter(torch.FloatTensor(1),requires_grad=True).cuda() s ...

  8. Django笔记二十八之数据库查询优化汇总

    本文首发于公众号:Hunter后端 原文链接:Django笔记二十八之数据库查询优化汇总 这一篇笔记将从以下几个方面来介绍 Django 在查询过程中的一些优化操作,有一些是介绍如何获取 Django ...

  9. Django笔记三十之log日志记录详解

    本文首发于公众号:Hunter后端 原文链接:Django笔记三十之log日志的记录详解 这一节介绍在 Django 系统里使用 logging 记录日志 以下是一个简单的 logging 模块示例, ...

  10. [白嫖]阿里云服务器ECS以及无影云桌面

    [白嫖]aliyun 阿里云ECS和无影云桌面 [云服务器 ECS]学生认证约7个月 适合入门级开发者,用于搭建网站.小程序.云博客.部署主流开发环境,如 lamp.node.js.wordpress ...