c++新特性
文章平均质量分 65
不是杠杠
严于律己,宽以待人。
学无止境
展开
-
explicit关键字详解
在C++中,explicit关键字用于声明只能通过显式调用来调用的单参数构造函数(即只接受一个参数的构造函数)。这样的构造函数默认可以用于隐式类型转换,但使用了explicit关键字后,禁止了隐式转换,只能通过显式调用来使用。原创 2024-03-11 22:30:45 · 298 阅读 · 0 评论 -
新式的字符串字面常量(String Literal)
在 C++ 中,关于字符串字面常量的新式语法或特性主要与原始字符串字面量(Raw String Literals)和用户定义的字符字面量(User-Defined Literals for Characters)有关原创 2024-03-11 20:30:39 · 303 阅读 · 0 评论 -
c++ 新的函数声明语法
在C++11及以后的标准中,引入了一些新的函数声明语法,其中最显著的变化是引入了函数声明中的右值引用(&&)、默认参数和noexcept关键字。原创 2024-03-11 20:23:57 · 781 阅读 · 0 评论 -
右值引用(rvalue reference)
C++11 引入了右值引用(rvalue reference)的概念,这是为了支持移动语义(move semantics)和完美转发(perfect forwarding)而引入的新特性。右值引用允许我们高效地处理临时对象,避免不必要的拷贝,从而提高程序的性能。原创 2024-03-06 17:55:27 · 1402 阅读 · 0 评论 -
带领域的枚举(Scoped Enumeration
带领域的枚举(Scoped Enumeration)在C++中确实是一个重要的特性,它允许你创建类型安全的枚举,其中每个枚举值都是其枚举类型的一部分,并且不会隐式地转换为整数或从整数转换回来。这样做可以防止一些常见的编程错误,比如错误地假设枚举值可以直接与整数互操作。原创 2024-03-04 22:20:59 · 1016 阅读 · 0 评论 -
函数模板(Function Templates)
函数模板(Function Templates)是C++中的一种机制,允许您编写可以处理多种不同类型的函数,而无需为每种类型都编写一个单独的函数。函数模板在参数类型或数量上可以是泛化的,允许您编写一次代码,然后在多种类型上进行重复使用。原创 2024-02-21 17:20:02 · 270 阅读 · 0 评论 -
variable template(变量模版)
C++14引入了,它类似于函数模板,但是定义的是变量而不是函数。变量模板使得我们可以以模板的方式定义一系列不同类型的变量,从而提高代码的通用性和可重用性。原创 2024-02-21 17:11:08 · 372 阅读 · 0 评论 -
constexpr 关键字(常量表达式)
constexpr关键字用于在编译时求值,并要求在编译时就能确定其值。它通常用于声明常量表达式、函数、构造函数等,以便在编译时进行优化。原创 2024-02-21 16:48:53 · 596 阅读 · 0 评论 -
c++ pimpl
Pimpl(Pointer to Implementation)是一种设计模式,它将类的实现细节(私有成员变量和方法)隐藏在一个单独的实现类中,并在公共接口类中仅使用指向实现类的指针。原创 2024-02-20 11:13:01 · 324 阅读 · 0 评论 -
C++ RAII
RAII(Resource Acquisition Is Initialization)是C++编程中的一种重要的资源管理技术。它的核心思想是:资源的获取应该在对象的构造阶段进行,而资源的释放则应该在对象的析构阶段进行。通过利用C++对象的生命周期和析构函数,在对象生命周期结束时自动释放资源,从而避免资源泄漏和内存泄漏的发生。具体来说,RAII 的实现方式是将资源的管理封装到类中,利用类的构造函数来获取资源,利用析构函数来释放资源。这样,当对象被创建时,资源被获取;原创 2024-02-20 10:26:34 · 1006 阅读 · 0 评论 -
range-Based for循环
在这个示例中,declaration部分的int num声明了一个整型变量num,用于存储每次迭代中的当前元素的值。range-based for循环在遍历过程中不需要指定起始和结束迭代器,它会自动遍历collection中的所有元素,并将每个元素赋值给declaration中声明的变量,然后执行statement中的语句。3.statement:循环体内的语句,用于处理每个元素。1.declaration:用于声明循环中每个元素的变量,可以是引用也可以是值,类型由collection中元素的类型决定。原创 2024-02-19 16:34:03 · 244 阅读 · 0 评论 -
c++ auto关键字
在C++11中引入了auto关键字,用于声明变量时自动推导其类型。使用auto关键字声明的变量,其类型会根据变量初始化表达式的类型来确定,编译器会在编译时进行类型推导。下面是一个简单的示例,演示了如何使用auto关键字:原创 2024-02-19 16:28:15 · 154 阅读 · 0 评论 -
uniform initialization(一致化初始化)
uniform initialization(一致化初始化)原创 2024-02-01 21:08:52 · 276 阅读 · 0 评论 -
decltype 关键字
decltype 关键字在 lambda 表达式中通常用于指定 lambda 函数的返回类型或者获取 lambda 表达式中某个表达式的类型。在这个例子中,decltype(t * u) 用于确定 lambda 函数的返回类型,它将是 t 和 u 相乘的类型。在这个例子中,decltype(x + y) 用于指定 lambda 函数的返回类型,它将是 x 和 y 相加的类型。提供了一种灵活的方式来处理表达式的类型,特别是在模板和泛型编程中,可以用于自动地推导表达式的类型而不依赖于硬编码。原创 2024-01-31 09:22:20 · 376 阅读 · 0 评论 -
override关键字详解
编译运行:在上述示例中,derived类试图重写基类base的虚函数getValue,但它没有使用override关键字,也没有显式地指明该函数是对基类虚函数的重写。这种情况下,编译器并不会发出警告或错误。问题是,derived类中的foo函数的参数列表或返回类型与基类中的虚函数是否匹配是开发人员自己的责任。如果开发人员犯了错误,如参数列表不匹配或返回类型不一致,就会导致函数并没有真正地重写基类函数,而是在派生类中重新定义了一个新的函数。这可能会导致预期之外的行为和错误,而且这种问题在编译时无法捕获。原创 2023-08-22 16:58:45 · 146 阅读 · 0 评论 -
泛型编程(函数模板,类模板,成员函数模板,模板偏特化,模板模板)
类的模板模板(Template Template for Classes)是C++中一种高级的模板技术,它扩展了模板模板的概念,使得我们可以定义接受模板类作为参数的类模板。通过使用类的模板模板,我们能够编写更加灵活和通用的类模板,使其能够处理不同类型的模板类作为参数。总之,模板模板是C++中一种强大的模板技术,允许我们定义接受模板作为参数的模板。成员模板函数是类模板中的成员函数,其模板参数独立于类模板的模板参数。类模板是一种通用的类定义,类的成员变量和成员函数的类型可以在类定义时使用模板参数。原创 2023-06-25 14:26:34 · 230 阅读 · 0 评论 -
conversionfunction(转换函数)/c++
转换函数只能作为类的成员函数,它可以将一种类型转换成另外一种类型(可以是自定义类型)。转换函数没有返回类型,转换函数的基本形式是perator typename(),typename既是返回的数据类型。转换函数通常会加上const 因为不会改变类的成员变量的值。原创 2023-06-21 15:00:00 · 77 阅读 · 0 评论 -
Alias Template(别名模版)和Type Alias(类型别名)
使用别名模板可以提高代码的可读性和灵活性,尤其是在模板元编程和泛型编程中。例如,当你需要使用一个复杂的模板类型时,可以通过别名模板为它创建一个更简洁的名称,使得代码更易于理解。此外,别名模板还可以用于简化模板类型的声明,提高代码的可维护性。Alias Template(别名模板)是一种C++编程语言中的模板技术,它允许程序员使用别名来引用已有的类型。通过别名模板,可以创建新的类型别名,使得代码更易读、更易维护。Type Alias 是一个更通用的概念,可以用于任何类型,不仅仅限于模板类型。原创 2022-06-23 17:53:51 · 41 阅读 · 0 评论