modern专题

Modern C++——使用分支预测优化代码性能

大纲 [[likely]][[unlikely]]样例应用场景题外参考代码参考资料 在C++20中,新引入了一对属性关键字[[likely]]和[[unlikely]],它们用于为编译器提供关于代码分支执行概率的额外信息,以帮助编译器进行更好的优化。这对属性是基于长期实践中开发人员对程序执行路径的深入理解而设计的,特别是在面对复杂逻辑和频繁分支的情况下。 [[likely]]

Modern C++——无所有权指针的安全性保障

大纲 C++98中的实现Modern C++的实现总结 C++98中的实现 在C++98标准中,当涉及到多线程环境时,对共享资源的访问需要特别小心以避免数据竞争(data race)问题。数据竞争是指两个或多个线程同时访问同一内存位置,且至少有一个线程正在修改该内存位置,同时又没有适当的同步机制(如互斥锁、信号量等)来协调这些访问的情况。 在C++98中,标准库本身并不直接支持

Modern C++——函数参数类型的分类和使用

大纲 基本定义值类型左值引用非常量左值引用常量左值引用 右值引用总结 在C++中,函数参数主要有两种方式:值类型和引用类型。其中引用类型又分为:左值引用和C++11引入的右值引用。下面我们分别对其进行介绍。 基本定义 要弄清楚这些概念,我们先要知道什么是左值,什么是右值。 左值是指在内存中有确定存储地址的对象,可以在表达式中出现在赋值操作符的左侧。右值是指在表达式中没有持久存

Modern restaurant - building and interior (餐厅场景)

餐厅是模块化的,因此您可以使用提供的构造元素(如墙壁模块、地板模块、窗户、吧台、厨房模块、门、天花板模块等)进一步设计自己的餐厅。 图像和视频中显示的完整场景包含在此资源包中,可以用作游戏和3D项目的起点! ★ 主要特点 ★ 全模块化内饰和外观 全模块化厨房和餐厅设备 许多优质的道具 游戏准备演示场景 ★ 资产★ 模块化建筑。 浴室:室内门、镜子、混合器、纸巾分配器、纸巾分配器、水槽、肥皂分配

Modern C++——不准确“类型声明”引发的非必要性能损耗

大纲 案例代码地址 C++是一种强类型语言。我们在编码时就需要明确指出每个变量的类型,进而让编译器可以正确的编译。看似C++编译器比其他弱类型语言的编译器要死板,实则它也做了很多“隐藏”的操作。它会在尝试针对一些非预期类型进行相应转换,以符合预期,比如《C++拾趣——类构造函数的隐式转换》中提到的隐式转换。 但是也正因为这些“隐藏”的转换行为,让一些行为超出我们的预期。比如本文提

Modern OpenGL :光照shader

Modern OpenGL :光照shader 1. 前言2. 数学背景3. 实现 1. 前言   采用shader实现了标准? 冯氏光照模型。 2. 数学背景 老生长谈了。 光照模型:冯氏光照模型(环境光+漫反射+镜面反射)光源类型:点光源 环境光通常是一个常量 a m b i e n t = C a ambient= C_{a} ambient=Ca​ 漫反射与面

[原创](Modern C++)现代C++的std::bind花式绑定,使用方式大全.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Stu

[原创](Modern C++)现代C++的Lambda表达式常规概念以及细节探讨

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Stu

Modern C++ 新特性

智能指针 weak_ptr 一般配合shared_ptr使用,两者之间可以相互转换: shared_ptr转成weak_ptr:可以直接赋值,不会增加引用计数,weak_ptr有自己的引用计数:副引用计数 auto sp = std::make_shared<int>(42);std::weak_ptr<int> gw = sp; weak_ptr转成shared_ptr,用以测试s

How browsers work--Behind the scenes of modern web browsers (前端必读)

浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工 作原理,我们将看到,从你在地址栏输入google.com到你看到google主页过程中都发生了什么。 将讨论的浏览器 今天,有五种主流浏览器——IE、Firefox、Safari、Chrome及Opera。 本文将基于一些开源浏览器的例子——Firefox、 Chrome及Safari,Safari是部分开源的。 根据W3

【Effective Modern Cpp】条款9:优先考虑别名声明而非typedef

别名声明和typedef都能避免使用冗长的变量名称,但是别名声明更加直观,如下: typedefstd::unique_ptr<std::unordered_map<std::string, std::string>>UPtrMapSS; using UPtrMapSS = std::unique_ptr<std::unordered_map<std::string, std::string>

Modern C++ 开篇

开篇 常常在网上看到有刚入门C++的朋友问,看完C++ Primer后应该用什么项目进行练手?很多回答中会提到仿写STL。但是对于新手来说,打开侯捷大神的STL源码剖析的第一章,压力就扑面而来,满地的下划线、模板、C++特性,还没摸到容器实现就劝退警告了! 我也是一个菜鸟,为了练习C++、了解数据结构,选择了阅读仿写STL,途中历经九九八十一难,深知新手学习之不易。网上资料老旧,零碎且不完整,

Project Management for Modern Information Systems

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。 http://blog.csdn.net/topmvp - topmvp In the past, project success has been defined too narrowly as simply meeting time and cost constraints fo

