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

C++与C

文章目录

  • C++与C
    • 命令空间
    • const关键字
    • new/delete表达式
    • 引用(重点)
      • 概念
      • 引用的本质
      • 引用的使用场景
        • 引用作为函数的参数
        • 引用作为函数的返回值
      • 总结
    • 强制转换
    • 函数重载
      • extern "C"
      • 默认参数
    • bool类型
    • inline(内联)函数
    • 异常处理(了解)
    • 内存布局(重要)
    • C风格字符串
    • 练习

C++与C

命令空间

为什么要使用命名空间——为了避免名字冲突

什么是命名空间——名字空间,在命名空间中的实体与全局实体隔离,存放在名字空间的实体只在本空间有效,类似于文件夹。

命名空间的使用方式:

  • using编译指令——全部引入,容易引发命名空间的污染

    #include <iostream>
    using namespace std; //using编译指令int main(int argc, char * argv[]){cout << "hello,world" << endl;return 0;
    }
    
  • 作用域限定符——比较麻烦

    namespace wd
    {
    int number = 10;
    void display()
    {//cout,endl都是std空间中的实体,所以都加上'std::'命名空间std::cout << "wd::display()" << std::endl;
    }
    }//end of namespace wdvoid test0()
    {std::cout << "wd::number = " << wd::number << endl;wd::display();
    }
    
  • using声明机制——推荐

    #include <iostream>
    using std::cout;
    using std::endl;int number = 100;namespace wd
    {
    int number = 10;
    void display()
    {cout << "wd::display()" << endl;
    }
    }//end of namespace wdint main(void)
    {using wd::number;using wd::display;//只写函数名cout << "wd::number = " << number << endl;   //ok,访问到wd::numberdisplay();return 0}
    
  • 命名空间的嵌套使用

  • 匿名命名空间——希望一部分实体只在本文件中起作用,那么可以将它们定义在匿名空间中。

  • 跨模块调用问题

    • 全局变量和函数是可以跨模块调用的

    • 有名命名空间的实体可以跨模块调用

    • // 通过extern引入实体//externA.cc
      namespace wd
      {
      int val = 300;
      void display(){
      cout << "wd::display()" << endl;
      }
      }//end of namespace wd//
      //externB.cc
      namespace wd
      {
      extern int val;
      extern void display();
      }void test0(){
      cout << wd::val << endl;
      wd::display();
      }
      
  • extern与include的对比:

extern外部引入的方式适合管理较小的代码组织,用什么就引入什么,但是如果跨模块调用的关系不清晰,容易出错;

include头文件的方式在代码组织上更清晰,但是会一次引入全部内容,相较而言效率比较低。

  • 使用命名空间的规则

命名空间中的实体一定在命名空间之外使用,可以理解为命名空间只是用来存放实体。

const关键字

const修饰的变量称为const常量,之后不能修改其值。(本质还是变量,使用时也是当成变量使用,只是被赋予只读属性)

const常量在定义时必须初始化。

const int number1 = 10;
int const number2 = 20;const int val;//error 常量必须要进行初始化

const常量和宏定义常量的区别

  • 产生的阶段不同,宏定义发生在预处理阶段;const常量发生在编译阶段
  • 宏定义只是进行简单的文本替换,并没有类型,不进行类型检查,不安全;const常量有类型,会进行类型检查

const修饰指针类型

const int* p;	// 指向常量的指针	值不能改,指向可改
int * const p;	// 常量指针		值可以改 指向不能改
const int* const p // 双重限定

数组指针与指针数组

  • 数组指针:指向数组的指针
  • 指针数组:数组中元素是指针

函数指针与指针函数

  • 函数指针:指向函数的指针
  • 指针函数:返回值是指针的函数

new/delete表达式

C语言中使用malloc/free函数,C++使用new/delete表达式

// new语句中可以不加参数,初始化为各类型默认值;也可加参数,参数代表要初始化的值int * p = (int*)malloc(sizeof(int));
*p = 10;
free(p);int * p1 = new int();	//初始化为该类型的默认值
cout << *p1 << endl;int * p2 = new int(1);	// 加参数,代表要初始化的值
cout << *p2 << endl;
  • valgrind 工具集——用于调试和分析的工具,其中最为常用的工具是memcheck,用于检查内存错误如内存泄露、非法内存访问等。

malloc/free 和 new/delete 的区别

  • malloc/free是库函数;new/delete是表达式,后两者使用时不是函数的写法;
  • new表达式返回值是相应类型的指针,malloc返回void*
  • malloc需要输入字节数,new表达式不需要传递字节数,会根据相应类型自动获取空间大小
  • malloc申请的空间不会初始化,会有脏数据;new表达式申请的空间可以直接初始化;
int* p = new int(4);	// 直接初始化
delete p;int* p = new int[10]();	// 申请数组空间
delete [] p;int* p = new int[3]{1, 2, 3};
delete [] p;p = nullptr;	// 安全回收

使用new语句申请数组空间需要使用delete [] p的形式回收堆空间

引用(重点)

概念

在C++中,在逻辑层面上(在使用时),引用是一个已定义变量的别名

//定义方式:    类型 & ref = 变量;
int num = 2;
int& ref = num;

引用一经绑定,无法更改绑定

void test0(){int num = 100;int & ref = num;//声明ref时进行了初始化(绑定)//int & ref2; //error	// 声明引用时,必须进行初始化cout << num << endl;cout << ref << endl;cout << &num << endl;cout << &ref << endl;
}

引用的本质

C++中的引用本质上是一种被限制的指针。

引用的底层也是指针(常量指针)实现的,所以引用是占内存的,占据的大小就是一个指针的大小。

引用与指针的联系与区别

联系:

  • 引用和指针都是用来间接访问变量
  • 引用的底层还是指针,可视为一个被限制的指针

区别:

  • 引用必须初始化,指针可以不初始化
  • 引用不能修改绑定,但指针可以
  • 在代码层面对引用本身取址取到的是变量本体的地址,但是对指针取址取到的是指针变量的地址。

引用的使用场景

引用作为函数的参数

当用引用作为函数的参数时,其效果和用指针作为函数参数的效果相当。当调用函数时,函数中的形参就会被当成实参变量或对象的一个别名来使用,也就是说此时函数中对形参的各种操作实际上是对实参本身进行操作,而非简单的将实参变量或对象的值拷贝给形参。

使用指针作为函数的形参虽然达到的效果和使用引用一样,但传参时要以地址形式传入(如果使用引用则可直接传入变量或对象),也由于指针的灵活更可能导致问题的产生,故在C++中推荐使用引用而非指针作为函数的参数。

void swap(int x, int y){//值传递,发生复制int temp = x;x = y;y = temp;
}void swap2(int * px, int * py){//地址传递,不复制int temp = *px;*px = *py;*py = temp;
}//在实参传给swap3时,
//其实就是发生了初始化int & x = a;
//int & y = b;
void swap3(int & x, int & y){//引用传递,不复制int temp = x;x = y;y = temp;
}
引用作为函数的返回值

要求:当以引用作为函数的返回值时,返回的变量其生命周期一定是要大于函数的生命周期的,即当函数执行完毕时,返回的变量还存在。

目的: 避免复制,节省开销

int func(){//...return a;   //在函数内部,当执行return语句时,会发生复制 
}   int & func2(){//...return b;   //在函数内部,当执行return语句时,不会发生复制
}  

注意事项:

  • 不要返回局部变量的引用
  • 不要轻易返回一个堆变量的引用,非常容易造成内存泄露

总结

  1. 在引用的使用中,单纯给某个变量取个别名没有什么意义,引用的目的主要用于在函数参数传递中,解决大块数据或对象的传递效率和空间不理想的问题
  2. 用引用传递函数的参数,能保证参数传递中不产生副本,提高传递的效率,还可以通过const的使用,保证了引用传递的安全性。
  3. 引用与指针的区别

强制转换

C语言中的强制转换在C++代码中依然可以使用,这种C风格的转换格式非常简单

C风格强制转换的缺点

  • 因为可以在任意类型之间转换,隐藏着巨大的风险
  • C风格装换不容易查找

C++类型装换

  • static_cast:最常用的类型装换符

    int iNumber = 100float fNumber = 0;
    fNumber = (float) iNumber;//C风格
    fNumber = static_cast<float>(iNumber);
    
  • const_cast:修改类型的const属性,基本不用

    指向常量的指针被转化成普通指针,并且仍然指向原来的对象;

    常量引用被转换成非常量引用,并且仍然指向原来的对象;

  • dynamic_cast:

  • reinterpret_cast:

函数重载

C 语言中不支持函数重载,C++才支持函数重载。

函数同名,但函数参数的数量、类型、顺序任一不同则可以构成重载

函数重载实现原理: 名字改编(name mangling)——当函数名称相同时 ,会根据参数的类型、顺序、个数进行改编

extern “C”

在C/C++混合编程的场景下,如果在C++代码中想要对部分内容按照C的方式编译,应该怎么办?

extern "C" void func() //用 extern"C"修饰单个函数
{}//如果是多个函数都希望用C的方式编译
//或是需要使用C语言的库文件
//都可以放到如下{}中
extern "C"
{
//……
}

默认参数

void func(int x = 0, int y = 0){cout << "x = " << x << endl;cout << "y = " << y << endl;
}void test0(){func(24,30);func(100);func();
}

通常将默认值的设置放在声明中而不是定义中

注意:如果在声明中和定义中都传了默认值,会报错

函数参数赋默认值从右向左(严格)

bool类型

bool类型是在C++中一种基本类型,用来表示true和false。true和false是字面值,可以通过转换变为int类型,true为1,false为0.

任何非零值都将转换为true,而零值转换为false(注意:-1也是代表true

bool变量占1个字节的空间。

bool b1 = -100;
bool b2 = 100;
bool b3 = 0;
bool b4 = 1;
bool b5 = true;
bool b6 = false;
int x = sizeof(bool);//x = 1

inline(内联)函数

如果一个函数的操作特别简单,那么调用函数的开销就比执行函数操作要大得多

简单的函数还可以用宏定义函数替换,虽然提升了效率,但没有安全检查的过程,容易出错,并且宏函数不可调试。

内联函数,作为编译器优化手段的一种技术,在降低运行时间上非常有用。

内联函数:使用inline函数不会有函数调用的开销。

inline int max(int x, int y)
{return x > y ? x : y;
}

在代码中在一个函数的定义之前加上inline关键字,就是对编译器提出了内联的建议。如果建议通过,就会进行内联展开。

编译器将使用函数的定义体来替代函数调用语句,这种替代行为发生在编译阶段。

内联函数的代码直接替换函数调用的语句

简单操作的函数,推荐使用内联函数:

  • inline是一个建议,并不是强制性的
  • inline的建议如果有效,就会在编译时展开,可以理解为是一种更高级的代码替换机制
  • 函数体内容如果太长或者有循环之类的结构,不建议inline,以免造成代码膨胀;比较短小并且比较常用的代码适合用inline。

对比总结

  • 宏函数

    优点:只是进行字符串的替换,并没有函数的开销,对于比较短小的代码适合使用;

    缺点:没有类型检查,存在安全隐患,而且比较容易写错。

  • 普通函数

    优点:可调试,有类型检查,比宏函数更安全;

    缺点:函数的调用会增加开销。

  • 内联函数

    既具备宏代码的效率,又增加了安全性,所以在C++中应尽可能的用内联函数取代宏函数。

异常处理(了解)

throw:抛出异常

double division(double x, double y)
{if(y == 0)throw "Division by zero condition!";return x / y;
}

try-catch:捕获异常

double division(double x,double y){if(y == 0){throw "Deivision by zero";}return x/y;
}void test0(){double x = 100, y = 0;try{cout << division(x,y) << endl;}catch(const char *){ //catch匹配的是异常的类型cout << "hello,there is an error" << endl;}catch(double x){cout << "double " << x << endl;}
}

注意:catch的是类型,不是具体信息

内存布局(重要)

以32位系统为例,一个进程在执行时,能够访问的空间是虚拟地址空间。理论上为2^32,即4G,有1G左右的空间是内核态,剩下的3G左右的空间是用户态。从高地址到低地址可以分为五个区域:

  • 栈区:操作系统控制,存放局部变量,函数

  • 堆区:程序员分配,动态变量

  • 全局区/静态区:数据段,存放全局变量、静态变量

  • 文字常量区:只读段,存放文字常量和全局常量 如const char* p = "hello"

  • 程序代码区:只读段,存放函数体的二进制代码

在这里插入图片描述

C风格字符串

C风格字符串即以空字符结尾的字符数组。

如果用数组形式保存字符串(字符数组,保存在栈区)。,注意留出终止符,当然也可以用上语法糖来初始化字符数组;

void test() {char str1[] = {'h', 'e', 'l', 'l', 'o', '\0'};char str2[] = "hello";cout << str1 << endl;cout << str2 << endl;
}

如果用指针形式,直接定义为const char * (字符串常量,保存在文字常量区),C++代码中标准C风格字符串的写法。

void test() {const char* pstr = "hello";// pstr[0] = 'H'	// ERROR
}

字符串常量存放在内存的只读区,如果用普通的char*指针保存其地址,可能会尝试通过指针修改内容,进而引发错误。如果用const char *指针,则可避免这种风险。

注意:输出流运算符具有默认重载效果,接char*时会进行自动的访问,输出的是字符串内容,而不是地址。

练习

  1. 什么是命名空间?其作用是什么?匿名命名空间有什么特点?

  2. const关键字与宏定义的区别是什么?(面试常考)

  3. 什么是常量指针和指向常量的指针?什么是数组指针和指针数组?什么是函数指针和指针函数?请举例说明

  4. new/delete与malloc/free的区别是什么?(面试常考)

  5. 简述C++中引用与指针的联系与区别

  6. 什么是函数重载?其实现原理是什么?如何进行C与C++的混合编程?

  7. 什么是inline函数?inline与带参数的宏定义之间的区别是什么?

  8. C++内存布局是怎样的?请简述

  9. C语言中的struct与C++中的struct有什么区别?

相关文章:

C++与C

文章目录 C与C命令空间const关键字new/delete表达式引用&#xff08;重点&#xff09;概念引用的本质引用的使用场景引用作为函数的参数引用作为函数的返回值 总结 强制转换函数重载extern "C"默认参数 bool类型inline&#xff08;内联&#xff09;函数异常处理&…...

Nginx​中间件的解析

目录 一、Nginx的核心架构解析 二、Nginx的典型应用场景 三、Nginx的配置优化实践 四、Nginx的常见缺陷与漏洞 一、Nginx的核心架构解析 ​​事件驱动与非阻塞IO模型​​ Nginx采用基于epoll/kq等系统调用的事件驱动机制&#xff0c;通过异步非阻塞方式处理请求&#xff0c;…...

Ansys Zemax | 在 MATLAB 中使用 ZOS-API 的技巧

附件下载 联系工作人员获取附件 本文将介绍一些在MATLAB中使用 ZOS-API 的技巧&#xff0c;以提高您的工作效率并充分利用 ZOS-API 的功能。 简介 OpticStudio开发了应用程序接口 (API) &#xff0c;用户可以使用API与不同的脚本环境进行连接和交互。使用API&#xff0c;用…...

js 生成pdf 并上传文件

js 生成pdf 并上传文件 使用 JsPDF html2Canvas 代码直接使用 注意注释 import JsPDF from jspdf import html2Canvas from html2canvas // 上传文件的方法 import { handleUploadImage } from /utils/uploadQuillEditdownPDF() {// 要打印元素的idconst cloneDom document.…...

刷刷刷刷刷sql题

NSSCTF 【SWPUCTF 2021 新生赛】easy_sql 这题虽然之前做过&#xff0c;但为了学习sql&#xff0c;整理一下就再写一次 打开以后是杰哥的界面 注意到html网页标题的名称是 “参数是wllm” 那就传参数值试一试 首先判断注入类型&#xff08;数字型或字符型&#xff09; 传1 …...

JavaScript 中的 this 及 this 指向的改变方法

在 JavaScript 的世界里&#xff0c;this是一个既强大又容易让人困惑的概念。它的指向在不同的函数调用场景下会动态变化&#xff0c;而call()、apply()和bind()这三个方法则为我们提供了精确控制this指向的能力。本文将从基础概念出发&#xff0c;结合具体案例&#xff0c;带大…...

安卓模拟器绕过检测全解析:雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南

安卓模拟器绕过检测全解析&#xff1a;雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南 模拟器过检测合集雷电mumu蓝叠逍遥夜神WSA 转自风车2025 前言 随着手机游戏和应用的普及&#xff0c;越来越多的用户选择在PC上通过模拟器来运行安卓应用。然而&#xff0c;许多应用和游戏为…...

VSCode中安装GitGraph

前提是先安装git&#xff0c;官方下载地址&#xff1a;Git - Downloads 1. 在VSCode中安装GitGraph插件 2. 文件->首选项->设置&#xff0c;打开设置界面&#xff0c;在设置界面搜索git path 3. 打开配置文件配置git安装路径&#xff1a; 4. 打开源代码管理&#xff0c;…...

StartAI「万物迁移」功能设计师实操教程:模特换衣场景应用

一、功能核心优势解析 智能识别与场景融合 基于迁移学习算法&#xff0c;精准定位服装轮廓&#xff08;支持复杂材质如蕾丝、镂空设计&#xff09;&#xff0c;自动匹配目标场景的光影方向与色温。 效率革命 传统PS手动换衣需2-3小时&#xff0c;使用万物迁移可压缩至2-5分…...

【RK3588 嵌入式图形编程】-SDL2-扫雷游戏-放置标记

放置标记 文章目录 放置标记1、概述2、更新Globals.h3、放置标记4、渲染标记5、标记计数6、完整代码7、改进建议8、总结在本文中,我们实现标记放置和跟踪以完成的扫雷游戏项目。 1、概述 在我们扫雷游戏文章系列的最后部分中,我们将添加玩家在可疑的地雷位置放置标记的功能。…...

【Python】Selenium切换网页的标签页的写法(全!!!)

在使用selenium做网站爬取测试的时候&#xff0c;我们经常会遇到一些需要点击的元素&#xff0c;才能点击到我们想要进入的页面&#xff0c; 于是我们就要模拟 不断地 点点点击 鼠标的样子。 这个时候网页上就会有很多的标签页&#xff0c;你的浏览器网页标签栏 be like: 那…...

Spring Boot多环境配置详解

一、为什么需要多环境配置 在实际项目开发中&#xff0c;我们通常需要将应用部署到不同的环境中&#xff0c;比如&#xff1a; 开发环境&#xff08;dev&#xff09; - 开发人员本地开发调试使用测试环境&#xff08;test&#xff09; - 测试人员功能测试使用生产环境&#x…...

进阶篇 第 6 篇:时间序列遇见机器学习与深度学习

进阶篇 第 6 篇&#xff1a;时间序列遇见机器学习与深度学习 (图片来源: Tara Winstead on Pexels) 在上一篇中&#xff0c;我们探讨了如何通过精心的特征工程&#xff0c;将时间序列预测问题转化为机器学习可以处理的监督学习任务。我们学习了如何创建滞后特征、滚动统计特征…...

RHCE 作业二(密钥登录实验)

1.进入ssh主配置文件恢复配置&#xff1a; 2.vim进入ssh子文件夹查看配置 3.重启服务 /etc/ssh/ key结尾或者.pub结尾的文件全部都是密钥 sshd_confg.d目录是服务的子配置文件 ssh_confg.d目录是客户端你的子配置文件 ~/.ssh/ 是当前用户的配置文件 4.服务器和客户端分别…...

android contentProvider 踩坑日记

写此笔记原因 学习《第一行代码》到第8章节实现provider时踩了一些坑&#xff0c;因此记录下来给后来人和自己一个提示&#xff0c;仅此而已。 包含内容 Sqlite数据库CURD内容provider界面provider项目中书籍管理provider实现逻辑用adb shell确认providercontentResolver接收…...

K8s:概念、特点、核心组件与简单应用

一、引言 在当今云计算和容器技术蓬勃发展的时代&#xff0c;Kubernetes&#xff08;简称 K8s&#xff09;已成为容器编排领域的事实标准。它为管理容器化应用提供了高效、可靠的解决方案&#xff0c;极大地简化了应用的部署、扩展和运维过程。无论是小型初创公司还是大型企业…...

基于表面肌电信号sEMG的手势识别——以Ninapro DB1数据集使用CNN网络识别为例

完整代码获取 评论区或者私信留邮箱 接论文辅导&#xff01;中文核心辅导&#xff01;SCI三四区辅导&#xff01; 可接模型改进 任务描述 表面肌电信号( sEMG ) 是一种生物电信号&#xff0c;存在于肌肉神经。 当大脑下达肌肉动作指令&#xff0c;肌肉会产生控制信号&#xff…...

黑盒测试——等价类划分法实验

任务&#xff1a; 设某程序有两个输入&#xff1a;整数x1和整数x2&#xff0c;计算Yf(x1,x2)。x1和x2的取值范围为1< x1<500,1< x2<500。当x1在[1,200) 取值且x2在[1,300] 取值时&#xff0c;Yf(x1,x2) x1x2&#xff1b;当x1在[200,500] 取值且x2在[1,300] 取值时&…...

深度学习4月22笔记

1、过拟合与欠拟合 在训练深层神经网络时&#xff0c;由于模型参数较多&#xff0c;在数据量不足时很容易过拟合。而正则化技术主要就是用于防止过拟合&#xff0c;提升模型的泛化能力(对新数据表现良好)和鲁棒性&#xff08;对异常数据表现良好&#xff09;。 1. 概念认知 …...

【MySQL数据库入门到精通-03 数据类型及案列】

文章目录 一、三类数据类型二、数值类型三、字符串类型四、日期时间类型五、日期时间类型 一、三类数据类型 MySQL中的数据类型有很多&#xff0c;主要分为三类&#xff1a;数值类型、字符串类型、日期时间类型。 二、数值类型 比如&#xff1a; 1). 年龄字段 – 不会出现负数…...

【机器学习】决策树算法中的 “黄金指标”:基尼系数深度剖析

一、基尼系数的基本概念 基尼系数&#xff08;Gini Impurity&#xff09;在决策树分类算法中&#xff0c;是用于衡量数据纯度的重要指标&#xff0c;与信息熵有着相似的功能。在样本集合里&#xff0c;基尼系数代表随机选取一个样本时&#xff0c;该样本被分错的概率 。假设一…...

植被参数遥感反演技术革命!AI+Python支持向量机/随机森林/神经网络/CNN/LSTM/迁移学习在植被参数反演中的实战应用与优化

在全球气候变化与生态环境监测的重要需求下&#xff0c;植被参数遥感反演作为定量评估植被生理状态、结构特征及生态功能的核心技术&#xff0c;正面临诸多挑战。随着遥感技术的发展&#xff0c;数据复杂度不断提升&#xff0c;模型精度的要求也越来越高。同时&#xff0c;多源…...

【AI】SpringAI 第四弹:接入本地大模型 Ollama

Ollama 是一个开源的大型语言模型服务工具。它的主要作用是帮助用户快速在本地运行大模型&#xff0c; 简化了在 Docker 容器内部署和管理大语言模型&#xff08;LLM&#xff09;的过程。 1. 确保Ollama 已经启动 # 查看帮助文档 ollama -h# 自动下载并启动 ollama run deeps…...

C# MP3 伴奏

使用建议&#xff1a; 参数调节指南&#xff1a; 低频人声残留&#xff1a;降低CenterFrequency(800-1500Hz) 高频人声残留&#xff1a;提高CenterFrequency(2500-3500Hz) 消除力度不足&#xff1a;提高EliminationStrength(0.9-1.0) 伴奏失真&#xff1a;降低EliminationSt…...

【springsecurity oauth2授权中心】将硬编码的参数提出来放到 application.yml 里 P3

在application.yml里添加配置 application.yml oauth2:client:id: clientsecret: secretauthentication-method: client_secret_basicgrant-types: authorization_code,refresh_tokenredirect-uris:- http://localhost:8081/login/oauth2/code/client- http://localhost:8081…...

【Ansible】批量管理 Windows自动化运维

一&#xff0c;前期准备 1&#xff0c;控制端&#xff08;Linux&#xff09;的要求 Ansible可以在安装了Python 2&#xff08;2.7版&#xff09;或Python 3&#xff08;3.5及更高版本&#xff09;的任何机器上运行。控制端计算机不支持Windows。 2&#xff0c;客户端&#x…...

AES-128、AES-192、AES-256 简介

AES&#xff08;Advanced Encryption Standard&#xff09; 是一种广泛使用的对称加密算法&#xff0c;由美国国家标准与技术研究院&#xff08;NIST&#xff09;于2001年正式采纳&#xff0c;用于替代旧的 DES 和 3DES。AES 基于 Rijndael 算法&#xff0c;支持 128 位、192 位…...

osxcross 搭建 macOS 交叉编译环境

1. osxcross 搭建 macOS 交叉编译环境 1. osxcross 搭建 macOS 交叉编译环境 1.1. 安装依赖1.2. 安装 osxcross 及 macOS SDK 1.2.1. 可能错误 1.3. 编译 cmake 类工程1.4. 编译 configure 类工程1.5. 单文件编译及其他环境编译1.6. 打包成 docker 镜像1.7. 使用 docker 编译 …...

联通余额查询接口

接口名称 1) 请求地址 https://ucbss.10010.cn/npfweb/NpfWeb/Mustpayment/getMustpayment?number13112345586&province051&commonBean.phoneNo13112345586&channelType101https://ucbss.10010.cn/npfweb/NpfWeb/Mustpayment/getMustpayment?number13112345586&…...

Python 设计模式:桥接模式

1. 什么是桥接模式&#xff1f; 桥接模式是一种结构型设计模式&#xff0c;它通过将抽象部分与其实现部分分离&#xff0c;使得两者可以独立变化。桥接模式的核心思想是将抽象和实现解耦&#xff0c;从而提高系统的灵活性和可扩展性。 桥接模式的核心思想是将一个类的接口与其…...

7.6 GitHub Sentinel后端API实战:FastAPI高效集成与性能优化全解析

GitHub Sentinel Agent 用户界面设计与实现:后端 API 集成 关键词:前后端分离架构、RESTful API 设计、数据序列化、命令行工具开发、集成测试 后端 API 集成关键技术实现 本阶段需要完成前端界面与后端服务的无缝对接,实现以下核心功能: #mermaid-svg-FFnzT13beWV52dtx …...

Smart AI:在AI浪潮中崛起的智能NFT生态革命者

技术引领&#xff0c;智能进化&#xff1a;Smart AI强势登场 在全球AI技术浪潮席卷之际&#xff0c;由澳大利亚顶尖技术团队倾力打造的Smart AI平台横空出世&#xff0c;以其革命性的NFT智能进化系统&#xff0c;正在彻底重塑数字资产的未来图景。Smart AI不仅是一个平台&…...

Linux——基于socket编程实现简单的Tcp通信

前言1&#xff1a;想要实现一个简单的Tcp通信不难&#xff0c;对于初学者而言&#xff0c;难点在于使用了大量未曾接触过的函数调用&#xff0c;所以本篇重点在于详解每部分代码中相关函数的功能。 1. 简单认识一下TCP传输 TCP通信协议是面向字节流的、可靠的、有连接的传输&a…...

STL C++详解——priority_queue的使用和模拟实现 堆的使用

priority_queue的使用 std::priority_queue 是 C 标准模板库&#xff08;STL&#xff09;中的一个容器适配器&#xff0c;提供了优先队列的功能。 优先队列&#xff1a;是一种特殊的队列&#xff0c;队列中的每个元素都有与之关联的优先级&#xff0c;优先级高的元素会先出队…...

是否可以使用非被动 S4P 文件进行反嵌?

AEDT 电路去嵌入算法使用假定线性时不变 &#xff08;LTI&#xff09; 行为的转换。如果非被动 S 参数块不是 LTI&#xff0c;则倒数函数将无法按预期工作。...

GAEA的技术优势:分层加密与去中心化数据治理

GAEA采用分层加密架构&#xff0c;将用户数据分为三个层级&#xff1a; 基础层&#xff08;链上数据&#xff09;&#xff1a;用户身份哈希、资源贡献记录等核心数据通过零知识证明&#xff08;ZK-SNARKs&#xff09;进行链上加密&#xff0c;确保不可篡改和匿名性。 情感层…...

使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第九讲)

这一期讲解GUI_guider中的容器控件的使用以及相关函数&#xff0c;容器本质上是具有布局和自动调整大小功能的基本对象 &#xff0c;通常用来装载其他子控件。 打开上一期的项目&#xff0c;在工具栏中选中容器控件拖拽到界面中&#xff0c;具体如图所示&#xff1a; 容器默认…...

SparkStreaming概述

SparkStreaming主要用于流式计算&#xff0c;处理实时数据。 DStream是SparkStreaming中的数据抽象模型&#xff0c;表示随着时间推移收到的数据序列。 SparkStreaming支持多种数据输入源&#xff08;如Kafka、Flume、Twitter、TCP套接字等&#xff09;和数据输出位置&#xf…...

LeetCode---整数反转

整数反转 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c;就返回 0。 示例 示例 1&#xff1a; 输入&#xff1a;x 123 输出&#xff1a;321 示例 2&#xf…...

Conceptrol: Concept Control of Zero-shot Personalized Image Generation(个性化图像生成)

文章目录 一、论文介绍二、项目部署三、效果展示3.1ipadapter plus sd1.5的效果3.2ipadapter plus sd1.5 plus concept的效果3.3两者结果的比较&#xff1a;原本的ipadapter、加了concept的ipadapter 一、论文介绍 个性化图像生成中的平衡问题&#xff1a;现有的zero-shot adap…...

【Harmony】常用工具类封装

文章目录 一&#xff0c;简介二&#xff0c;网络请求工具类2.1、鸿蒙原生http封装2.2、第三方axios封装(需提前下载依赖) 三、录音笔相关工具类3.1、录音封装(录入)3.2、录音封装(放音/渲染)3.3、文件写入封装(针对录音/放音功能) 四、RDB关系型数据库4.1、relationalStore简答…...

大模型部署到本地就是私有化部署吗?

大模型私有化的定义需要从部署方式和数据/模型控制权两个维度来理解&#xff0c;不能简单地仅以“部署位置”或“数据训练”单一条件判断。以下是具体分析&#xff1a; 1. 大模型私有化的核心定义 根据知识库中的描述&#xff08;[1][2][3][8]&#xff09;&#xff1a; 私有化…...

C语言高频面试题——嵌入式系统中中断服务程序

在嵌入式系统中&#xff0c;中断服务程序&#xff08;ISR&#xff09;的设计需遵循严格的规则以确保系统稳定性和实时性。以下是对这段代码的分析及改进建议&#xff1a; 代码分析 __interrupt double compute_area (double radius) { double area PI * radius * radius; pri…...

JavaFX 实战:从零打造一个功能丰富的英文“刽子手”(Hangman)游戏

大家好&#xff01;今天我们要挑战一个经典的单词猜谜游戏——“刽子手”&#xff08;Hangman&#xff09;&#xff0c;并使用 JavaFX 这个强大的 GUI 工具包来赋予它现代化的交互体验。这个项目不仅有趣&#xff0c;而且是学习和实践 JavaFX 核心概念的绝佳途径&#xff0c;涵…...

第 2.1 节: 机器人仿真环境选择与配置 (Gazebo, MuJoCo, PyBullet)

在真实机器人硬件上进行开发和测试既耗时又存在风险&#xff08;硬件损坏、安全问题&#xff09;。机器人仿真环境提供了一个虚拟的沙盒&#xff0c;让开发者能够在计算机中模拟机器人的物理行为、传感器读数和环境互动&#xff0c;极大地加速了开发、测试和调试过程。特别是对…...

网络开发基础(游戏)之 粘包分包

粘&#xff08;nin&#xff09;包、分包 在网络通信中&#xff0c;TCP协议是面向流的协议&#xff0c;没有消息边界概念&#xff0c;粘包和分包是常见的问题。在某种情况下&#xff08;例如网络环境不稳定&#xff09;就会导致"粘包"和"分包"问题&#xf…...

联邦元学习实现个性化物联网的框架

随着数据安全和隐私保护相关法律法规的出台&#xff0c;需要直接在中央服务器上收集和处理数据的集中式解决方案&#xff0c;对于个性化物联网而言&#xff0c;训练各种特定领域场景的人工智能模型已变得不切实际。基于此&#xff0c;中山大学&#xff0c;南洋理工大学&#xf…...

使用 Nacos 的注意事项与最佳实践

&#x1f4f9; 背景 Nacos 凭借其强大&#x1f4aa;的服务发现、配置管理和服务管理能力&#xff0c;成为构建分布式系统的得力助手。然而&#xff0c;要充分发挥 Nacos 的优势&#xff0c;实现系统的高性能、高可用&#xff0c;掌握其使用过程中的注意事项和最佳实践至关…...

在Pytorch中使用Tensorboard可视化训练过程

【在Pytorch中使用Tensorboard可视化训练过程】 https://www.bilibili.com/video/BV1Qf4y1C7kz/?share_sourcecopy_web&vd_sourcef00bfb41b3b450c3767070ed82f30ac8 主要功能&#xff1a; 1.保存网络结构图 2.保存训练集的损失Loss&#xff0c;验证集的正确性Accuracy以…...

15.电感特性在EMC设计中的运用

电感特性在EMC设计中的运用 1. 共模电感与差模电感的差异2. 电感的高频等效特性![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b4dc000672af4dd69a528450eb42cf10.png)3. 电感在EMC设计中的使用注意事项3.1 LC滤波计算3.2 并联型多级浪涌防护的电感退耦 1. 共模电感…...