石家庄哪里做网站,百顺网站建设,黄骅市医院,千锋教育培训收费一览表目录
1、模块(Modules)
2、协程(Coroutines)
3、概念(Concepts)
4、范围(Ranges)
5、三向比较符#xff08;three-way comparison#xff09; C软件异常排查从入门到精通系列教程#xff08;专栏文章列表#xff0c;欢迎订阅#xff0c;持续更新...#xff09;https…目录
1、模块(Modules)
2、协程(Coroutines)
3、概念(Concepts)
4、范围(Ranges)
5、三向比较符three-way comparison C软件异常排查从入门到精通系列教程专栏文章列表欢迎订阅持续更新...https://blog.csdn.net/chenlycly/article/details/125529931C/C实战进阶专栏文章已更新390多篇持续更新中...https://blog.csdn.net/chenlycly/category_11931267.htmlWindows C 软件开发从入门到精通专栏文章持续更新中...https://blog.csdn.net/chenlycly/category_12695902.htmlVC常用功能开发汇总专栏文章列表欢迎订阅持续更新...https://blog.csdn.net/chenlycly/article/details/124272585C软件分析工具从入门到精通案例集锦专栏文章持续更新中...https://blog.csdn.net/chenlycly/article/details/131405795开源组件及数据库技术专栏文章持续更新中...https://blog.csdn.net/chenlycly/category_12458859.html网络编程与网络问题分享专栏文章持续更新中...https://blog.csdn.net/chenlycly/category_2276111.html C20是C标准委员会于2020年12月发布的新标准作为C17的后继版本C20引入了许多新的特性和改进旨在提高C的表现力、可读性和可维护性同时保持其高效性和灵活性。下面介绍一下C20的一些新特性。 很多C开源库会大规模地使用C11及以上的新特性比如WebRTC开源库所以在阅读开源代码时需要了解C11及以上新特性。我们在日常编码中会用到部分新特性比如一些新的关键字auto、nullptr、override、final等、lambda表达式匿名函数、智能指针等。此外现在很多C开发岗位在面试时都会问到C11或以上的新特性方面的内容。所以学习C11及以上的新特性很有必要C新标准引入的诸多新特性解决了语言上的部分缺陷使得C更得加高效灵活但也使得C变得更加臃肿复杂更加难以驾驭 1、模块(Modules) C20中的模块(Modules)是用来取代头文件包含(include)的一种新的代码组织方式。模块可以提高编译速度,也增加了封装性。 使用模块的步骤如下 1创建模块接口文件(.ixx文件),定义要导出的接口
// hello.ixx
export module hello;export void sayHello();
2创建模块实现文件(.cpp文件),实现接口
// hello.cpp
module hello;void sayHello()
{std::cout Hello World!\n;
}
3在使用模块的文件中导入模块
// main.cpp
import hello;int main()
{sayHello();
}
4编译时需要添加-fmodules-ts参数。 模块的好处是可以明确定义公开的接口,也避免头文件包含导致的重复定义等问题。编译生成的二进制格式可以跨平台兼容。但模块目前还没有被所有编译器广泛支持。 在这里给大家重点推荐一下我的几个热门畅销专栏欢迎订阅博客主页还有其他专栏可以去查看
专栏1该精品技术专栏的订阅量已达到500多个专栏中包含大量项目实战分析案例有很强的实战参考价值广受好评专栏文章持续更新中预计更新到200篇以上欢迎订阅
C软件调试与异常排查从入门到精通系列文章汇总https://blog.csdn.net/chenlycly/article/details/125529931 本专栏根据多年C软件异常排查的项目实践系统地总结了引发C软件异常的常见原因以及排查C软件异常的常用思路与方法详细讲述了C软件的调试方法与手段以图文并茂的方式给出具体的项目问题实战分析实例很有实战参考价值带领大家逐步掌握C软件调试与异常排查的相关技术适合基础进阶和想做技术提升的相关C开发人员 考察一个开发人员的水平一是看其编码及设计能力二是要看其软件调试能力所以软件调试能力排查软件异常的能力很重要必须重视起来能解决一般人解决不了的问题既能提升个人能力及价值也能体现对团队及公司的贡献 专栏中的文章都是通过项目实战总结出来的包含大量项目问题实战分析案例有很强的实战参考价值专栏文章还在持续更新中预计文章篇数能更新到200篇以上 专栏2
C常用软件分析工具从入门到精通案例集锦汇总专栏文章持续更新中...https://blog.csdn.net/chenlycly/article/details/131405795 常用的C软件辅助分析工具有SPY、PE工具、Dependency Walker、GDIView、Process Explorer、Process Monitor、API Monitor、Clumsy、Windbg、IDA Pro等本专栏详细介绍如何使用这些工具去巧妙地分析和解决日常工作中遇到的问题很有实战参考价值 专栏3本专栏涵盖了多方面的内容是当前重点打造的专栏专栏文章已经更新到390多篇持续更新中...
C/C实战进阶专栏文章持续更新中...https://blog.csdn.net/chenlycly/category_11931267.html 以多年的开发实战为基础总结并讲解一些的C/C基础与项目实战进阶内容以图文并茂的方式对相关知识点进行详细地展开与阐述专栏涉及了C/C领域多个方面的内容包括C基础及编程要点模版泛型编程、STL容器及算法函数的使用等、C11及以上新特性不仅看开源代码会用到日常编码中也会用到部分新特性面试时也会涉及到、常用C开源库的介绍与使用、代码分享调用系统API、使用开源库、常用编程技术动态库、多线程、多进程、数据库及网络编程等、软件UI编程Win32/duilib/QT/MFC、C软件调试技术排查软件异常的手段与方法、分析C软件异常的基础知识、常用软件分析工具使用、实战问题分析案例等、设计模式、网络基础知识与网络问题分析进阶内容等。 专栏4
VC常用功能开发汇总专栏文章持续更新中...https://blog.csdn.net/chenlycly/article/details/124272585 将10多年C开发实践中常用的功能以高质量的代码展现出来。这些常用的高质量规范代码可以直接拿到项目中使用能有效地解决软件开发过程中遇到的问题。 专栏5
Windows C 软件开发从入门到精通专栏文章持续更新中...https://blog.csdn.net/chenlycly/category_12695902.html 根据多年C软件开发实践详细地总结了Windows C 应用软件开发相关技术实现细节分享了大量的实战案例很有实战参考价值。 2、协程(Coroutines) C20引入了协程支持执行一些异步的任务使得异步编程更加方便和可读。协程是一种轻量级的并发机制可以简化异步编程和无阻塞IO的处理。 协程的基本语法是
// 定义一个协程
coroutine返回值类型 协程名称();// 使用 co_await 语句暂停/恢复协程
co_await some_expression; // 协程最后需要一个 co_return 语句返回值
co_return some_value; 使用协程的实例
#include coroutinetaskint getValue()
{int value co_await getValueFromNetwork();// do somethingco_return value;
}int main()
{auto result getValue(); // 不会堵塞auto value result.get(); // 获取协程返回值} 在上面代码中,getValue() 被定义为一个协程它可以通过co_await语句暂停自身等待getValueFromNetwork()完成网络操作后再继续执行。 主函数调用getValue()只会启动协程任务并不会堵塞可以同时干其他事情。后面再通过result.get()来获取协程执行结束后的返回值。这样就可以实现一种异步的编程模式了。
3、概念(Concepts) C20引入了概念(Concepts)这是一种新的语言特性用于对模板参数进行约束。它允许开发者以更直观和可理解的方式表达模板的约束条件从而简化模板编程并提高代码的可读性。概念可以明确地指定模板参数需要满足的要求使代码更清晰易懂。 定义一个概念的语法如下
template typename T
concept MyConcept requires(T t) {t.someOperation();
}; 实例1限定类型必须是可increment的
concept Incrementable requires(T x) {x; // 必须支持运算
};template Incrementable T
void incTwice(T num)
{num;num;
}incTwice(a); // 编译失败,如果a不支持 实例2限定类型必须可比较
concept EqualityComparable requires(T a, T b) {{a b} - bool; // 必须可比较
};template EqualityComparable T
bool isEqual(T a, T b) {return a b;
} 实例3使用嵌套约束
concept NestedConstraint EqualityComparable Incrementable; template NestedConstraint T
void func(T x) {//...
} 实例4约束类的属性和行为:
concept Drawable requires(T x) {x.draw(); // 必须有draw方法x.x; // 必须有x坐标x.y; // 必须有y坐标
}; 以前在C模板中无法对传递进来的类型进行有效性检查只能简单地使用或不使用容易造成难以调试的错误概念允许我们明确地定义模板参数需要满足哪些条件比如必须有某个成员函数必须可转换为某种类型等。如果传入的类型不满足概念的要求会直接导致编译错误使问题更早暴露。
4、范围(Ranges) C20新增了一个统一且功能强大的范围操作库简化了对容器、视图以及迭代器的处理。Ranges库提供了一套丰富的算法和工具使得处理数据序列变得更加直观和高效。 Ranges库主要特点包括: 引入范围range的抽象概念,如数组、容器都可以视为一个range。统一开始和结束的迭代器概念为range的begin和end。算法可以直接作用于不同的range上,而不仅仅是容器。支持各种新的range Adaptor,可以将范围进行转换、过滤等。 下面是一个使用范围的简单例子
#include iostream
#include ranges
#include vectorint main()
{std::vectorint vec {1, 2, 3, 4, 5}; // 用基于范围的for循环迭代for (int i : vec | std::views::filter([](int i){return i % 2 0;})) {std::cout i ; }// 输出:2 4
}
这里通过views::filter() adapter将vec转换为一个过滤后的range,然后用range-based for循环进行迭代。 这种基于范围的编程方式可以大大简化迭代操作而且可重用性强非常适合函数式编程范式。 算法作用于范围的实例
std::vectorint vec {3,1,4,5,2};std::ranges::sort(vec); // 输出 1 2 3 4 5
for (int i : vec)
{std::cout i ;
}
总之范围大大简化了迭代器和算法的使用是C现代化编程方式的重要进步。
5、三向比较符three-way comparison C20 引入了 三向比较运算符,可以用来替代之前的 ,!,,,] 等二元比较运算符。三向比较运算符按照下面的规则进行比较 如果左边小于右边返回 -1如果左边等于右边返回 0如果左边大于右边返回 1 一些使用三向比较运算符的示例
int a 1, b 2;if (a b -1) {// a b
} if (a b 0) { // a b
}if (a b 1) {// a b
}std::sort(vec.begin(), vec.end(), [](int a, int b) {return a b; // 升序
}); 三向比较运算符提高了代码可读性也统一了所有比较操作的方式。编译器可以更好地优化三向比较。总体来说三向比较使代码更简洁易读也更符合现代C的编程思想可以替代传统的二元比较运算符。