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.mzph.cn/news/770103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis3源码深度解析(二十一)动态SQL实现原理(二)动态SQL解析过程、#{}和${}的区别

文章目录 前言8.5 动态SQL解析过程8.5.1 SQL配置转换为SqlSource对象8.5.2 SqlSource转换为静态SQL语句 8.6 #{}和${}的区别8.7 小结 前言 在【MyBatis3源码深度解析(二十)动态SQL实现原理(一)动态SQL的核心组件】中研究了MyBatis动态SQL相关的组件,如SqlSource用于…

AAC相关知识

一、AAC音频格式种类有哪些 AAC音频格式是一种由MPEG-4标准定义的有损音频压缩格式。AAC包含两种封装格式 ADIF(Audio Data Interchange Format音频数据交换格式)和ADTS(Audio Data transport Stream音频数据传输流)。 ADIF 特点…

【Node.js】流

概念 流(Stream)是一种用于在节点(Node)之间传输数据的抽象概念。 它可以看作是一种连续的数据流,数据可以按照连续的块(chunk)通过流从源(source)流向目的地&#xff…

LeetCode Hot100-哈希-两数之和

题目描述: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可…

蓝桥杯 完全二叉树的权值

Problem: 蓝桥杯 完全二叉树的权值 文章目录 思路解题方法前缀和双指针 复杂度前缀和Code双指针Code 思路 这个问题是关于完全二叉树的权值。完全二叉树的特性是,除了最后一层外,其他各层的节点数都达到最大,且最后一层从左向右连续。在这个问…

数据分析-Pandas类别数据序列合并

数据分析-Pandas类别数据序列合并 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表&…

双进程交互实现App自动重启

背景 你可能会好奇,有些手游(比如王者荣耀)是怎么实现资源更新后自动重启的? 这个体验确实不错,因为不需要用户手动点击桌面图标重启App,在一些数据恢复备份的场景中,很实用。比如&#xff0c…

代码随想录算法训练营第二十天| 654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

题目与题解 654.最大二叉树 题目链接:654.最大二叉树 代码随想录题解:654.最大二叉树 视频讲解:又是构造二叉树,又有很多坑!| LeetCode:654.最大二叉树_哔哩哔哩_bilibili 解题思路: 构造最大二…

数据库及中表的创建和管理

目录 创建数据库 使用数据库(使用,查看信息) 修改数据库(删除,修改)

promethus的安装使用

1、# 软件下载地址 https://prometheus.io/download/ https://grafana.com/grafana/download https://prometheus.io/download/ Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。 Prometheus 的优点 1、非常少的外部依赖,安装…

OceanBase4.2.2.1 单机集群在ArmX86安装(自测记录)

OceanBase OceanBase就不必多加介绍了,本次主要是分享对于它的安装使用,先说说背景,首先接触是因为信创国产化的要求,为满足支持国产化,安装了Arm架构下版本4.0.0,满足支持通过。后来项目实际使用&#xff…

由浅到深认识Java语言(20):包装类

该文章Github地址:https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.c…

JavaScript中实现数组去重

在JavaScript中实现数组去重是一个常见的问题,下面是一个使用不同方法实现数组去重的示例代码: 方法一:使用Set对象 javascript function uniqueArray(arr) { return [...new Set(arr)]; } const arr [1, 2, 3, 3, 4, 5, 5, 6]; cons…

leetcode刷题日记-外观数组

题目描述 解题思路 初始化字符串 init 为 “1”,作为外观数列的第一项。 通过循环迭代生成外观数列的下一项,循环次数为 n-1,因为已经初始化了第一项。 在每次迭代中,通过两个指针 pos 和 start 来遍历当前项 init,po…

C++中的枚举类型

C中的enum(枚举)类型是一种用户定义的类型,用于表示一组整数值,每个值都有对应的名称,增强了代码的可读性和可维护性。 1. 基本枚举类型 基本的枚举类型定义了一组命名的整数常量。 enum Color {RED,GREEN,BLUE };C…

创业之路:探索如何在Facebook上创业成功

引言 在当今数字化时代,社交媒体已成为创业者们开展业务、建立品牌和推广产品的重要平台之一。作为全球最大的社交媒体平台之一,Facebook为创业者提供了丰富的机会和资源。本文将探讨如何在Facebook上创业成功的关键因素和实践方法,帮助创业…

Spring Cloud: openFegin

文章目录 一、什么是openFegin 一、什么是openFegin Spring Cloud OpenFeign 是一个声明式的 Web Service 客户端,它使得编写 Web Service 客户端变得更加简单。OpenFeign 整合了 Ribbon 和 Hystrix,提供了负载均衡和容错机制。同时,OpenFei…

语 句 篇

文章目录 1. if 语句2. for 循环3. while 循环 1. if 语句 if 语句用于基于某个条件执行代码。如果条件为真(True),则执行相应的代码块;如果条件为假(False),则跳过该代码块。 基本语法&#…

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-第几个幸运数字

幸运数字是可以被3,5,7任一整除的数字&#xff0c;列举小明号码内的所有可能组合并计数。注意别忘了把1占的一位减去。 #include<stdio.h> typedef long long ll; int main(){long long ans 0, n 59084709587505LL;for(ll i 1; i < n; i * 3){//计算小于等于n的数…

关于MySQL查询JSON的语法糖

1. 根据单JSON对象查询 select count(1) from report_configuration r where json_extract(r.report_configuration,$.dataSetName) :dataSetName 2.纯数组JSON查询 one代表就遇到第一个就返回 固定写法 SELECT count(1) FROM statistics_property where data_set_name …