当前位置: 首页 > news >正文

C++经典面试题目(四)

1、请解释const关键字的作用。

在C++中,const关键字主要用来表示“不变性”,即被它修饰的东西是不可修改的。它可以用于多种上下文:

  1. 修饰基本数据类型变量:声明一个常量,一旦初始化后,其值就不能再更改。

    const int pi = 3.14159; // pi是个常量,赋值后不能重新赋值
    
  2. 修饰指针

    • const T* p 表示指针p指向的数据是常量,不能通过p来修改。
    • T* const p 表示指针p自身是常量,不能重新指向其他地址,但可以通过p来修改它所指向的数据。
    • const T* const p 表示指针p既是常量,又指向一个常量,既不能改变指向也不能通过它修改数据。
  3. 修饰成员函数

    • const成员函数表明该函数不会修改类的成员变量,可以安全地用于常量对象。
    class MyClass {
    public:void display() const; // 一个不会修改类成员的成员函数
    };
    
  4. 作为函数参数

    • 当函数接受一个const引用或指针参数时,表明函数不会修改传入的实参。
    void printValue(const int& val); // 参数val是一个常量引用,不能在函数内部修改
    
  5. 修饰函数返回值

    • 表示函数返回的是一个常量对象或者临时对象的常量引用,防止返回的对象被修改。

2、什么是函数?如何定义一个函数?

在C++中,函数是一段封装了特定任务的代码块,可以通过名字重复调用。定义一个函数的基本结构如下:

return_type function_name(parameter_list) {// 函数体内的语句// ...return expression; // 可选,若函数有返回值则需包含此句
}

例如,定义一个计算两数之和的函数:

int add(int a, int b) {int result = a + b;return result;
}

3、请解释函数声明和函数定义之间的区别。

  • 函数声明(也称为函数原型)提供了函数的接口信息,包括函数的返回类型、函数名以及参数列表,但不包含函数体。声明仅是为了让编译器知道函数的存在及其调用方式,以便编译依赖于该函数的代码。
    int add(int, int); // 函数声明
    
  • 函数定义 包括了函数的所有信息,除了声明部分的信息外,还包含了函数的具体实现——函数体。只有函数被定义后,编译器才知道如何执行该函数所描述的任务。

4、C++中有哪些参数传递的方式?

主要有两种主要的参数传递方式:

  1. 值传递:函数接收到的是实参的一个副本,对形参的修改不影响实参。
  2. 引用传递:函数接收的是实参的引用,对形参的修改直接影响实参。
    • 直接引用:void func(int& arg)
    • 常量引用:void func(const int& arg)(避免不必要的复制,但保证不修改实参)

另外,C++中的指针也可以用来达到类似引用的效果,虽然不是直接的引用传递,但也能修改实参。


5、什么是内联函数?如何定义一个内联函数?

内联函数是一种优化手段,目的是为了消除函数调用时的开销,尤其是对于小而频繁调用的函数。编译器会在调用处展开函数体,而不是进行正常的函数调用。

如何定义一个内联函数
在函数声明或定义前添加inline关键字可以建议编译器将其视为内联函数,但编译器并不一定会采纳这个建议。

inline int add(int a, int b) {return a + b;
}

需要注意的是,内联函数的实现必须可见于调用者,否则编译器无法内联展开。并且,过大的函数体可能导致内联失败,因为编译器会基于一些因素决定是否真正实现内联,比如函数体的大小和复杂度等。

http://www.lryc.cn/news/325707.html

相关文章:

  • 2024/3/24 蓝桥杯
  • 用户验证:Streamlit应用程序与Streamlit-Authenticator
  • 风丘EV能量流测试解决方案 提高电动汽车续航能力
  • 【Python】输出一个 Python 项目下需要哪些第三方包
  • 程序员35岁会失业吗?【来自主流AI的回答】
  • 每天30分钟python(第一天)
  • gitlab简单介绍及安装使用
  • NetCore itext7 创建、编辑PDF插入表格、图片、文字(三)
  • 数据结构奇妙旅程之深入解析冒泡排序
  • 解决 sudo apt update E: The repository is not signed.
  • SCT2A26STER5.5V-100V Vin,4A峰值限流,高效异步降压DCDC转换器,替代LM5012、LM5013、LM5017、LM5164
  • 前端学习资源整合
  • 第16篇:奇偶校验器
  • Obsidian+PicGo+Gitee搭建免费图床
  • 计算机网络复试总结(五)
  • 设计模式 --4:工厂方法模式
  • Linux系统centos7.6更换yum源以及下载安装包到指定目录
  • 蓝桥杯-子矩阵
  • Nginx 故障排查之斜杠(/) --(附 Nginx 常用命令)
  • 【超全详解一文搞懂】Scala基础
  • 16:00面试,16:06就出来了,问的问题有点变态。。。
  • 【CTFshow 】web 通关 1.0
  • babel起手式
  • AI大模型在医疗领域的应用案例:自然语言处理与医疗文本分析
  • c语言常见错误
  • 分别使用TCP/UDP实现互相实时发送消息,接收消息功能
  • 使用阿里CICD流水线打包Vue项目到阿里的docker镜像私仓,并自动部署到服务器启动服务
  • 第十三届蓝桥杯物联网试题(省赛)
  • 将谷歌 Gemma AI大模型 部署安装本地教程(可离线使用)
  • ChatGPT提示词大全:解锁AI对话