首页 > 编程语言 >C++面试八股文:了解auto关键字吗?

C++面试八股文:了解auto关键字吗?

时间:2023-06-15 23:23:40浏览次数:36  
标签:八股文 int auto C++ 关键字 add 师兄

某日二师兄参加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++!(狗头)

标签:八股文,int,auto,C++,关键字,add,师兄
From: https://www.cnblogs.com/binarch/p/17484463.html

相关文章

  • C++面试八股文:了解sizeof操作符吗?
    C++面试八股文:了解sizeof操作符吗?某日二师兄参加XXX科技公司的C++工程师开发岗位第10面:面试官:了解sizeof操作符吗?二师兄:略微了解(不就是求大小的嘛。。)面试官:请讲以下如何使用sizeof?二师兄:sizeof主要是求变量或者类型的大小。直接使用sizeof(type)或sizeof(var)`即可。......
  • 《C++》类和对象2
    初始化列表classPerson{public:Person():a(10),b(20),c(30){cout<<"初始化列表的调用"<<endl;}inta;intb;intc;};静态成员函数程序共享一个函数静态成员函数只能访问静态成员变量#include<iostream>usingnamespacestd;classCompute{public......
  • c++多线程 std::async std::future
    c++标准库中对线程操作有完善的封装,其中最常用到的如std::thread,std::async。EffectiveModernCpp中指出,应尽量使用std::async即基于任务的编程而非基于线程的编程。std::thread在前面的文章有提到过,此处仅对std::async作以记录。正如前面所说,std::async是基于任务的策略,本人理......
  • 【初识C++】(关键字,命名空间)
    @TOC一、C++中的关键字二、命名空间命名空间是对于全局变量来说,我们在定义变量或函数时,函数名可能会和库中的函数名产生冲突。比如:报错的意思是:库中存在rand这个函数,而我又定义一个rand这个变量,所以会产生名字的冲突。为了解决这个问题,C++引入了命名空间这个概念。而与该命名空间的......
  • C++学习(二)
    拷贝构造函数对象1=对象2:默认的拷贝构造函数1#include<iostream>2usingnamespacestd;34structPerson{5intage;6stringname;7};89intmain(){10Personp1={10,"张三"};11cout<<"age:"<<p1.......
  • C++学习(三)
    static静态修饰的变量,必须先声明,再实现,例如1classPerson{2public:3starticintage;4starticinitAge(){5//运行异常6age=10;7}8}91011正确写法12classPerson......
  • C++学习(四)
    对象继承1#include<iostream>2usingnamespacestd;34classPerson{5public:6intage;7char*name;8Person(char*name,intage){}9};10//类默认是私有的11//public:公开继承,不加public会导致main()函数中student.age无法引用......
  • C/C++《数据结构》课程设计指导书[2023-06-15]
    C/C++《数据结构》课程设计指导书[2023-06-15]《数据结构》课程设计指导书适用专业:计算机2022级编写人:李玉龙2023年5月《数据结构》课程设计指导书一、设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题;2.初步掌握软......
  • C/C++器材信息管理系统[2023-06-15]
    C/C++器材信息管理系统[2023-06-15]使用C++程序设计语言,完成一个项目,项目名为:器材信息管理系统,要实现的功能如下,且每项功能具有数据校对验证:1、实现新器材的录入,包括器材的名称、录入日期、购买价钱等信息;2、当有器材借用需求时,进行借用登记,主要流程为:查询器材数量,若库存数量大......
  • [问题解决]:ImportError: /home/test/anaconda3/envs/py39/bin/../lib/libstdc++.so.6
    报错(py39)test@test:~/code/Face/test_speed$pythonface_yaw_pitc_roll.pyTraceback(mostrecentcalllast):File"/home/test/code/Face/test_speed/face_yaw_pitc_roll.py",line17,in<module>importdlibFile"/home/test/anacon......