【学习笔记】C++每日一记

简述#include<>和#include""的区别

通过#include<>和#include"“都可以将指定文件中的内容引入到当前文件,但在搜索被引入文件时两者采用了不同的搜索策略。
#include<>直接从编译器指定的路径处搜索;系统提供的头文件推荐使用#include<>;
#include”“首先在程序当前目录中进行搜索,然后再从编译器指定的路径处搜索。用户自定义的头文件必须使用#include”"这种方式引入。

简述#和##在define中的作用

宏定义中的#运算符将其后面的参数转换成字符串;
宏定义中的##运算符将前后的参数进行字符串连接。

简述assert断言的概念

对于调试程序来说,使用assert宏非常重要。assert是一个带参数的宏,并非一个函数,可以在assert.h找到assert宏的定义。在程序中使用assert检测条件表达式,如果表达式为假,表示检测失败,程序会向标准错误流stderr中输出一条错误信息,再调用abort函数终止程序执行。
由于assert是一个宏,对其过于频繁的使用会在一定程度上影响程序的性能,增加额外的开销。一个良好的编程习惯是在调试结束后,在#include语句前插入#define NDEBUG禁用assert宏。
在同一个assert中虽然可以检测多个条件,但是并不推荐这种使用放射式,因为如果断言失败,无法判断究竟是哪个条件最终影响了表达式的计算结果,所以最好在每个assert中只检测一个条件。另外不要在assert中修改变量的值,因为assert只在DEBUG版本中起作用,一旦使用了RELEASE版本,所有的assert都会被忽略,在assert内部对变量的修改也随之失效,这就会造成同一变量在不同程序版本中的取值不同,所以应该将assert语句与修改变量语句作为两条语句分开书写。

简述C++的类型转换操作符

在C语言中,进行类型转换时只需要在变量前加上变量类型,并且转换可以是双向的。对于复杂的自定义类型会显得不足,因此C++中提供了四种雷兴国转换操作符:static_cast、dynamic_cast、const-cast和reinterpret_cast。

static_cast可以完全代替C风格的类型转换实现基本类型转换。需要注意的是,如果父类指针指向一个父类对象,此时将父类指针转换成子类指针虽然可以通过static_cast实现,但是这种转换很可能是不安全的;如果父类指针本身就指向一个子类对象,则不存在安全性问题。

dynamic_cast只能用于对象指针之间的类型转换,可以将父类指针转换为子类指针,也可以将子类指针转换为父类指针,此位转换结果也可以引用,但是dynamic_cast并不等同于static_cast。

const_cast可以在转换过程中增加或删除const属性。一般情况下,无法将常量指针直接赋值给普通指针,但是通过const_cast可以移除常量指针的const属性,实现const指针到非const指针的转换。

reinterpret_cast可以将一种类型的指针直接转换为另一种类型的指针,不论两个类型之间是否有继承关系。此位reinterpret_cast可以把一个指针转化为一个整数,也可以把一个整数转换成一个指针。reinterpret_cast还经常用在不同函数指针之间的转换。

相关推荐

  1. 学习笔记C++每日

    2024-05-13 11:06:10       13 阅读
  2. C++学习笔记(十

    2024-05-13 11:06:10       35 阅读
  3. OpenCV C++ 学习笔记()

    2024-05-13 11:06:10       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-13 11:06:10       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-13 11:06:10       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-13 11:06:10       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-13 11:06:10       18 阅读

热门阅读

  1. Python小程序 - 文件处理1(使用AI工具)

    2024-05-13 11:06:10       11 阅读
  2. 规则引擎drools Part5

    2024-05-13 11:06:10       9 阅读
  3. 开发一款抓大鹅游戏

    2024-05-13 11:06:10       14 阅读
  4. Debug: Pytorch dataloaders OSError: Bad file descriptor

    2024-05-13 11:06:10       15 阅读
  5. leetcode题目7

    2024-05-13 11:06:10       13 阅读
  6. 【二叉树算法题记录】404. 左叶子之和

    2024-05-13 11:06:10       11 阅读
  7. 安卓LeakCanary研究

    2024-05-13 11:06:10       15 阅读
  8. SQLite 语法大全

    2024-05-13 11:06:10       14 阅读
  9. codeforce#939 (div2) 题解

    2024-05-13 11:06:10       23 阅读
  10. 什么是结对编程?

    2024-05-13 11:06:10       12 阅读
  11. Caffe: Convolutional Architecture for Fast Feature Embedding

    2024-05-13 11:06:10       14 阅读
  12. Docker 部署Redis

    2024-05-13 11:06:10       17 阅读