C++面试八股文之了解auto关键字

 更新时间:2023年06月16日 08:37:27   作者:二进制架构  
这篇文章主要为大家介绍了C++面试八股文之了解auto关键字问题解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

某日二师兄参加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新标准中赋予了它新的能力。

以上就是C++面试八股文之auto关键字的详细内容,更多关于C++面试的资料请关注脚本之家其它相关文章!

相关文章

  • C语言菜鸟基础教程之加法

    C语言菜鸟基础教程之加法

    C语言中运算符和表达式数量之多, 在高级语言中是少见的。正是丰富的运算符和表达式使C语言功能十分完善。 这也是C语言的主要特点之一。今天我们来看看加法运算
    2017-10-10
  • C++位操作实战掩码、提取与组装

    C++位操作实战掩码、提取与组装

    在C++编程中,位操作是基础而强大的技术,允许在二进制级别上操作数据,对性能优化、内存节省和底层硬件控制至关重要,文章探讨了掩码操作、字节提取与组装等技术,并介绍了bitset类模板的使用,帮助处理二进制数据,通过实例解析如何设置、清除、检查特定位
    2024-10-10
  • qt5之QFile读写文件功能详解

    qt5之QFile读写文件功能详解

    这篇文章主要为大家详细介绍了qt5之QFile读写文件功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • delete[] p->elems和free(p->elems)区别介绍

    delete[] p->elems和free(p->elems)区别介绍

    delete[]和free()都是释放内存的函数,但它们具有不同的使用方法和适用情况,这篇文章主要介绍了delete[] p->elems和free(p->elems)有什么区别,需要的朋友可以参考下
    2023-04-04
  • 使用Qt封装一个发送http请求通用类

    使用Qt封装一个发送http请求通用类

    这篇文章主要为大家详细介绍了如何使用Qt封装一个通用类,可以通过QNetworkRequest和QNetworkReply进行http请求,感兴趣的可以了解一下
    2024-12-12
  • C++ OpenCV制作黑客帝国风格的照片

    C++ OpenCV制作黑客帝国风格的照片

    这篇文章主要介绍了如何通过C++ OpenCV制作出黑客帝国风格的照片,文中的示例代码讲解详细,对我们学习OpenCV有一定帮助,需要的可以参考一下
    2022-01-01
  • C语言运算符的重载详解

    C语言运算符的重载详解

    大家好,本篇文章主要讲的是C语言运算符的重载详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • QT实现用户登录注册

    QT实现用户登录注册

    这篇文章主要为大家详细介绍了QT实现用户登录注册,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C++人工模拟栈实现方法

    C++人工模拟栈实现方法

    在本篇内容里小编为大家整理了关于C++人工模拟栈实现方法和步骤,需要的朋友们可以学习下。
    2018-12-12
  • C语言文件操作中 fgets与fputs 函数详解

    C语言文件操作中 fgets与fputs 函数详解

    这篇文章主要介绍了C语言文件操作中 fgets与fputs 函数详解的相关资料,需要的朋友可以参考下
    2017-06-06

最新评论