当前位置: 首页 > news >正文

[C++]笔记-制作自己的静态库

一.静态库的创建

  • 在项目属性c/c++里面,选用无预编译头,创建头文件与cpp文件,需要注意release模式下还是debug模式,在用库时候要与该模式相匹配,库的函数实现是外界无法看到的,最后在要使用的项目里面导入.h文件和.lib文件

二.使用一个循环给二维数组赋值

  • 行数 : 第几个元素 / 原列数
  • 行数 : 第几个元素 % 原列数
int nums[3][4];
for(int i = 0 ;i<12;i++){nums[i/4][i%4] = i+1;}

三.断言

  • 程序的接口传入进去的数据可能是非法的,要想当传进去的值为非法值时候,给出提示,可以使用断言
  • 对非预期错误使用断言
    • 空指针
    • 输入或输出参数的值不在预期范围内
    • 数组的越界
  • 如果断言的条件返回错误,则终止程序执行
  • 头文件 #include <assret.h>
  • 原型定义
    • void assret(int expression);
  • 语句 assert(数据正常时候的条件)

 四.什么是空指针?

  • 空指针,就是值为零的指针,(任何程序数据都不会存储在地址为0的内存块中,他是被操作系统预留的内存块,是不能访问的),int *p =NULL;
  • 初始化为空指针,避免访问非法数据
  • 指针不在使用时,可以设置为空指针
  • 表示这个指针还没有具体的指向,使用前进行合法性判断
int *p =NULL;
if(p){//指针不为空,对指针进行操作
}

五.指针与指针相减

  • 指针的相加是不行的,被禁止的
  • 指针与指针做减法适用的场合,两个指针都指向同一个数组,相减的结果为两个指针之间的元素数目,而不是两个指针之间相差的字节数
  • 如果两个指针指向不同数组,则相减的结果是相差的字节数,但是这样的相减没有意义
  • 不同类型的指针不允许相减

六.const和指针

  • const 写在int之前,则限定不能通过*指针去改变该指针指向的值,但是可以指向别的指针
  • const 写在int之后,则限定可以通过*指针去改变该指针指向的值,但是不能指向别的指针
  • 两个const一个写在int前,一个写在变量名前,限制指针不能指向别的指针,并且不允许修改指针指向的值
  • 总结 : 看const离类型(int)近,还是理变量名近,离谁近,就修饰谁,谁就不能变
#include<iostream>
using namespace std;int main() {int wife = 30;int girl = 18;//第一种 : 渣男型,普通指针可以随意更改指向与指向地址的值int* zha_nan = &wife;cout << *zha_nan << endl;zha_nan = &girl;cout << *zha_nan << endl;//第二种 : 直男型,以自我为中心,可以改变指向,但是不可以改变指向的地址的值const int* zhi_nan = &wife;//*zhi_nan = 25;//报错,不能改变值zhi_nan = &girl;cout << *zhi_nan << endl;//第三种 : 暖男型,专一,不可以改变指向,但是可以改变指向的地址的值int* const nuan_nan = &wife;//nuan_nan = &girl;//报错,不能改变指向*nuan_nan = 25;cout << *nuan_nan << endl;//第四种 : 超级暖男型,超级专一,不能改变指向,也不能改变指向地址的值const int* const _super_nuan_nan = &wife;//*_super_nuan_nan = 25;//报错,不能改变指向地址的值//super_nuan_nan = &girl;//报错,不能改变指向//总结 : const理谁近就修饰谁,理(int)近,则修饰该指针的值不能改变,修饰变量,//	    则该指针不能在指向别的变量了
}

七.查看变量类型的函数

  • 头文件 #include <typeinfo>
  • 语法 : typeif(变量名).name()
#include <iostream>
#include <typeinfo>using namespace std;int main() {int i = 10;int* k = &i;cout << typeid(k).name()<< endl;
}

八.C++类中的默认构造函数显示声明

  • 显示声明方式 : 类名 () = default;
  • 作用,如果没有显示声明,类中如果没有其他构造函数的话,系统会默认声明默认构造函数,如果显示声明了,系统则不会声明默认构造函数,但是当加上该语法之后,即使类中有其他构造函数,系统仍然会声明一个默认的构造函数
  • 需要注意的是,salary_data() 的定义应该在类的声明中进行,并且必须是构造函数的声明之一。在类声明中可使用 = default,但在类的定义(实现)中则不能使用 = default。在类定义中,如果没有显式提供构造函数的实现,编译器会自动生成默认构造函数的实现。

http://www.lryc.cn/news/129464.html

相关文章:

  • 优酷视频码率、爱奇艺视频码率、B站视频码率、抖音视频码率对比
  • 用pytorch实现google net
  • 2023-8-15差分矩阵
  • 物理公式分类
  • vue实现登录注册
  • SpringBoot复习:(55)在service类中的方法上加上@Transactional注解后,Spring底层是怎么生成代理对象的?
  • 常用的图像校正方法
  • AWS security 培训笔记
  • 设计模式之代理模式(Proxy)的C++实现
  • vim 配置环境变量与 JDK 编译器异常
  • TiDB v7.1.0 跨业务系统多租户解决方案
  • 【题解】二叉树中和为某一值的路径(一)
  • css中变量和使用变量和运算
  • 数据结构之线性表的类型运用Linear Lists: 数组,栈,队列,链表
  • 成瘾机制中微生物群的神秘角色
  • arm安装docker与docker-copose
  • 9.文件基本操作
  • 【Java】Spring——Bean对象的作用域和生命周期
  • 数字孪生助力智慧水务:科技创新赋能水资源保护
  • css 实现文字横向循环滚动
  • VuePress 数学公式支持
  • stm32控制蜂鸣器源代码(附带proteus线路图)
  • selinux
  • 使用opencv4.7.0部署yolov5
  • Python - 协程基本使用详解【demo】
  • Android MVVM架构模式,详详详细学习
  • 亿赛通电子文档安全管理系统 RCE漏洞复现
  • 星际争霸之小霸王之小蜜蜂(三)--重构模块
  • JS的解析与Js2Py使用
  • Spring Bean的生命周期总结(包含面试题)