C++面试八股文:C++中,函数的参数应该传值还是传引用?
某日二师兄参加XXX科技公司的C++工程师开发岗位第8面:
面试官:C++中,函数的参数应该传值还是传引用?
二师兄:要看参数的用途。如果是出参,必须传引用。如果是入参,主要考虑参数类型的大小,来决定传值还是传引用。
面试官:为什么不使用指针?
二师兄:传指针也称之为传引用(
pass by refereence)。但是在C++中不推荐使用指针,因为指针需要判断是否位空,而引用则无需担心。面试官:入参传值还是传引用有什么标准吗?
二师兄:没有标准吧。一般参数类型大小大于16字节(64位操作系统)时,传引用效果要好于传值。
面试官:为什么?
二师兄:因为传值相当于拷贝构造,当变量的类型尺寸大于16字节时,拷贝构造所消耗的时间大于解引用。此时传引用收益更高。
面试官:你知道函数参数传递的过程中,寄存器起什么作用吗?
二师兄:额。。了解过一些。一般简单的数据类型,可以通过寄存器传递。而对于结构图和类则使用是通过堆栈传递参数。当然不同的编译器对此实现不尽相同。
面试官:那么你知道什么是
cdel、stdcall、fastcall、thiscall吗?二师兄:听说过,不是很了解。。
面试官:好的,回去等通知吧。
今日二师兄的表现比较稳定,只有最后一问没有回答上来:
你知道什么是
cdel、stdcall、fastcall、thiscall吗?
这些都是C++中的函数调用约定。它们决定了函数参数的传递方式和堆栈的清理方式。
cdecl是默认的调用约定,它将参数按照从右到左的顺序依次压入堆栈中,由调用者负责清理堆栈。stdcall将参数按照从右到左的顺序依次压入堆栈中,由被调用函数负责清理堆栈。fastcall将前两个整型或指针参数存储在寄存器中,其余参数按照cdecl约定压入堆栈中。thiscall是用于成员函数的调用约定,它将this指针作为隐式参数传递,并将其存储在寄存器或堆栈中,其余参数按照cdecl约定压入堆栈中。
需要注意的是,这些约定可能因编译器和平台的不同而不同。
好了,今日份面试到这里就结束了,小伙伴们,对于今天二师兄的面试,能打几分呢?
关注我,带你21天“精通”C++!(狗头)
C++面试八股文:C++中,函数的参数应该传值还是传引用?的更多相关文章
- 深入理解python中函数传递参数是值传递还是引用传递
深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...
- Java:方法的参数是传值还是传引用
Java中方法的参数总是采用传值的方式. 下列方法欲实现对象的交换,但实际上是不能实现的. public void swap(simpleClass a,simpleClass b){ simpleC ...
- python函数的参数传递问题---传值还是传引用?
摘要:在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象.不可更改对象的传递属于传值,可更改对象属于传引用.想要在函数中传递 ...
- JAVA方法传递参数:传值?传引用?
先来看下面这三段代码: //Example1: public class Example1 { static void check(int a) { a++; } public static void ...
- python中给函数传参是传值还是传引用
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
- python函数传参是传值还是传引用?
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
- 如何理解javaSript中函数的参数是按值传递
本文是我基于红宝书<Javascript高级程序设计>中的第四章,4.1.3传递参数小节P70,进一步理解javaSript中函数的参数,当传递的参数是对象时的传递方式. (结合资料的个人 ...
- js中函数的参数为函数的情况即回调函数
js中函数的参数可以是数组对象也可以是函数,当参数为函数时我们叫做回调函数 //定义回调函数function B() { console.log("函数B")setTimeout( ...
- Python中函数传递参数有四种形式
Python中函数传递参数有四种形式 fun1(a,b,c) fun2(a=1,b=2,c=3) fun3(*args) fun4(**kargs) 四种中最常见是前两种,基本上一般点的教程都会涉及, ...
- 讲讲python中函数的参数
python中函数的参数 形参:定义函数时代表函数的形式参数 实参:调用函数时传入的实际参数 列如: def f(x,y): # x,y形参 print(x, y) f(1, 2) # 1, 2 实参 ...
随机推荐
- Xenomai 源码分析-Part I
Xenomai Edition v3.0.5 xenomai_init() static int __init xenomai_init(void) 源码分析 setup_init_state // ...
- 剑指offer 第18天
第 18 天 搜索与回溯算法(中等) 剑指 Offer 55 - I. 二叉树的深度 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长 ...
- Linux线程同步必知,常用方法揭秘!
一.为什么要线程同步 在Linux 多线程编程中,线程同步是一个非常重要的问题.如果线程之间没有正确地同步,就会导致程序出现一些意外的问题,例如: 竞态条件(Race Condition):多个线程同 ...
- 超全 泛微 E9 Ecology 9开发资料大全 开源资源下载 泛微E9二次开发 泛微开发实战经验 泛微开发实战例子 泛微二次开发项目例子 泛微二次开发Demo 泛微二次开发完整例子 泛微二次开发入门
由于工作需要,E9在泛微一推出来,以前所在的企业就第一时间上线了,经过四年多的运行,功能强大再加上在上面开发非常多的业务,一般的企业员工只需要打开泛微就可以处理完平时信息化的业务.后来又去外包公司专业 ...
- 方差分析1—单因素方差分析(R语言)
方差分析是由英国著名统计学家:R.A.Fisher推导,也叫F检验,用于多个样本间均数的比较(分析类别变量.有序变量).当包含的因子是解释变量时,关注的重点通常会从预测转向组别差异的分析.方差分析是一 ...
- [Windows/CMD]不重启设置/刷新环境变量
1 文由 当我已经通过如下路径设置了Maven的环境(maven-3.5.4). "我的电脑"->"属性"->"高级"-> ...
- [MAUI 项目实战] 手势控制音乐播放器(一): 概述与架构
这是一篇系列博文.请关注我,学习更多.NET MAUI开发知识! [MAUI 项目实战] 手势控制音乐播放器(一): 概述与架构 [MAUI 项目实战] 手势控制音乐播放器(二): 手势交互 [MAU ...
- v-if与v-show造成部分元素丢失的问题——v-if复用元素问题
pre { overflow-y: auto; max-height: 400px } img { max-width: 500px; max-height: 300px } 问题描述 在写tab切换 ...
- PyG 图神经网络依赖环境安装(Anaconda)
1.默认用户在Anaconda的虚拟环境中已安装Pytorch 2.打开anaconda prompt命令窗, activate "你的虚拟环境名称" 3.在激活后的虚拟环境下输入 ...
- java中的装箱 拆箱 以及 字符串与基本数据类型的转化
java中的装箱 拆箱 装箱就是 自动将基本数据类型转换为包装器类型:拆箱就是 自动将包装器类型转换为基本数据类型 ; Integer i =5;//装箱 int j=i;//拆箱 在装箱的时候自动调 ...