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

C# 结构体

总目录


前言

在 C# 编程中,结构体(struct)是一种非常重要的数据结构,它为我们提供了一种轻量级的存储和操作数据的方式。本教程将带你深入了解结构体的概念、特点、使用方法,以及一些使用结构体的最佳实践。


一、什么是结构体(struct)?

1. 基本概念

  • 结构体(struct)是一种可封装数据和相关功能的值类型,使用 struct 关键字定义结构体。

  • 它可以包含多个不同类型的成员,如字段、属性、方法、索引器和构造函数等

  • 与类(class)不同,结构体存储在栈(stack)上,而不是堆(heap)上,这使得它们在某些场景下具有更高的性能优势,特别是对于小型数据的存储和操作。

  • 通常,可以使用结构类型来设计以数据为中心的较小类型,这些类型只有很少的行为或没有行为。 例如,.NET 使用结构类型来表示数字(整数和实数)、布尔值、Unicode 字符以及时间实例。 如果侧重于类型的行为,请考虑定义一个类

  • 由于结构类型具有值语义,因此建议定义不可变的结构类型。

2. 定义结构体

结构体的定义使用struct关键字,后面跟着结构体的名称。你可以在结构体中定义各种成员,包括字段、属性、方法和构造函数。如下所示:

public struct Point
{public int X { get; set; }public int Y { get; set; }public Point(int x, int y){X = x;Y = y;}public void Print(){Console.WriteLine($"Point: ({X}, {Y})");}
}public struct Rectangle
{// 字段public int Width;public int Height;// 属性public int Perimeter{get { return 2 * (Width + Height); }}// 构造函数public Rectangle(int width, int height){Width = width;Height = height;}// 方法public int Area(){return Width * Height;}
}

3. 使用结构体

使用结构体与使用类类似,但由于结构体是值类型,它们的行为有所不同:

class Program
{static void Main(){// 实例化结构体Point point = new Point();//一旦创建了结构体实例,就可以像访问类成员一样访问其字段和方法:point.X = 10;point.Y = 20;Console.WriteLine($"Point: ({point.X}, {point.Y})");// 使用结构体的构造函数Rectangle rectangle = new Rectangle(5, 3);//一旦创建了结构体实例,就可以像访问类成员一样访问其字段和方法:Console.WriteLine($"Rectangle Area: {rectangle.Area()}");Console.WriteLine($"Rectangle Perimeter: {rectangle.Perimeter}");}
}

使用default 初始化 结构体

Point point3 = default(Point); // C# 7.1 及以上版本

二、结构体详解

1. 构造函数

1)默认构造函数

结构体有一个隐式的默认构造函数,它会将所有字段初始化为它们的默认值。你也可以显式地定义构造函数,但不能同时有默认构造函数和无参数的构造函数:

struct Person
{public string Name;public int Age;public Person(string name, int age){Name = name;Age = age;}
}

在C# 7.3版本中 是不可以不能同时有默认构造函数和无参数的构造函数
在这里插入图片描述
在C# 10.0 版本中,可以同时有默认构造函数和无参数的构造函数
在这里插入图片描述

2)构造函数参数

结构体的构造函数必须为所有字段赋值,因为结构体的成员不能在声明时初始化:

struct Circle
{public double Radius;public Circle(double radius){Radius = radius;}
}

在C# 7.3版本
在这里插入图片描述
在C# 10.0 版本
在这里插入图片描述

2. 属性

你可以在结构体中定义属性,就像在类中一样。属性可以用来封装结构体的字段,提供更好的访问控制:

struct Temperature
{private double _celsius;public double Celsius{get { return _celsius; }set { _celsius = value; }}public double Fahrenheit{get { return _celsius * 9 / 5 + 32; }set { _celsius = (value - 32) * 5 / 9; }}
}

3. 方法

结构体可以包含方法,这些方法可以操作结构体的成员:

struct Vector
{public double X;public double Y;public double Magnitude(){return Math.Sqrt(X * X + Y * Y);}
}

3. 比较操作

结构体支持隐式的相等比较操作符 (== 和 !=),但为了自定义比较逻辑,您可以重写这些操作符或实现 IEquatable 接口:

public struct Point : IEquatable<Point>
{public int X { get; set; }public int Y { get; set; }public bool Equals(Point other){return X == other.X && Y == other.Y;}public override bool Equals(object obj){if (obj is Point point){return Equals(point);}return false;}public override int GetHashCode(){return HashCode.Combine(X, Y);}public static bool operator ==(Point left, Point right){return left.Equals(right);}public static bool operator !=(Point left, Point right){return !(left == right);}
}