DHTML Utopia Modern Web Design Using JavaScript DOM [ILLUSTRATED]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。 http://blog.csdn.net/topmvp - topmvp "Create Killer Websites Using the Power of Modern JavaScript" DHTML Utopia is an easy-to-follow, step-b

《Effective Modern C++》- 极精简版 22-29条

本文章属于专栏《业界Cpp进阶建议整理》         继续上篇《Effective Modern C++》- 极精简版 15-21条。本文列出《Effective Modern C++》的22-29条的个人理解的极精简版本。          Item22、当使用Pimpl惯用法,请在实现文件中定义特殊成员函数(由编译器自动生成的) 对于std::unique_ptr

《Effective Modern C++》- 极精简版 15-21条

本文章属于专栏《业界Cpp进阶建议整理》         继续上篇《Effective Modern C++》- 极精简版 5-14条。本文列出《Effective Modern C++》的15-21条的个人理解的极精简版本。          Item15、尽量使用constexpr constexpr形容对象 constexpr对象都是const,但是const对象不

《Effective Modern C++》- 极精简版 5-14条

本文章属于专栏《业界Cpp进阶建议整理》         继续上篇《Effective Modern C++》- 极精简版 1-4条。本文列出《Effective Modern C++》的5-14条的个人理解的极精简版本。 Item5、优先考虑auto而非显示类型声明 auto的优势:  强制变量初始化在返回部分场景,会返回一些晦涩的类型,甚至编译器才知道的类型返回

Modern C++ std::variant的实现原理

1. 前言 std::variant是C++17标准库引入的一种类型,用于安全地存储和访问多种类型中的一种。它类似于C语言中的联合体(union),但功能更为强大。与联合体相比,std::variant具有类型安全性,可以判断当前存储的实际类型,并且可以存储结构体/类等复杂的数据结构。 2. preview 原理 我们依然采用“一图胜千言”的思想,给大家先展现下std::variant对应的

【Modern OpenGL】OpenGL简介

说明:跟着learnopengl的内容学习,不是纯翻译,只是自己整理记录。  强烈推荐原文,无论是内容还是排版。 原文链接  本文地址: http://blog.csdn.net/aganlengzi/article/details/50354162 OpenGL 在真正开始我们的探索之旅时,我们应该首先知道:OpenGL是什么。OpenGL通常被定义为一组用于操作图形和图像的应用程序编

Modern C++ 内存篇2 - 关于relocation的思考

在上一节《Modern C++ 内存篇1 - std::allocator VS pmr-CSDN博客》我们详细讨论了关于如何判断用不用memmove优化的代码,结论可以总结为: 只有_Tp是trivial 且 用std::allocator 才会调用memmove。 所有case如下表格所示: No_Tpallocator type使用memmove?可能的原因1is trivial

Modern C++ 内存篇1 - std::allocator VS pmr

大年三十所写,看到就点个赞吧!祝读者们龙年大吉!当然有问题欢迎评论指正。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. 前言 从今天起我们开始内存相关的话题,内存是个很大的话题,一时不知从何说起。内存离不开allocator,我们就从allocator开始吧。allocator目前有两种:std::al

[C/C++] -- JSON for Modern C++

JSON for Modern C++(nlohmann/json)是一个流行的 C++ JSON 库,由德国开发者nlohmann编写。这个库提供了简洁而灵活的 API,使得在C++中解析和生成JSON数据变得非常方便。 1.JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于在不同系统之间传输和存储数据。它基于JavaScript语

Modern C++ idiom3:RAII

当涉及到软件开发,资源管理是一个至关重要的方面。正确地获取和释放资源,如内存、文件句柄和网络连接,对于确保程序的高效和可靠运行至关重要。在C++中,资源获取即初始化(RAII)提供了一种强大而优雅的解决方案,用于自动管理资源。 什么是RAII? RAII是C++编程技术,将资源的生命周期与对象的作用域绑定在一起。其核心思想是资源的获取发生在对象初始化期间,而资源的释放在对象超出作用域时自动处理

Modern C++ std::get<n>(tuple)的原理

1. 前言 前面我们讲过std::tuple的实现原理,但没有讲如何取出数据,本节着重讲讲这点。本节与之前的blog有较大关联,如果您没看,这里有链接,链接已按由浅入深排好序,您可以按顺序阅读。如果时间少可以直接看第三篇由工具快速理解std::tuple的实现原理: Modern C++ std::unique_ptr的实现原理 带出size问题Modern C++ std::tuple的si

Modern C++ idiom1:Copy-and-Swap

​ Copy-and-Swap(拷贝并交换)是一种 C++ 编程技术,用于以提供强异常安全性保证的方式实现赋值运算符(operator=)。这种技术在处理资源管理(如管理动态内存或其他外部资源)时特别有用。该技巧涉及使用拷贝构造函数、交换函数和临时对象。 比如在前面有一篇介绍shared_ptr.reset实现的帖子中就涉及到了这种编程技巧,回想一下: 1287 template<

Modern C++ std::unique_ptr的实现原理

​ unique_ptr是一个非常简单的类,没有计数没有原子操作,非常类似纯指针。 它的类定义也非常简单: 它针对数组做了模板偏特化,因为它得支持数组操作比如Arr[i]。 unique_ptr的本质就是std::tuple, 里面第一项为指针指向管理对象,第二项为deleter:是一个函数指针或仿函数,用来删除管理对象。 故unique_ptr的size大小有两种可能: 8:默认delet