
C++
文章平均质量分 54
C++ 相关话题。
许野平
非常喜欢软件设计这份工作,有不错的数学基础,喜欢读书、摄影与音乐。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Rust:如何开发32位的DLL动态库
这篇教程演示了如何用Rust创建32位DLL并在C++中调用。主要步骤包括:1)添加32位工具链;2)配置Cargo.toml为cdylib;3)实现导出函数(DllMain、calculate、to_uppercase等);4)处理跨语言内存管理;5)编译为32位DLL。配套提供了C++测试代码,展示如何加载DLL、调用函数并处理回调。关键点包括使用no_mangle标记导出函数、正确内存管理约定以及32位兼容性。原创 2025-08-04 09:33:38 · 340 阅读 · 0 评论 -
Rust:开发 DLL 动态链接库时如何处理 C 字符串
本文详细介绍了Rust开发DLL时处理C字符串与Rust String相互转换的安全方法。主要内容包括:1)将C字符串(const c_char)安全转换为Rust String;2)将Rust String转换为C可用的mut c_char指针;3)完整DLL示例与C调用方式;4)高级技巧如错误处理、多字节编码转换和复杂数据结构返回。重点强调了内存安全、所有权管理和错误处理,提供了空指针检查、线程安全等最佳实践,并警告了常见陷阱。最后建议使用cbindgen自动生成头文件,确保跨语言调用的安全性。原创 2025-08-03 13:05:02 · 563 阅读 · 0 评论 -
Rust:如何开发Windows 动态链接库 DLL
Rust创建Windows DLL动态库的完整指南 本文详细介绍了使用Rust创建兼容C的Windows DLL动态库的全过程: 项目配置 通过cargo new --lib创建项目 在Cargo.toml中设置crate-type = ["cdylib"] 添加windows crate依赖项 核心实现 使用#[no_mangle]和extern "C"确保函数导出兼容性 演示了基本数值运算、字符串处理和结构体操作 提供了必须的字符串内存管理函数 编译与调用 使用c原创 2025-08-03 10:51:25 · 239 阅读 · 0 评论 -
Rust 编译器使用的 C++ 编译器吗?
Rust编译器,但它们之间可以存在交互,尤其是在Rust与C++进行混合编程时。原创 2024-09-14 11:27:41 · 979 阅读 · 0 评论 -
QT: 为什么不把 showEvent 这一类事件设计成信号?
等事件处理函数设计成信号似乎可以提供更多的灵活性,但实际上,这样做会违背 Qt 事件系统和信号槽机制的设计初衷和用途。事件处理函数和信号在 Qt 框架中扮演着不同的角色,各自有其特定的使用场景和优势。等)并不是被设计成信号(signal)的原因,主要涉及到它们的设计初衷和用途的不同。综上所述,虽然从表面上看,将。和其他事件处理函数(如。原创 2024-08-30 19:39:59 · 883 阅读 · 0 评论 -
C++:超长字符串常量的三种表示方法
你可以通过将字符串字面量分开写,并用空格、制表符或换行符(除了最后一个字面量)将它们隔开,来隐式地将它们连接起来。从C++11开始,引入了原始字符串字面量(Raw String Literals),允许你避免在字符串内部对特殊字符(如双引号。尽管这主要用于处理包含大量特殊字符的字符串,但你也可以用它来编写跨多行的字符串,只需在字符串开头加上。注意,在原始字符串中,所有的字符都按照字面意义处理,包括空格、制表符和换行符。综上所述,对于在源代码中直接处理超长的字符串常量,推荐使用第一种或第二种方法。原创 2024-08-28 09:59:12 · 922 阅读 · 0 评论 -
wchar_t, size_t 这些 xxx_t 类型在 C++ 中有哪些?都代表啥意思?
这是一个无符号整数类型,用于表示对象的大小(如数组中的元素数量或结构体占用的字节数)。结尾的类型,但它们可能不是标准C++库的一部分,而是特定于操作系统、编译器或库的。结尾的类型都是C++标准库的一部分。在编写可移植代码时,了解哪些类型是标准库提供的,以及哪些可能是特定于平台或库的,是非常重要的。后缀通常用于表示特定类型的数据,这些类型通常是在标准库中定义的,以便跨平台编程时提供一致性和可移植性。结尾的类型都是标准库的一部分(有些可能是特定平台或库的扩展),但以下是一些常见且标准库中的。原创 2024-08-24 11:30:45 · 422 阅读 · 0 评论 -
Crypto++:私钥和公钥保存到文件
,这是处理二进制数据(如加密密钥)时的重要步骤,因为它可以防止在写入文件时对数据进行不必要的修改(如换行符的转换)。函数接受两个字符串参数,分别代表私钥和公钥将要保存的文件路径。在Crypto++库中,生成的RSA私钥和公钥可以通过将它们序列化到文件来保存。来将密钥的数据写入到文件中。此外,如果文件打开失败(例如,由于权限问题或磁盘空间不足),函数将抛出一个。在实际应用中,你可能需要更细致地处理这些潜在的错误情况。方法将私钥和公钥编码为DER格式,并通过。将编码后的数据写入到指定的文件中。原创 2024-08-20 15:32:24 · 325 阅读 · 0 评论 -
Crypto++:系统架构和数据类型
Crypto++(也称为CryptoPP、libcrypto++或cryptlib)是一个免费开源的C++库,提供了多种加密方案和安全编程工具。原创 2024-08-20 15:05:55 · 990 阅读 · 0 评论 -
C++:基于 QT 和 MinGW,如何使用 Crypto++ 开源代码?
在QT开发环境中使用MinGW编译器结合Crypto++源代码,你需要遵循一系列步骤来配置你的项目以便能够使用Crypto++库。原创 2024-08-19 10:49:49 · 733 阅读 · 0 评论 -
C++:Crypto++ 入门用法
下载完成Crypto++后,使用这套源代码的主要步骤包括编译源代码生成库文件(静态库或动态库)、配置开发环境以便在项目中引用这些库文件,以及编写和编译使用Crypto++功能的C++代码。原创 2024-08-19 10:45:45 · 1035 阅读 · 0 评论 -
QT:QTableWidget 设置单元格边距
实际上,它是通过调整绘制文本的矩形区域来模拟边距效果的。但请注意,这种方法在单元格内容较复杂或需要频繁更新时可能不是最高效的,因为HTML的解析和渲染需要一定的时间。方法,你可以完全控制单元格的绘制过程,包括内容的边距。没有直接提供设置单元格内容边距的API,但你可以通过富文本、自定义委托或使用。主要是用来存储和显示文本、图标等内容的,但它不提供直接设置内容边距的API。你可以将单元格的内容设置为富文本(HTML),并在HTML中指定边距。提供了更多的自定义选项,包括通过委托来控制单元格的绘制。原创 2024-08-15 13:41:38 · 1056 阅读 · 0 评论 -
QTableWidget 如何设置自动列宽?
在 Qt 的中,设置自动列宽通常意味着让列宽根据列内容自动调整,以确保内容不会被截断且表格看起来更加整洁。Qt 提供了几种方式来实现这一点,但需要注意的是,本身并没有直接提供一个“一键设置所有列自动宽度”的函数。不过,你可以通过遍历所有列并使用相应的函数来为每个列设置合适的宽度。以下是几种设置。原创 2024-08-14 18:01:02 · 3251 阅读 · 0 评论 -
QT:QTableWidget 如何设置列的对齐方式?
方法为列头(header)设置属性(尽管这主要影响列头的显示),而实际上列内容的对齐则是通过为每个单元格(cell)设置。方法(但这会影响所有列头单元格的对齐,而不是内容单元格的对齐),或者通过遍历列中的每个单元格并单独设置其。的对齐属性来实现,但这并不是最直接的方式,特别是对于整列的统一设置。类型的参数,该参数可以是多个对齐标志的按位或组合,以指定水平和垂直方向上的对齐方式。不过,对于内容单元格的对齐,一个更简单且常见的方法是使用。中,设置列的对齐方式可以通过修改对应列的。的列级对齐设置来完成的。原创 2024-08-14 17:54:03 · 1119 阅读 · 0 评论 -
QT:QTableWidget 如何不显示行头?
的一个实例(在 Qt 的某些版本中可能是这样,但这不是一个公开的接口细节,且可能因版本而异),但在这个上下文中,我们主要关注的是它作为。对象,并指定了它的行数和列数(在这个例子中是10行5列)。中,如果你想要不显示行头(即行号旁边的列),你可以通过设置。然而,对于隐藏行头的目的,我们主要关注的是。下面是一个简单的示例代码,展示了如何在创建。在这个例子中,我们首先创建了一个。的垂直和水平表头确实是通过。返回的对象的实际类型可能是。,但在这里我们主要关注它的。垂直表头的指针(类型为。不过,需要注意的是,原创 2024-08-14 17:47:08 · 1229 阅读 · 0 评论 -
QT:QTableWidgetItem 支持的数据类型
QTableWidgetItem 支持通过和方法来存储和检索自定义数据。这里的QVariant是一个通用的数据类型容器,可以存储多种类型的数据,包括但不限于整数、浮点数、字符串、日期等。role参数用于指定数据的角色,Qt 预定义了一些标准角色(如等),同时也允许用户定义自定义角色来存储额外的数据。原创 2024-08-14 17:30:40 · 762 阅读 · 0 评论 -
QT: QVerticalLayout 如何根据 index 获得对应的 widget?
如果你需要更复杂的控制,可以继承QLayout类(或)来创建自己的布局类,并在其中添加自定义的逻辑来存储和访问widgets。总之,虽然(和一般的QLayout)没有直接提供通过索引访问widgets的API,但你可以通过其他方式间接地实现这一需求。其中,使用itemAt()方法结合是一种比较常用的方法。原创 2024-08-14 16:21:37 · 460 阅读 · 0 评论 -
QT:利用 QWidget 用户自定义属性保存数据
你可以这样做来为一个QCheckBox// 假设你已经有了一个QCheckBox指针名为checkBox// 设置一个名为"myInt"的自定义整数属性// 获取名为"myInt"的自定义整数属性// 现在myInt包含了你之前设置的整数值123。原创 2024-08-14 16:19:46 · 829 阅读 · 0 评论 -
QT 的 QSettings 读写 INI 文件的示例
在Qt中,QSettings类提供了一种便捷的方式来存储和访问应用程序的设置,这些设置可以存储在多种格式的文件中,包括INI、Windows注册表(仅Windows平台)、XML和JSON等。以下是一些使用QSettings读写INI文件的示例。原创 2024-08-10 17:41:10 · 635 阅读 · 0 评论 -
C++:如何获得当前进程对应的文件名?
在C++中,直接获取当前进程对应的文件名(即可执行文件的名称)并不是C++标准库直接提供的功能,因为C++标准主要关注于语言和编程的抽象层面,而不是操作系统层面的细节。不过,你可以使用特定于操作系统的API或方法来获取这一信息。原创 2024-08-10 16:34:42 · 766 阅读 · 0 评论 -
C++:右值、右值引用、移动语义
在C++中,右值(rvalue)是一个相对于左值(lvalue)的概念。右值通常指的是那些非持久的、临时的对象或者字面量,它们通常没有持久的存储位置(或者说,它们的存储位置是临时的)。右值的主要特点是它们可以被移动(move),但不能被赋值(因为它们通常没有可寻址的内存位置)。原创 2024-08-09 19:53:36 · 436 阅读 · 0 评论 -
C++ 标准库中的 std::string 与 UTF-8 编码
由于 UTF-8 编码的文本在 ASCII 范围内的字符(即 U+0000 到 U+007F)只占用一个字节,并且与 ASCII 编码兼容,因此 UTF-8 编码的文本可以很容易地在只支持 ASCII 的环境中处理(尽管可能无法正确解释非 ASCII 字符)。(尽管这些库本身并不直接处理 UTF-8 编码的复杂性,但它们提供了一些有用的工具),或者更专门的库,如 C++ 的第三方库 Boost.Locale,它提供了对 Unicode 和本地化支持的更高级别的抽象。并不直接指定其内部使用的字符编码。原创 2024-08-09 18:13:17 · 2121 阅读 · 0 评论 -
QT:QString 支持 UTF-8 编码吗?
在这种情况下,Qt 提供了丰富的转换函数,可以将 QString 转换为各种编码格式的字节序列,包括 UTF-8。同样,当需要从外部系统接收数据时,可以使用 QString::fromUtf8()、QString::fromLatin1() 等静态函数将字节序列转换回 QString。在 Qt 中,字符串的处理主要依赖于 QString 类。虽然 QString 内部不是以 UTF-8 编码存储字符串,但 Qt 提供了灵活的转换机制,允许在需要时轻松地在 UTF-8 和 QString 之间进行转换。原创 2024-08-08 10:56:11 · 697 阅读 · 0 评论 -
Rust:基于cxx的 C++ 混合编程,字符串参数的转换方法
在C++使用cxx库调用Rust函数时,字符串变量的传递方式主要取决于Rust和C++两端如何声明和处理这些字符串。cxx库提供了一种机制来在Rust和C++之间安全地传递数据,包括字符串。原创 2024-08-07 18:52:04 · 1502 阅读 · 0 评论 -
Rust:如何与 C++ 混合编程?
在设计一个使用Qt(C++库)进行UI设计,而业务逻辑则使用Rust编写的程序时,你需要考虑如何有效地桥接这两种不同的编程语言和生态系统。由于Qt是基于C++的,而Rust是一种与C++兼容但具有不同内存管理、并发模型和安全特性的语言,因此,你需要一个合适的架构来确保UI和业务逻辑之间的顺畅交互。原创 2024-08-07 18:42:15 · 2198 阅读 · 0 评论 -
Rust:如何调用C++源代码?
首先,我们创建一个C++文件(例如point.cc),并定义一个Point类和一个简单的函数来操作这个类。同时,我们需要一个头文件(例如point.h)来声明这个类。原创 2024-08-07 18:41:03 · 835 阅读 · 0 评论 -
Rust:如何在 C++ 源代码中调用 Rust 源代码中的函数
首先,你需要在Rust中定义一个函数,并使用cxx的Rust API来暴露这个函数给C++。// 这里通常不直接声明Rust函数给C++调用,因为C++不能直接调用Rust函数// 相反,你会在Rust中定义函数,并在C++中声明对应的C++函数作为桥接x + 42// 注意:在实际项目中,你可能需要将#[cxx::export]函数放在单独的文件中,// 并使用cxx::bridge来生成C++绑定。但这里为了简化,我们将其放在了一起。然而,上面的代码示例实际上并不完全符合cxx。原创 2024-08-07 18:39:41 · 781 阅读 · 0 评论 -
如何通过编程设置WIndows和Linux进程的优先级?
函数来修改进程的优先级。在Windows和Linux系统中,你都可以通过编程来修改进程的优先级。以下是两种操作系统上的方法。另外,需要注意的是,不恰当地提高进程优先级可能会对系统的稳定性和性能产生负面影响,因此应谨慎使用。值的范围是-20到19,其中-20是最高优先级,19是最低优先级。只有超级用户可以设置负的。值(即提高优先级)。普通用户只能设置0到19的。系统调用来修改进程的优先级。在Windows中,你可以使用。在Linux中,你可以使用。注意:在Linux中,值(即降低优先级)。原创 2024-05-21 22:24:44 · 845 阅读 · 0 评论 -
如何用C/C++语言写Python的库或者模块?
C/C++是Python解释器的底层实现语言之一,因此可以使用C/C++编写Python的扩展库或模块。Python提供了一系列API接口,使得我们可以在C/C++中调用Python解释器和相关的数据结构。需要注意的是,编写C/C++扩展模块需要对Python解释器和相关的数据结构有比较深入的了解,同时需要了解扩展模块的语法和API。编写C/C++函数,并将其编译为一个动态链接库,如dll或so文件。调用导入的函数即可完成操作,返回的结果可以直接在Python中使用。原创 2023-05-22 19:42:05 · 2515 阅读 · 0 评论 -
在 C++ 代码中调用 NumPy
要在 C++ 代码中调用 NumPy,可以使用 Boost.Python 库。为了这样做,需要安装 Boost 开发库和 NumPy ,并使用 BOOST_PYTHON_MODULE 宏定义来创建一个 Python 模块。以下是一个简单的示例,演示如何创建一个名为。原创 2023-05-22 18:17:34 · 2799 阅读 · 0 评论 -
在 C++ 中使用 PyTorch
PyTorch 提供了 C++ 前端 API 接口,可以直接在 C++ 中使用 PyTorch 的相关功能。您可以使用 C++ API 在 C++ 代码中构建、训练和部署深度学习模型。6.使用 C++ API 加载和运行 Torch Script 模型或使用 ONNX Runtime 加载和运行 ONNX 模型。上述代码实现了一个使用 C++ API 训练 MNIST 数字识别模型并在每 100 批次后输出损失值的示例。4.在训练周期中使用 C++ API 优化模型。原创 2023-05-22 16:19:47 · 2817 阅读 · 0 评论 -
Windows下查看 DLL 输出函数
我用的是 VS2017 社区版:打开开发人员命令提示符窗口,输入命令 dumpbin /exports xxx.DLL 即可。原创 2021-09-09 14:45:51 · 319 阅读 · 0 评论 -
数据结构作业辅导:数据插入与查询的CPP编程方法
以图书管理程序为例,代码如下:struct Book { string id; string name; double price;};struct Book_List { int size; Book books[MAX_BOOK_LIST_SIZE];};void append_book(Book_List* book_list, Book book){ book_list->books[book_list->size] = book; ++book_lis原创 2021-08-14 15:35:27 · 233 阅读 · 0 评论 -
依据 argc、argv 使用 printf 打印输出命令行参数
直接上代码吧:#include "stdafx.h"#include <stdio.h>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ for (int i = 0; i < argc; ++i) { printf("%S\n", argv[i]); } return 0;}程序是在VisualStudio 2013下编译的,可以正常工作。之所以把这个代码贴出来,是因为我发现pri...原创 2021-06-23 17:39:46 · 1907 阅读 · 0 评论 -
OpenGL与CUDA互操作方式总结
本文版权说明:原文链接:https://www.cnblogs.com/csuftzzk/p/cuda_opengl_interoperability.html作者:24K纯开源 Email: [email protected]出处:http://www.cnblogs.com/csuftzzk/本文版权归24K纯开源和博客园共同拥有,欢迎转载,但未经作者同意必须保留此声明,且在文章明显位置给出原文链接,否则保留追究法律责任的权利。一、介绍CUDA是Nvidia推出的一个通用G转载 2021-05-21 15:11:25 · 2066 阅读 · 0 评论 -
GLib 官网资源
官网地址:https://developer.gnome.org/glib/stable/glib-building.html原创 2021-05-08 16:26:13 · 663 阅读 · 0 评论 -
讨论一下 Cuda 程序模型 和 GPU 硬件模型
1Cuda 是一个海量线程的框架。2一个 Cuda 程序,就是一个 Grid 结构,它包含了一大堆一模一样的 Block。一个 GPU 硬件,就是一个并行计算架构,它包含了一大堆一模一样的 SM 处理器。3一个 Cuda 程序分派到一个 GPU 上去运行,实际上就是把一大堆 Block 扔到 一大堆 SM 处理器上。Cuda 程序要想取得最佳的并行运算效率,Block 的数量应该是 SM 处理器数量的整数倍,这样才能让每个 SM 都没有机会闲着。所以,编写一个 Cuda 之前,记得先看看你的原创 2021-04-05 12:27:52 · 307 阅读 · 2 评论 -
Cuda 程序设计中 Grid 和 Block 维度设置的注意事项
1. Cuda 线程的 Grid 架构Cuda 线程分为 Grid 和 Block 两个级别,Grid、Block、Thread 的关系如下图。一个核函数目前只包括一个 Grid,也就是图中的 Grid0。一个 Grid 可以包括若干 Block,具体数量的上限没有查到。一个 Block可以最多包括 512 个 Thread。2. GPU 的 SM 架构GPU 由多个 SM 处理器构成,一个 SM 处理器包含 8 个 SP 核。一个 SP 核可同时处理 32 个线程,实际上就是同一套指令重原创 2021-03-26 18:51:34 · 7384 阅读 · 1 评论 -
GpuMat 在 OpenCV 不同版中的声明
代码如下:#if CV_VERSION_EPOCH == 2#define OPENCV2#include <opencv2/gpu/gpu.hpp>namespace GPU = cv::gpu; #elif CV_VERSION_MAJOR == 3#define OPENCV3#include <opencv2/cudaimgproc.hpp>namespace GPU = cv::cuda; #elif CV_VERSION_MAJOR == 4#原创 2021-03-25 19:26:42 · 321 阅读 · 0 评论 -
英伟达 Jetson 程序员必读:摄像头流媒体和多媒体的程序设计
摄像头流媒体和多媒体0. 引言1. 流媒体的 URI 标识1.1 输入流1.2 输出流2. 命令行参数2.1 Input Options2.2 输出选项3. MIPI CSI摄像头4. V4L2摄像机4.1 V4L2格式5. RTP5.1 传输RTP5.2 远程查看RTP6. RTSP7. 视频文件7.1 编解码器7.2 调整输入大小7.3 循环输入8. 图像文件8.1 序列9. 源代码9.1 Python 源代码9.2 C++ 源代码0. 引言该项目通过各种接口和协议支持流式视频源和图像,包括:M原创 2021-03-24 17:38:58 · 651 阅读 · 0 评论