4. 结构体的特点

1)值类型

结构体是值类型,这意味着当你将一个结构体变量赋值给另一个结构体变量时,会进行值的复制,而不是引用的复制。例如:

Point point1 = new Point { X = 1, Y = 2 };
Point point2 = point1; // 复制值,而不是引用
point2.X = 5;
Console.WriteLine($"point1: ({point1.X}, {point1.Y})"); // 输出 (1, 2)
Console.WriteLine($"point2: ({point2.X}, {point2.Y})"); // 输出 (5, 2)

值类型 vs 引用类型

  • 值类型:如 int, float, bool 和 struct,当它们被赋值给另一个变量时会创建副本。
  • 引用类型:如 class, interface, array,当它们被赋值时只是复制了引用,两个变量指向同一个对象。

由于 struct 是值类型,因此每次传递或赋值时都会创建一个新副本,这对于小规模的数据结构来说效率较高且更安全。但是,对于较大的结构体,频繁复制可能会带来性能开销。

2)存储位置

结构体通常存储在栈上,对于小型数据结构,这可以提高性能,因为栈的访问速度比堆更快。但是,当结构体作为引用类型的成员时,它会被存储在堆上。

3)不能被继承

  • 结构体不能被继承,因为它们隐式地密封(sealed)。这意味着你不能创建一个继承自结构体的新类型。也不能作为类的基础类型。
  • 结构体不能继承自其他类型,也不能被其他类型继承。
  • 结构成员不能指定为 abstract、virtual 或 protected。

4)包含成员

它可以包含多个不同类型的成员,如字段、属性、方法、索引器、运算符方法、事件和构造函数等

5)可实现接口

结构体可实现一个或多个接口。

// 定义接口
public interface IDistanceCalculable
{double DistanceTo(Point other);
}// 实现接口的结构体
public struct Point : IDistanceCalculable
{public double X { get; }public double Y { get; }public Point(double x, double y){X = x;Y = y;}// 实现接口中的方法public double DistanceTo(Point other){return Math.Sqrt(Math.Pow(other.X - X, 2) + Math.Pow(other.Y - Y, 2));}public override string ToString(){return $"({X}, {Y})";}
}// 使用示例
class Program
{static void Main(string[] args){var p1 = new Point(0, 0);var p2 = new Point(3, 4);Console.WriteLine($"Distance between {p1} and {p2}: {p1.DistanceTo(p2)}");}
}

6)不能在结构体中声明终结器

  • 结构体不能有析构函数,因为它们存储在栈上,析构函数通常用于释放堆上的资源。
  • 结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义无参构造函数。无参构造函数(默认)是自动定义的,且不能被改变。

7)必须初始化

在 C# 11 之前,结构体的构造函数必须初始化该类型的所有实例字段。

当你实例化一个结构体时,必须为其成员赋值,要么通过构造函数,要么通过属性或字段的赋值:

// 正确
Point p1 = new Point { X = 1, Y = 2 };
// 正确
Point p2 = new Point(3, 4);
// 错误,未初始化成员
// Point p3;

8)箱装与拆箱

当值类型(如 struct)被分配给引用类型的变量时会发生箱装(boxing),反之则发生拆箱(unboxing)。这个过程涉及到内存分配和数据复制,因此应当尽量避免不必要的转换以提高性能。

object boxedPoint = point1; // 箱装
Point unboxedPoint = (Point)boxedPoint; // 拆箱

三、结构体的使用场景

1. 表示小型数据结构

结构体非常适合表示小型的数据结构,如点、向量、矩形等,因为它们的存储和操作成本相对较低。

2. 提高性能

对于频繁创建和销毁的对象,使用结构体可以避免堆分配的开销,提高性能。

3. 不可变数据

为了确保结构体的安全性和线程安全性,通常建议设计为不可变类型,即一旦创建后就不能修改其状态。这可以通过只读字段或只读属性来实现:

public struct ImmutablePoint
{public readonly int X;public readonly int Y;public ImmutablePoint(int x, int y){X = x;Y = y;}public void Print(){Console.WriteLine($"Immutable Point: ({X}, {Y})");}
}

