
【C/C++基础进阶系列】C/C++ 常见知识点总结
【2】
所有成员都必须是 类必须没有定义构造函数。 类必须没有类内初始值。 类不能继承自其他类,也不能有虚函数。
【5】
发布日期:2021-05-07 20:53:01
浏览次数:22
分类:精选文章
本文共 1931 字,大约阅读时间需要 6 分钟。
【C/C++基础进阶系列】C/C++ 常见知识点总结
【1】offsetof 宏
在C++中,offsetof
宏用于获取结构体中特定成员字段相对于结构体起始位置的偏移量(以字节为单位)。其工作原理如下:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER)
该宏通过以下步骤实现功能:
(TYPE*)0
:将数字0转换为指向TYPE
类型的指针,表示从内存地址0开始的sizeof(TYPE)
字节内存储一个TYPE
类型的变量。((TYPE*)0)->MEMBER
:获取该结构体变量中的MEMBER
成员变量。&(((TYPE*)0)->MEMBER
:使用取地址运算符&
获取MEMBER
成员变量的地址。(size_t)
:将地址强制转换为size_t
类型。因此,offsetof
宏返回的是MEMBER
成员在内存中的实际地址,这也正是MEMBER
成员相对于结构体首地址的偏移量。
【2】char *s
和 char s[]
的区别
在C++中,char *s = "hello"
和 char s[] = "hello"
的主要区别在于变量的可修改性和存储方式:
char *s = "hello"
:声明了一个指向char
类型的常量指针。在使用时,不能修改该指针指向的内存内容,因为char *s
是指针类型且被const
修饰。char s[] = "hello"
:声明了一个char
类型的数组变量。在使用时,可以通过修改数组内容来改变字符串值。作为函数形式参数时,char *s
和 char s[]
没有区别,因为它们都会被拷贝。
【3】左值和右值
在C++中,左值和右值的概念如下:
- 左值:指可以出现在等号左边的变量或表达式。左值可以对其进行取地址操作,通常是具有名字且持久存在的对象。
- 右值:指可以出现在等号右边的变量或表达式。右值不能取地址,通常是临时对象或字面量。
右值的子类包括:
- 将亡值(xvalue):生命期即将结束的值,通常与右值引用相关。
- 纯右值(prvalue):按值返回的临时对象、运算结果或原始字面量。
右值引用与左值引用主要区别在于:
- 右值引用可以读取和修改数据,且在编译时生成临时量。
- 左值引用只能读取数据,且在运行时生成临时量。
【4】C++ 聚合类
聚合类是C++中一种特殊的类,其特点如下:
public
。聚合类支持以下特性:
- 提供一个花括号扩起来的成员初始值列表,用于初始化聚合类的数据成员。
- 初始值的顺序必须与成员声明的顺序一致,若初始值列表的元素个数少于类成员数量,则后续成员会被默认初始化。
例如:
aggregate int a, int b = 10;
【5】reinterpret_cast
, const_cast
, static_cast
, 和 dynamic_cast
这四个_cast关键字用于类型转换,具体功能如下:
reinterpret_cast
:用于无关类型之间的转换,按比特级别进行操作。常用于指针、函数指针或枚举类型之间的转换。
const_cast
:用于移除const
或volatile
限定符。例如:
const_cast(expression)
-
static_cast
:用于静态类型转换,无运行时类型检查。常用于基类与派生类之间的转换。 -
dynamic_cast
:用于动态类型转换,具备运行时类型检查。常用于类层次结构中的上行和下行转换。 - 用于修饰变量、指针和引用,表示它们的值不能被修改。
- 对于指针,可以修饰指针本身或指针所指对象的类型。
- 对于函数参数和返回值,
const
的作用是防止意外修改。 constexpr
表示在编译期可求值的常量表达式。- 可用于修饰构造函数,确保所有成员变量在编译期初始化。
- 适用于只能使用常量表达式的场景。
- 用于声明一个函数不会抛出异常。
- 编译器不会生成异常处理代码,减少运行时开销。
explicit
用于修饰构造函数,表示构造函数不能进行隐式类型转换。- 只有当构造函数有一个参数或具有默认值(除了第一个参数)时,才能进行类型转换。
【6】const
和 constexpr
关键字
const
修饰符
constexpr
关键字
【7】noexcept
关键字
用途
示例
void func() noexcept;
【8】explicit
关键字
总结
以上是C/C++基础进阶系列中的一些关键知识点。如果需要进一步学习,可以查阅相关教材或在线资源。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月19日 01时50分02秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
记一次讲故事机器人的开发-我有故事,让机器人来读
2019-03-06
高德算法工程一体化实践和思考
2019-03-06
判断一个数是否是2的幂
2019-03-06
js 闭包(新)
2019-03-06
vscode 编辑python 如何格式化
2019-03-06
seo 回忆录百度基本概念(一)
2019-03-06
重新整理数据结构与算法(c#)—— 算法套路二分法[二十四]
2019-03-06
用ThreadLocal来优化下代码吧
2019-03-06
netcore中使用session
2019-03-06
Android 开发学习进程0.25 自定义控件
2019-03-06
多媒体文件格式全解说(下)--图片
2019-03-06
淘宝WAP版小BUG分析
2019-03-06
NodeJS+Express+MongoDB
2019-03-06
(四十四)c#Winform自定义控件-水波-HZHControls
2019-03-06
c#winform主题实现的一个方法
2019-03-06
asp.net打印网页后自动关闭网页【无需插件】
2019-03-06
一个人开发的html整站源码分享网站就这么上线了
2019-03-06
SQLServer 查看耗时较多的SQL语句(转)
2019-03-06
【计算机网络】应用层
2019-03-06