• 2024-11-04Rust属性#[derive(Debug)](Debug Trait)({:?}、{:#?})(Debug与Display区别)(fmt::DebugStruct)
    文章目录Rust属性`#[derive(Debug)]`深入解析引言DebugTrait概述什么是DebugTraitDebug与Display的区别Debug的用途-调试:快速查看变量的内部状态。-日志记录:记录程序执行过程中的详细信息。-测试:验证数据结构的正确性。`#[derive(Debug)]`的基本用法在结构体
  • 2024-11-03C++对象模型:编译分析
    为了更直观的感受到内存布局,我们使用gcc的编译选项-fdump-lang-class查看如下代码classBase{public:Base(){}virtual~Base(){}privte:inti;};使用如下命令编译g++-O0-std=c++11-fdump-lang-classtest.cpp可以得到一个显示内存布局的文件a-test.cpp.00
  • 2024-10-18C++内存模型实践探索
    前言C++对象模型是个常见、且复杂的话题,本文基于ItaniumC++ABI通过程序实践介绍了几种简单C++继承场景下对象模型,尤其是存在虚函数的场景,并通过图的方式直观表达内存布局。本文展示的程序构建环境为Ubuntu,glibc2.24,gcc6.3.0。由于clang和gcc编译器都是基于ItaniumC++ABI
  • 2024-10-18Rust宏之derive的设计及实战
    Rust宏可以极大的简化编写的难度,学习好宏可以更好的减少冗余代码。宏的基本概念Rust中的宏可以分为两大类:声明宏(DeclarativeMacros)和过程宏(ProceduralMacros)。声明宏:也称为macro_rules!宏,使用macro_rules!关键字定义。它是一种基于模式匹配的文本替换宏,类似于C语言中的宏定
  • 2024-09-14C++ 派生类赋值运算符应显示调用
    structBase{doublex{111.1};};structDerive:publicBase{doubley{222.2};Derive&operator=(constDerive&obj){if(&obj==this){return*this;}Base::operator=(obj);/
  • 2024-07-30在 C 中使用 Rust 函数
    在C中使用Rust函数主要通过Rust构建动态库,然后C使用该动态库来实现。构建动态库​ 首先要创建一个动态库项目,使用命令cargonewhello--lib。​ 我们需要指明库类型为动态库,在Cargo.toml文件中添加[lib]name="hello"crate-type=["cdylib"]​ 在lib.rs
  • 2024-05-20Rust 每日一库 —— Darling
    Darling1.名词解释field(字段)是指属于一个对象或数据结构的一个数据成员,在宏编程时我们往往期望获得字段的名词、字段的类型、以及额外的自定义属性2.使用原因期望在过程宏中解析syn::DeriveInput得出申明性属性。例1:结构体中的field--->bar中的skip属性为true
  • 2024-03-21C++ 对象模型
    1.普通类对象是什么布局?structBase{Base()=default;~Base()=default;voidFunc(){}inta;intb;};intmain(){Basea;return0;}2.带虚函数的类对象是什么布局?structBase{Base()=default;virtual~Base()
  • 2024-01-2531动态绑定的时机
    动态绑定的时机在类的构造函数中调用的任何(虚)函数,都不会发生动态绑定。如果不是通过指针或引用调用虚函数,也还是静态绑定。classBase{public: Base(intdata=10):ma(data){cout<<"Base"<<endl;} virtual~Base(){cout<<"~Base"<<endl;} virtualv
  • 2023-10-30多态的使用以及多态底层的实现(下)
    经过之前的学习我们知道了,继承能够实现多态的原理就是,在继承的父类和子类中各自存在一个虚表,父类和子类的虚表中各自储存了自己的虚函数,不同的点就是如果我们完成了虚函数的重写,那么子类(派生类)虚表中的那个虚函数地址是重写后的虚函数的地址。所以我们虚函数重写还有一个名字就是虚
  • 2023-10-23多态的使用以及多态底层的实现(下)
    经过之前的学习我们知道了,继承能够实现多态的原理就是,在继承的父类和子类中各自存在一个虚表,父类和子类的虚表中各自储存了自己的虚函数,不同的点就是如果我们完成了虚函数的重写,那么子类(派生类)虚表中的那个虚函数地址是重写后的虚函数的地址。所以我们虚函数重写还有一个名字就是虚
  • 2023-09-12用 Rust 的 declarative macro 做了个小东西
    最近几天在弄ddnspod的时候,写了个宏:custom_meta_struct解决什么问题#[derive(Debug,Clone,serde::Serialize,serde::Deserialize)]structActionA{url:String,//https://example.comversion:String,//v1.2.3a:u64,//...}#[derive(Deb
  • 2023-09-06FPGA
    支撑某项目FPGA验证,学习开发环境,查阅资料如下:derive_pll_clocks: 时序分析——DerivePLLClocks(生成PLL时钟)-面包板社区(eet-china.com)derive_clock_uncertainty:
  • 2023-06-18super.a=a-1;
    classBase{publicinta;voidprinta(){System.out.println(a);}}classDeriveextendsBase{publicinta;Derive(inta){this.a=a;super.a=a-1;}voidprinta(){System.out.println(a);super.printa();}}publicclassTest{publicst
  • 2023-04-224月18日总结
    .Copy和CloneRust中的Copy和Clonetrait都允许创建类型实例的副本。它们都提供了一种复制类型实例的方法,但它们之间存在一些重要的区别。了解这些区别有助更好地使用这两个特征。2.CopytraitCopytrait允许按位复制类型的实例。这意味着当您将一个变量赋值给另一个变量时,如果该
  • 2023-04-15Rust中的derive属性详解
    1.Rust中的derive是什么?在Rust语言中,derive是一个属性,它可以让编译器为一些特性提供基本的实现。这些特性仍然可以手动实现,以获得更复杂的行为。2.derive的出现解决了什么问题?derive属性的出现解决了手动实现一些特性时需要编写大量重复代码的问题。它可以让编译器自动生成
  • 2023-03-14derive layout
    https://www.cnblogs.com/pandamohist/p/13882020.html   #include"iostream"structB{virtualvoidf(){}uint64_tb;};structC{virtualvoidfc
  • 2023-03-10虚函数原理(转)
    原文:https://blog.csdn.net/jobbofhe/article/details/115199355虚函数,虚指针和虚表虚函数:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。虚表指针和虚
  • 2022-12-20小狼毫的小鹤双拼带模糊音输入法设置
    小狼毫的小鹤双拼带模糊音输入法设置小狼毫是开源的输入法,没有广告,不会有隐私问题,所有数据都在自己的本地。而且小狼毫是开源的输入法,非常方便定制。以下是小鹤双拼配置
  • 2022-11-28<五>关于虚析构函数
    问题一:哪些函数不能实现成虚函数虚函数依赖:1:虚函数能产生地址,存储在vftable中2:对象必须存储在vfptr->vftable->虚函数地址**构造函数**1:virtual+构造函数
  • 2022-11-27<三>关于重载 隐藏 覆盖
    重载关系一组函数要重载,必须处在同一个作用域zhong,而且函数名字相同,参数列表不同代码1中的Base中的show()和show(int)属于重载代码2中的Base中的show()和Deri
  • 2022-08-21互斥的Trait
    1.Copy和Drop我们无法为一个类型同时实现Copy和Drop特征。因为实现了Copy的特征会被编译器隐式的复制,因此非常难以预测析构函数执行的时间和频率。因此这些实现了C