为什么建议定义不可变的结构类型

  • 避免副作用
    由于结构类型传递的是副本,如果结构是可变的,在方法中修改结构的副本可能会给调用者带来混淆。例如,当一个可变结构作为参数传递给方法时,方法内部对该结构的修改不会影响原始结构,但调用者可能会误以为会影响。而不可变结构可以避免这种副作用,因为其状态不能被修改,调用者可以明确知道传递的结构不会被方法改变。
  • 线程安全
    在多线程环境中,可变的结构类型可能会引发线程安全问题。多个线程同时访问和修改同一个结构的不同副本时,可能会导致数据不一致。而不可变结构类型天生就是线程安全的,因为它们的状态不能被修改,多个线程可以安全地共享同一个不可变结构的副本,无需进行额外的同步操作。
  • 提高代码的可维护性和可预测性
    不可变结构的状态在创建后就固定不变,这使得代码的行为更加可预测。开发者在阅读和理解代码时,不需要担心结构的状态会在某个地方被意外修改,从而降低了代码的复杂性,提高了可维护性。

综上所述,由于结构类型具有值语义,为了避免副作用、保证线程安全以及提高代码的可维护性和可预测性,建议定义不可变的结构类型。

四、结构体与类的区别

特性结构体类(class)
类型值类型引用类型
默认值根据字段类型初始化null
复制行为赋值时创建副本赋值时仅复制引用
继承不能从其他结构体继承,但可以实现接口支持继承和多接口实现
性能对于小规模数据结构更高效对于大规模复杂对象更灵活

五、总结

结构体是 C# 中一种强大的值类型数据结构,适合表示小型数据结构和需要高性能的场景。它们具有值类型的特点,存储在栈上,不能被继承,并且可以包含各种成员,如字段、属性和方法。通过合理使用结构体,可以提高代码的性能和可读性。在选择使用结构体还是类时,要考虑数据的大小、使用场景以及性能需求,以确保做出最佳选择。


结语

回到目录页:C#/.NET 知识汇总
希望以上内容可以帮助到大家,如文中有不对之处,还请批评指正。


