invoke是C++17标准引入的一个函数模板,用来调用可调用对象(Callable Object,如函数指针、函数对象、成员函数指针等)并返回结果。
以前一直有了解C++20的新特性,但是因为编译器对此支持的比较少,所以很少实践。
本文详细解析extern "C"的底层原理与实际应用。
从C++17开始,在编写C++代码时就可以在头文件中定义inline变量。
C++ 17 已经支持在 if 语句和 switch 语句中使用初始化的语法。
在编程中,我们经常遇到这样的情况,我们可能返回/传递/使用某种类型的对象。也就是说,我们可以有某个类型的值,也可以没有任何值。因此,我们需要一种方法来模拟类似指针的语义,在指针中,我们可以使用nullptr来表示没有值。
std::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能。
C++11的shared_ptr是如何实现的,大家应该都能答出来引用计数的概念,本文教你手写一个shared_ptr。
inline 函数由 inline 关键字定义,引入 inline 函数的主要原因是用它替代 C 中复杂易错不易维护的宏函数。
在经典的设计模式中,有一种迭代器模式,定义为:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
本文主要介绍C++如何实现运行时期的类型判断,并且较为深入的讨论了具体源码的实现。
C++11支持range-based for循环,这是一个很方便的特性,本文带来范围for的实现原理。
在C语言中空结构体的大小是0,我们貌似可以理解,但为什么到C++中,空类的大小却是1呢?
本文主要介绍C++如何实现类型萃取以及如何禁止函数编译期间根据特定的条件来选择启用或禁用特定的重载,感兴趣的同学一起学习吧。
我将从定义、技术实现、设问形式、实例总结来阐述我对于萃取机制的理解。
泛型编程大家应该都很熟悉了,主要就是利用模板实现“安全的宏”,而模板元编程区别于我们所知道的泛型编程,它是一种较为复杂的模板,属于C++的高阶操作了,它最主要的优点就在于把计算过程提前到编译期,能带来可观的性能提升。接下来,请一起来学习吧。
我们在平时常常会听到有人说traits/萃取等高大上的东西,有时候可能也会对此产生很大的疑问,觉得type tratis很高大上,高深莫测;其实说到底这个东西很简单,总结为一句话就是在运行的时候识别类型(即类型萃取)。