Category: 学习笔记

C与C++: restrict关键字及其在编译器优化中的作用

什么是 C 中的 restrict? restrict 是 C99 引入的指针类型限定符。它告诉编译器,该指针在其生命周期内是访问其所指内存的唯一方式。 这使得编译器可以安全地进行优化,因为它可以假设没有指针别名 —— 即没有其他指针访问相同的内存。 语法示例: void copy(int *restrict dst, const int *restrict src, size_t n); 优点: 启用更激进的编译器优化 提升在循环和内存密集型操作中的性能 明确表达开发者对指针用途的意图 没有使用 restrict 时: …

深入理解ROS中的Topics, Services和Actions(含示例)

不知道听谁说的:之后的人工智能会和机器人强烈结合,是下一个十年的技术趋势。 “ROS – 机器人操作系统 机器人操作系统 (ROS) 是一套软件库和工具,可帮助您构建机器人应用程序。从驱动程序到先进的算法,以及强大的开发者工具,ROS 可满足您下一个机器人项目的所有需求。而且它完全开源。” ROS 和 ROS 2 简介 ROS(机器人操作系统) 是一个灵活的机器人软件开发框架。它提供工具、库和约定,用于简化在各种机器人平台上构建复杂且可靠的行为。 ROS 2 是 ROS 的下一代版本,解决了实时性能、安全性和多平台支持等问题。其底层使用 DDS(数据分发服务)实现可扩展且可靠的通信。 可以到官网学习:ros.org ROS 中的核心通信概念 Topics(主题) – 用于节点间异步传输流式数据。 Services(服务) – …

C++的左值/lvalue, 右值/rvalue和右值引用/rvalue references

C++ 左值(lvalue)、右值(rvalue)与右值引用(rvalue reference) 理解 C++ 中的左值、右值及其引用形式,是掌握现代 C++(尤其是 C++11 以后的移动语义/move和完美转发/perfect forwarding)必不可少的基础。 📌 什么是左值(lvalue) 左值指的是有名字、可寻址的对象,通常可以出现在赋值语句的左侧。 int x = 10; x = 20; // x 是左值 int* p = &x; // 可以取地址 …

C++中的assert和static_assert的区别

C++ assert 与 static_assert 的区别 C++ 提供了两种机制来验证程序中的假设(断言):assert 和 static_assert。虽然它们看起来类似,但它们在不同的阶段工作,并且用途也不同。 🔍 assert — 运行时检查/断言 assert 用于在程序运行时验证条件是否成立。如果条件为假,程序会打印错误信息并中止运行。 #include <cassert> int divide(int x, int y) { assert(y != 0); // 如果 y …

C++: auto_ptr智能指针被弃用

为什么 auto_ptr 在 C++ 中被弃用 TLDR; 很久之前看到auto_ptr就觉得挺好,和auto一样,反正不用自己管,C++会自动推导智能指针的类型。不过这个关键字已经在C++ 11中被弃用/deprecated。 弃用与移除 std::auto_ptr 在 C++ 11 中被弃用。 在 C++ 17 中被完全移除。 为什么 auto_ptr 被弃用? 它具有不安全的拷贝语义/copy semantics。 拷贝一个 auto_ptr 会转移所有权,并将原指针设为 nullptr。 这种行为很容易引发 bug,尤其是在标准容器或算法中使用时。 …

通过脚本让电脑实现模拟按键(一直在线功能): VBScript/JScript/PowerShell

本文详细讲诉了用脚本实现定时模拟计算机按键,用于保持系统一直在线的状态。脚本可以使用VBScript、JScript和Powershell。这三种脚本语言都是微软/Microsoft的,不过前两种已经要被淘汰了。 在 Windows 环境下,这三种脚本(PowerShell、VBScript 和 JScript)都通过 CreateObject 来调用 COM 对象 WScript.Shell,以实现模拟按键的功能。例如,可以每隔一分钟模拟按下 Scroll Lock 键一次,从而保持“在线”状态(Keep Alive)。Scroll Lock 键在某些键盘上可能不存在,其作用是切换滚动锁定状态,连续按两次不会对系统造成实际影响。 模拟按键:自动化任务脚本 有时候,你可能想模拟按键(键盘输入),例如为了自动化一些任务,相比查找 API 并写脚本,通过重复按键可能更简单。例如,你想打开任何聊天窗口并输入 “Hello!” 100 次,可以使用 PowerShell 编写一个脚本,它先暂停几秒钟,然后模拟按键。 你可以通过在 Windows 中使用 …

C++中的consteval是什么? 它与const和constexpr有何不同?

C++:什么是 consteval?它与 const 和 constexpr 有何不同? 如果你在 C++ 中经常使用 const 和 constexpr,可能会好奇 C++20 新引入的 consteval 关键字到底是做什么用的。下面我们来一一解析。 什么是 consteval? consteval 用于声明一个立即函数(immediate function),也就是说,这个函数必须在编译期进行求值。与 constexpr 不同,constexpr 允许函数在编译期或运行期执行,而 consteval 强制要求只能在编译期调用。 consteval int square(int …