参考资料:
结构类型(C# 参考)

相关文章:

C# 结构体

总目录 前言 在 C# 编程中&#xff0c;结构体&#xff08;struct&#xff09;是一种非常重要的数据结构&#xff0c;它为我们提供了一种轻量级的存储和操作数据的方式。本教程将带你深入了解结构体的概念、特点、使用方法&#xff0c;以及一些使用结构体的最佳实践。 一、什么…...

C++小病毒-1.0勒索(更新次数:1)

内容供学习使用,不得转卖,代码复制后请1小时内删除,此代码会危害计算机安全,谨慎操作 在C20环境下,并在虚拟机里运行此代码!&#xff0c;病毒带来后果自负! 使用时请删除在main()里的注释,并修改位置至C:\\(看我代码注释)//可以改成WIN Main() #include <iostream> #i…...

RabbitMQ---面试题

常见面试题 1.MQ的作用及应用场景 类似问题&#xff1a;项目什么情况下用到了MQ&#xff0c;为什么要用MQ MQ的主要应用场景&#xff0c;消息队列的应用场景&#xff0c;为什么说消息队列可以削峰 首先MQ是一种用来接收和转发消息的队列&#xff0c;常见的应用常见如下&…...

CSS中相对定位和绝对定位详解

文章目录 CSS中相对定位和绝对定位详解一、引言二、相对定位1、相对定位的概念1.1、代码示例 三、绝对定位1、绝对定位的概念1.1、代码示例 四、相对定位与绝对定位的区别五、使用示例六、总结 CSS中相对定位和绝对定位详解 一、引言 在CSS布局中&#xff0c;定位是一种强大的…...

【深度学习基础】多层感知机 | 权重衰减

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…...

[cg] 使用snapgragon 对UE5.3抓帧

最近想要抓opengl 的api&#xff0c;renderdoc在起应用时会闪退&#xff08;具体原因还不知道&#xff09;&#xff0c;试了下snapgraon, 还是可以的 官网需要注册登录后下载&#xff0c;官网路径&#xff1a;Developer | Qualcomm 为了方便贴上已经下载好的exe安装包&#x…...

Java 集合框架介绍

Java学习资料 Java学习资料 Java学习资料 在 Java 编程中&#xff0c;集合框架是一个强大且常用的工具&#xff0c;它为存储和操作一组对象提供了统一的体系结构。通过集合框架&#xff0c;我们能够高效地管理数据&#xff0c;提升程序的灵活性和可维护性。 一、集合框架的概…...

【博客之星】2024年度创作成长总结 - 面朝大海 ,春暖花开!

没关系的&#xff0c;大家都会做错选择&#xff0c;会 莫名其妙掉眼泪&#xff0c;走在路上会突然崩溃&#xff0c; 但这并不影响我们去看看晚霞&#xff0c; 再次爱上这个世界。 面朝大海 &#xff0c;春暖花开! about meReviewLife about me 现在我是一名24级计算机类的…...

windows11关闭系统更新详细操作步骤

文章目录 1.打开注册表2.修改注册表内容2.1 新建文件2.2 修改值 3.修改设置 1.打开注册表 winR输入regedit(如下图所示) 2.修改注册表内容 进HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 2.1 新建文件 右侧界面右键即可 2.2 修改值 重命名为如下…...

医学图像分析工具09.1:Brainstorm安装教程

1. 安装前准备 **官方安装包和数据&#xff1a;**https://neuroimage.usc.edu/bst/download.php **官方安装教程&#xff1a;**https://neuroimage.usc.edu/brainstorm/Installation Matlab 版本要求&#xff1a; 有 Matlab&#xff1a; R2009b (7.9) 或更高版本没有 Matlab&…...

蚁群算法 (Ant Colony Optimization) 算法详解及案例分析

蚁群算法 (Ant Colony Optimization) 算法详解及案例分析 目录 蚁群算法 (Ant Colony Optimization) 算法详解及案例分析1. 引言2. 蚁群算法 (ACO) 算法原理2.1 蚂蚁觅食行为2.2 算法步骤2.3 数学公式3. 蚁群算法的优势与局限性3.1 优势3.2 局限性4. 案例分析4.1 案例1: 旅行商…...

鸿蒙next 自定义日历组件

效果图预览 20250124-113957 使用说明 1.选择日期左右箭头&#xff0c;实现每月日历切换&#xff0c;示例中超出当前月份&#xff0c;禁止进入下一月&#xff0c;可在代码更改 2.日历中显示当前选择的日期&#xff0c;选中的日期颜色可自定义 3.日历中可展示历史记录作为数据…...

Android BitmapShader简洁实现马赛克,Kotlin(二)

Android BitmapShader简洁实现马赛克&#xff0c;Kotlin&#xff08;二&#xff09; 这一篇 Android BitmapShader简洁实现马赛克&#xff0c;Kotlin&#xff08;一&#xff09;-CSDN博客 遗留一个问题&#xff0c;xml定义的MyView为wrap_content的宽高&#xff0c;如果改成其…...

MATLAB编写遗传算法【Genetic Algorithm(GA)】求解函数最大值

一、遗传算法基础知识 来自B站视频的笔记&#xff1a; 【超容易理解】手把手逐句带你解读并实现遗传算法的MATLAB编程&#xff08;结合理论基础&#xff09;_哔哩哔哩_bilibili 1、遗传算法 使用“适者生存”的原则&#xff0c;在遗传算法的每一代中&#xff0c;…...

remove和delete应用场景

"Remove" 和 "delete" 都有“移除、去除”的意思&#xff0c;但它们在使用时有一些细微的区别&#xff0c;通常根据上下文来决定使用哪一个。以下是它们的主要区别&#xff1a; 1. Remove "Remove" 是一个相对通用的词&#xff0c;指的是从某个…...

Redis 详解

简介 Redis 的全称是 Remote Dictionary Server&#xff0c;它是一个基于内存的 NoSQL&#xff08;非关系型&#xff09;数据库&#xff0c;数据以 键值对 存储&#xff0c;支持各种复杂的数据结构 为什么会出现 Redis&#xff1f; Redis 的出现是为了弥补传统数据库在高性能…...

亲测有效!解决PyCharm下PyEMD安装报错 ModuleNotFoundError: No module named ‘PyEMD‘

解决PyCharm下PyEMD安装报错 PyEMD安装报错解决方案 PyEMD安装报错 PyCharm下通过右键自动安装PyEMD后运行报错ModuleNotFoundError: No module named ‘PyEMD’ 解决方案 通过PyCharm IDE python package搜索EMD-signal&#xff0c;选择版本后点击“install”执行安装...

Java 设计模式 二 单例模式 (Singleton Pattern)

单例模式 (Singleton Pattern) 是一种常见的设计模式&#xff0c;属于创建型模式。它的核心思想是确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。通常用于那些需要全局控制的场景&#xff0c;比如配置管理、日志系统、数据库连接池等。 1. 单例模式的…...

golang网络编程

socket编程 socket图解 Socket是BSD UNIX的进程通信机制&#xff0c;通常也称作”套接字”&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄。Socket可以理解为TCP/IP网络的API&#xff0c;它定义了许多函数或例程&#xff0c;程序员可以用它们来开发TCP/IP网…...

kotlin内联函数——takeIf和takeUnless

1.takeIf 当对一个对象调用takeIf时&#xff0c;如果对象满足给定的判断条件&#xff0c;则返回该对象&#xff1b;否则&#xff0c;返回null。因此&#xff0c;takeIf是对单个对象进行过滤的函数。例如&#xff0c; class User {var name: String? nullvar age 99fun set…...

计算机网络 (54)系统安全:防火墙与入侵检测

前言 计算机网络系统安全是确保网络通信和数据不受未经授权访问、泄露、破坏或篡改的关键。防火墙和入侵检测系统&#xff08;IDS&#xff09;是维护网络系统安全的两大核心组件。 一、防火墙 定义与功能 防火墙是一种用来加强网络之间访问控制的特殊网络互联设备&#xff0c;它…...

第38周:猫狗识别 (Tensorflow实战第八周)

目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 输出 二、数据预处理 2.1 加载数据 2.2 再次检查数据 2.3 配置数据集 2.4 可视化数据 三、构建VGG-16网络 3.1 VGG-16网络介绍 3.2 搭建VGG-16模型 四、编译 五、训练模型 六、模型评估 七、预测 总结 前言…...

【力扣Hot 100】矩阵1

矩阵置零&#xff1a;1. 开两个数组判断该行/该列是否有0&#xff1b;2. 用第0行/第0列分别判断该列/该行是否有0 螺旋矩阵&#xff1a;记录方向&#xff0c;一直按某方向前进&#xff0c;遇到障碍方向就变一下 1. 矩阵置零 给定一个 *m* x *n* 的矩阵&#xff0c;如果一个元…...

量子编程语言:Qiskit 与 Cirq

在量子计算的领域&#xff0c;开发者已经可以使用一些专门为量子计算设计的编程语言和框架。其中&#xff0c;Qiskit 和 Cirq 是两个非常流行的选择&#xff0c;它们为不同的量子计算机提供编程接口&#xff0c;帮助开发者理解量子电路的设计和执行。 1. Qiskit Qiskit 是 IBM…...

leetcode 124. 二叉树中的最大路径和

题目&#xff1a;124. 二叉树中的最大路径和 - 力扣&#xff08;LeetCode&#xff09; 定义一个节点的“最大单向路径和”是single&#xff0c;single有以下几种情况&#xff1a; 只有该节点该节点左儿子的single该节点右儿子的single 设答案是节点 node 为根节点&#xff0…...

程序员转型测试:解锁漏洞挖掘新旅程

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 程序…...

基于Springboot用axiospost请求接收字符串参数为null的解决方案

问题 ​ 今天在用前端 post 请求后端时发现&#xff0c;由于是以 Json对象的形式传输的&#xff0c;后端用两个字符串形参无法获取到对应的参数值 前端代码如下&#xff1a; axios.post(http://localhost:8083/test/postParams,{a: 1, b:2} ,{Content-Type: application/jso…...

# AI绘图中的Embedding、CLIP、Flux中的Clip与LCM SDXL加速生成解析

AI绘图中的Embedding、CLIP、Flux中的Clip与LCM SDXL加速生成解析 在现代AI绘图和深度学习中&#xff0c;涉及了多个复杂的概念和技术&#xff0c;这些技术在图像生成、训练加速以及多模态学习等方面起着至关重要的作用。在这篇博客中&#xff0c;我们将讨论几个关键概念&…...

警企联动齐发力、共筑反诈“防护墙”

2025年1月10日是第五个中国人民警察节,南通移动联合南通公安反诈中心,深入社区商圈,开展防范电信网络诈骗宣传活动,进一步增强广大人民群众的反诈意识和能力,全力守护好群众的“钱袋子”。 当日,活动现场一大早就呈现出一片忙碌景象,工作人员支起摊位,将各类精心制作的反诈宣传…...

Node.js HTTP模块详解:创建服务器、响应请求与客户端请求

Node.js HTTP模块详解&#xff1a;创建服务器、响应请求与客户端请求 Node.js 的 http 模块是 Node.js 核心模块之一&#xff0c;它允许你创建 HTTP 服务器和客户端。以下是一些关键知识点和代码示例&#xff1a; 1. 创建 HTTP 服务器 使用 http.createServer() 方法可以创建…...

Alibaba Spring Cloud 十七 Sentinel熔断降级

概述 在微服务架构中&#xff0c;熔断与降级是保证系统稳定性的重要机制&#xff0c;能有效防止故障蔓延或雪崩效应。当某个服务出现异常、延迟过高或错误率过高时&#xff0c;触发熔断保护&#xff0c;将该服务“隔离”一段时间&#xff0c;避免影响整体系统的吞吐和可用性。 …...

linux——网络基础

文章目录 目录 文章目录 踏入网络世界&#xff1a;探索 Linux 网络的无垠天地 一、网络发展 早期单机处理模式 网络发展的需求催生 网络发展后的优势对比 二、局域网or广域网 典型局域网架构 广域网连接多个局域网 二者关系 三、协议 语言层与汉语协议 通信设备层与电话机协议 …...

Spring Boot 集成 WebClient 实战教程 实现同步、异步请求处理以及响应式编程、响应式流、响应式Mono

该项目介绍springboot集成WebClient 实现服务的请求操作 示例中演示了,如何配置WebClient的请求头,请求参数等相关参数,实现同步、异步请求处理以及响应式编程、响应式流、响应式Mono。 为什么使用WebClient 不用RestTemplate 在 Spring Framework 5.0 及更高版本中,Res…...

健身房项目 Uniapp+若依Vue3版搭建!!

本次系统实现主要负责前端前端功能的实现。其中系统前端主要分为三大部分&#xff0c;首页&#xff0c;教练列表页&#xff0c;我的页面。 首页 首页的实现效果如图 1.会员卡组件 首页的Vip会员卡部分&#xff0c;团课活动的DataPicker&#xff0c;团课选择都采用了组件化封…...

(2)STM32 USB设备开发-USB虚拟串口

例程&#xff1a;STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com 本篇为USB虚拟串口教程&#xff0c;没有知识&#xff0c;全是实操&#xff0c;按照步骤就能获得一个STM32的USB虚拟串口。本例子是在野火F103MINI开发板上验证的&#xff0c;如果代码中出现一些外设的…...

ubuntu上python setup.py install报错:error: expected initializer before ‘__s128’

问题场景&#xff1a;安装torchsparse时候执行python setup.py install 报错&#xff1a; /usr/include/linux/types.h:12:27: error: expected initializer before ‘__s128’12 | typedef __signed__ __int128 __s128 __attribute__((aligned(16)));| …...

解锁.NET Standard库:从0到1的创建与打包秘籍

一、引言 在当今的软件开发领域&#xff0c;跨平台开发已成为一种趋势。随着不同操作系统和设备的多样化&#xff0c;开发人员需要确保他们的代码能够在多个平台上运行&#xff0c;以满足更广泛的用户需求。.NET Standard 库应运而生&#xff0c;它定义了一组公共 API&#xf…...

Mac 查看 Java SDK 和 Android SDK 的路径

1. Mac 如何查看 JavaSDK的路径 /usr/libexec/java_home -V2. Mac 如何查看 Android SDK 的路径 在 Android Studio 中按 cmd,打开设置&#xff0c;然后如下方式&#xff0c;第三步如果有值就是第三步的信息。 第三步如果没有值&#xff0c;点开Edit&#xff0c;值在下方&…...

6. 马科维茨资产组合模型+政策意图AI金融智能体(DeepSeek-V3)增强方案(理论+Python实战)

目录 0. 承前1. 幻方量化 & DeepSeek1.1 What is 幻方量化1.2 What is DeepSeek 2. 重写AI金融智能体函数3. 汇总代码4. 反思4.1 不足之处4.2 提升思路 5. 启后 0. 承前 本篇博文是对上一篇文章&#xff0c;链接: 5. 马科维茨资产组合模型政策意图AI金融智能体(Qwen-Max)增…...

freeswtch目录下modules.conf各个模块的介绍【freeswitch版本1.6.8】

应用模块&#xff08;applications&#xff09; mod_abstraction&#xff1a; 为其他模块提供抽象层&#xff0c;有助于简化模块开发&#xff0c;让开发者能在统一框架下开发新功能&#xff0c;减少与底层系统的直接交互&#xff0c;提高代码可移植性和可维护性。 mod_av&#…...

Spark/Kafka

文章目录 项目地址一、Spark1. RDD1.1 五大核心属性1.2 执行原理1.3 四种创建方式二、Kafka2.1 生产者(1)分区器(2)生产者提高吞吐量(3) 生产者数据可靠性数据传递语义幂等性和事务数据有序2.2 Broker(1)Broker工作流程(2)节点服役和退役2.3 副本(1)Follower故障细…...

【Linux】华为服务器使用U盘安装统信操作系统

目录 一、准备工作 1.1 下载UOS官方系统 &#xff11;.&#xff12;制作启动U盘 1.3 服务器智能管理系统iBMC 二、iBMC设置U盘启动 一、准备工作 1.1 下载UOS官方系统 服务器CPU的架构是x86-64还是aarch64&#xff09;,地址&#xff1a;统信UOS生态社区 - 打造操作系统创…...

数据库性能优化(sql优化)_SQL执行计划02_yxy

数据库性能优化_SQL执行计划详解02 常用操作符解读1.1 表扫描类型操作符1.1.1 CSCN 聚集索引扫描1.1.2 CSEK 聚集索引数据定位1.1.3 SSEK 二级索引数据定位1.1.4 SSCN 直接使用二级索引进行扫描1.2 其他常见操作符1.2.1 BLKUP 二次扫描1.2.2 SLCT 选择1.2.3 PRJT 投影1.2.4 NSE…...

02.05、链表求和

02.05、[中等] 链表求和 1、题目描述 给定两个用链表表示的整数&#xff0c;每个节点包含一个数位。 这些数位是反向存放的&#xff0c;也就是个位排在链表首部。 编写函数对这两个整数求和&#xff0c;并用链表形式返回结果。 2、解题思路 本题要求对两个链表表示的整数…...

FPGA实现光纤通信(3)——光纤8b/10b编码数据回环

前言 光纤通信属于高速串行通信,具有较高的数据传输速率,通常用于服务器以及通信设备之间用于高速数据交换,对于xilinx 7系列的FPGA,内部具有集成的高速接口用于实现光纤通信。本次就来实现8b/10b编码数据回环。 测试环境:vivado版本:2020.02 FPGA芯片:XC7K70T 测试说…...

Python!从0开始学爬虫:(一)HTTP协议 及 请求与响应

前言 爬虫需要基础知识&#xff0c;HTTP协议只是个开始&#xff0c;除此之外还有很多&#xff0c;我们慢慢来记录。 今天的HTTP协议&#xff0c;会有助于我们更好的了解网络。 一、什么是HTTP协议 &#xff08;1&#xff09;定义 HTTP&#xff08;超文本传输协议&#xff…...

神经网络基础详解

神经元结构 在探讨神经网络的基础时,神经元结构是一个关键概念。神经元是神经网络的基本组成单元,模拟了生物神经元的功能。其结构包括: 细胞体 :负责处理和整合输入信息 树突 :接收来自其他神经元的输入信号 轴突 :将处理后的信息传递给其他神经元 神经元通过加权求和和…...

使用Chrome和Selenium实现对Superset等私域网站的截图

最近遇到了一个问题&#xff0c;因为一些原因&#xff0c;我搭建的一个 Superset 的 Report 功能由于节假日期间不好控制邮件的发送&#xff0c;所以急需一个方案来替换掉 Superset 的 Report 功能 首先我们需要 Chrome 浏览器和 Chrome Driver&#xff0c;这是执行数据抓取的…...

2025展望:“安全计算”平价时代加速到来,数据流通产业兴起

大数据产业创新服务媒体 ——聚焦数据 改变商业 2024年&#xff0c;数据要素产业元年开启。 这是建章立制的一年&#xff1a;从年初《“数据要素”三年行动计划&#xff08;2024—2026年&#xff09;》开始&#xff0c;这一年政策密集出台&#xff0c;涵盖公共数据资源开发利用…...

达梦拷贝DM_HOME的复制安装

近期一个项目需求&#xff0c;需要在没有安装包的情况下&#xff0c;将达梦数据库安装到虚机上&#xff08;生产机上安装了达梦&#xff09;&#xff0c;故采用直接打包生产机DM_HOME的方式拷贝至虚机&#xff0c;再依次执行达梦的部分指令完成安装。以下为验证的步骤&#xff…...