
C/C++ 工程师 日常篇
文章平均质量分 95
分享知识,工具,以及解决问题的思路
泡沫o0
《C++编程之禅:从理论到实践》 作者,目前从事车载相关行业。
个人兴趣在于不断学习和探索新知识,这也是我职业生涯中不断前进的动力。通过我的博客,我希望与大家分享这一过程中所获得的知识和经验。需要 商务合作 可直接私信。
技术是一片深不可测的海洋,每一次深入学习都是对未知领域的探索和对自我能力的挑战。在这个广阔的知识领域中,我们都是探险者,渴望揭开更多的奥秘,追求技术的极致。
展开
-
【日常-调试总结】深入浅出:当 RPC 框架的便捷与复杂交织时
在软件开发中,框架的设计者常常试图提供便捷的接口来隐藏底层的复杂性。RPC(远程过程调用)框架尤其如此,它旨在让调用远程函数如同调用本地函数一样简单。然而,“我们塑造了工具,然后工具塑造了我们”,正如媒介理论家马歇尔·麦克卢汉所观察到的。有时,这些为了便捷而设计的工具和抽象层,会引入微妙的交互问题。本文将复盘一次 C++ RPC 框架开发中的典型问题,探讨一个简化回调函数(Handler)注册的辅助工具如何引发运行时错误,并展示如何通过深入分析和模板元编程技巧解决此类问题。原创 2025-04-13 18:37:32 · 619 阅读 · 0 评论 -
【疑难解决】 ubuntu 由于权限不足 无法进入和获取root权限的解决办法
如果你当前的用户账户没有足够的权限来切换到另一个用户(特别是超级用户),你可能会遇到这个问题。确保你拥有适当的权限。原创 2024-01-18 11:35:31 · 10027 阅读 · 0 评论 -
Valgrind 报错 disInstr(arm): unhandled instruction: 0xEC510F1E
报告中提到的问题是Valgrind在处理位于 `libcrypto.so.1.0.0` 库中的 `_armv7_tick` 函数时,无法识别指令 `0xEC510F1E`。这条指令是 `mrrc p15, #1, r0, r1, c14`,用于读取CP15 CNTVCT寄存器(虚拟计时器)。原创 2023-11-12 23:45:55 · 546 阅读 · 0 评论 -
快速掌握陌生C++项目的科学与心理学策略
当一个C++工程师接手一个陌生的项目时,他们面临着巨大的挑战和机遇。项目接手不仅仅是理解代码的过程,更是一个全面了解项目背景、架构和团队文化的过程。这个过程对于工程师的职业发展至关重要,因为它能够帮助他们快速融入新环境,展示他们的能力,并为未来的项目做好准备。原创 2023-11-02 23:51:30 · 224 阅读 · 0 评论 -
程序员健康生活指南:从久坐到活力全开
程序员健康生活指南:从久坐到活力全开原创 2023-11-03 23:04:35 · 835 阅读 · 0 评论 -
【C++ 关键字 static_assert 相关问题】C++ 关于静态断言的编译问题 ,深入了解静态断言
静态断言(Static Assert,中文常称为“静态断定”)是C++11引入的一个新特性,允许我们在编译时进行断言。这意味着,如果某个条件不满足,编译器会在编译时生成一个错误,而不是在运行时。`static_assert`是在C++11中引入的关键字。C++14对其进行了一些增强,允许不带消息的`static_assert`,但基本的`static_assert`功能是从C++11开始的。原创 2023-08-17 00:30:00 · 401 阅读 · 0 评论 -
深入解析C++ JSON库:nlohmann::json:: parse的内部机制与应用
JSON解析是将JSON格式的字符串转换为程序可以操作的数据结构的过程。在C++中,通常会将JSON数据解析为一种特殊的数据类型,如`nlohmann::json`,这种数据类型可以方便地访问和操作JSON数据。在解析过程中,我们需要处理各种JSON元素,如对象(object)、数组(array)、字符串(string)、数字(number)、布尔值(boolean)和null。每种元素都对应一种或多种C++类型,例如,JSON对象对应C++的`std::map`或`std::unordered_map原创 2023-07-25 13:57:48 · 4571 阅读 · 0 评论 -
【C++ 并发 线程池设计】深入理解C++线程池:设计、实现与应用
在并发编程中,线程池(Thread Pool)是一种常见的设计模式,它可以有效地管理和控制多线程的执行。线程池中预先创建了一定数量的线程,这些线程可以并发地执行多个任务。当新的任务到来时,线程池会选择一个空闲的线程来执行这个任务。当任务执行完毕,线程会返回到线程池中,等待下一个任务的到来。原创 2023-07-06 15:49:13 · 674 阅读 · 0 评论 -
【C++ 多线程】C++ 多线程环境下的资源管理:深入理解与应用
在多线程环境中,资源(如套接字、文件描述符等)的管理面临着一些挑战。首先,我们需要确保资源的正确性和一致性。这意味着,我们需要防止多个线程同时修改同一资源,从而导致数据竞争(Data Race)。其次,我们需要有效地利用资源。这意味着,我们需要避免资源的浪费,例如,避免创建过多的套接字或文件描述符。原创 2023-07-05 16:30:28 · 528 阅读 · 0 评论 -
【C++ 多态 】深入理解C++的运行时类型信息(RTTI):dynamic_cast和typeid的应用与原理
在C++中,运行时类型信息(Runtime Type Information,简称RTTI)是一种强大的机制,它允许在程序运行时查询和操作对象的类型信息。RTTI的主要组成部分是`dynamic_cast`和`typeid`,它们分别用于安全的类型转换和类型识别。原创 2023-07-04 23:59:26 · 599 阅读 · 0 评论 -
【C++ 多态 】了解 C++ 中的类型擦除和虚拟函数调用
类型擦除(Type Erasure)是一种编程技术,它允许我们在编译时忽略类型的具体信息,从而可以在运行时处理不同类型的对象。在C++中,类型擦除通常通过使用模板和虚拟函数实现。原创 2023-07-04 21:11:02 · 956 阅读 · 3 评论 -
【C++ 内联函数和库】了解函数导出至库的原理以及其中内联函数的处理
在 C++ 中,内联函数(Inline functions)的主要目的是为了减少函数调用的开销。当函数被声明为内联时,编译器会尝试将函数调用直接替换为函数体,从而避免了函数调用的开销。然而,这种替换只有在编译器可以看到函数定义的情况下才可能发生。在库(Library)中,情况就有些不同了。库的使用者可能只链接库,而不包含定义内联函数的头文件。在这种情况下,链接器在链接库时找不到内联函数的定义,就会出现符号查找错误(Symbol lookup error)。原创 2023-07-03 14:41:18 · 463 阅读 · 0 评论 -
【C/C++ Vector容量调整】理解C++ Vector:Reserve与Resize的区别与应用
虽然Reserve和Resize都可以用于调整Vector的内存,但它们的功能和使用场景有所不同。Reserve是用于预分配内存,它可以提高程序的性能,但不会改变Vector的大小。而Resize是用于改变Vector的大小,它会分配或释放内存,并且会改变Vector的元素数量。在选择使用Reserve还是Resize时,我们需要根据实际的需求来决定。如果我们只是想预分配内存,以提高程序的性能,那么应该使用Reserve。如果我们需要改变Vector的元素数量,那么应该使用Resize。原创 2023-07-02 23:24:56 · 6853 阅读 · 4 评论 -
【C/C++ 模板编程 链接问题】 了解和解决模板编程中的链接错误以及正确的模板编写方式
C++模板在链接过程中有一些特殊的行为。首先,模板不是一个具体的函数或类,而是一个用于生成函数或类的蓝图。模板的实例(即,从模板生成的具体函数或类)才会在对象文件中生成符号。其次,模板的实例是在编译时生成的。这意味着,如果一个模板在一个源文件中被实例化,但在另一个源文件中没有被实例化,那么链接器在后一个源文件的对象文件中就找不到模板实例的符号。原创 2023-07-02 23:11:41 · 935 阅读 · 3 评论 -
【研究Qt webengine 模块编译】linux 交叉编译qt5.12的webengine模块成功的条件
qt webengine的构建条件,一般在交叉编译时需要,评估下工作.原创 2020-02-21 10:21:40 · 14816 阅读 · 17 评论 -
【C/C++ 深入探讨构函数】C++ 编译器在什么情况下无法生成默认的析构函数?
在我们探讨 C++ 中的类析构函数时,最基本的认识是:析构函数(Destructor)主要负责在对象生命周期结束时清理和回收资源。然而,当我们开始使用一些高级的语言特性,比如自定义的析构函数,或者依赖编译器生成默认的析构函数时,就可能会碰到一些复杂的问题。今天,我们将深入这个主题,探索一些高级和实际应用中可能遇到的问题,并通过实例代码来理解解决方案。原创 2023-06-30 23:17:15 · 352 阅读 · 0 评论 -
【C/C++ 疑难解决】深入解析C++链接错误:实用的调试技巧和方法
在我们的编程生涯中,每个人都可能遇到过让人困惑的链接错误,它们有时会阻碍我们的工作,甚至导致产品无法成功地进行编译或运行。这些错误信息看起来可能会很复杂,特别是在 C++ 中,错误信息可能包含一些经过改编(mangling)的函数名(例如 `_ZN5Conti13ConfigMangent`)。这使得链接错误的调试变得更具挑战性。原创 2023-06-30 21:46:59 · 1165 阅读 · 0 评论