前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >const、sizeof与内联函数相关面试题

const、sizeof与内联函数相关面试题

作者头像
海盗船长
发布2022-11-02 18:09:42
4640
发布2022-11-02 18:09:42
举报
文章被收录于专栏:基础知识文章
1.const与#define相比有什么不同?
  • const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符匹配,没有类型安全检查,并且在字符替换中可能会产生意想不到的错误(边际效应)。
  • 有些集成测化的测试工具可以对const常量进行调试,但是不能对宏常量进行调试。
  • 在C++程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
  • 在C++程序中,类里面的数据成员加上mutable后,修饰为const的成员变量,就可以修改它了。
2.sizeof与strlen的区别?
  • sizeof操作符的结果类型是size_t,他在头文件中的typedef为unsigned int类型
  • sizeof是运算符,strlen是函数
  • sizeof可以用类型做参数,strlen只能用char* 做参数,且必须是以“\0”结尾的。sizeof还可以用函数做参数。
  • 数组作sizeof的参数不退化,传递给strlen就退化为指针
  • 大部分编译程序在编译的时候就把sizeof计算过了,是类型或是变量的长度。
  • strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度,而不是类型占内存的大小。
  • sizeof后如果是类型必须加括号,如果是变量名可以不加括号。这是因为sizeof是一个操作符,而不是函数。
  • 当使用了一个结构类型或变量时,sizeof返回实际的大小。当使用一静态变量的空间数组时,sizeof返回全部数组的尺寸。sizeof操作符不能返回被动动态分配的数组,或者外部的数组的尺寸。
  • 数组作为参数传给函数时传递的是指针而不是数组,传递的是数组的首地址。
  • sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有位置存储大小数据的数据类型,如位置大小的数组类型、未知内容的结构或联合类型、void类型等。
3.说明sizeof的使用场景
  • sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。
  • 用它可以看看某种类型的对象在内存中所占的单位字节。
  • 在动态分配一对象时,可以让系统知道要分配多少内存。
  • 便于一些类型的补充。
  • 由于操作数的字节数在实现时可能会出现变化,建议在设计操作数字节大小时用sizeof代替常量计算。
  • 如果操作数是函数中的数组形参或函数类型的形参,sizeof给出指针的大小。
4.内联函数和宏函数的区别是什么?
  • 内联函数和普通函数相比可以加快程序运行的速度,因此不需要中断调用,在编译的时候内联函数可以直接被镶嵌到目标代码中。而宏只是一个简单的替换。
  • 内联函数制作参数类型检查,这是内联函数跟宏比的优势。
  • inline是指嵌入代码,就是在调用函数的地方不是跳转而是直接把代码写进去。
inline一般只用于以下情况:
  1. 一个函数不断被重复调用
  2. 函数只有简单的几行,且函数不包括for、while、switch语句。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.const与#define相比有什么不同?
  • 2.sizeof与strlen的区别?
  • 3.说明sizeof的使用场景
  • 4.内联函数和宏函数的区别是什么?
  • inline一般只用于以下情况:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档