C++ 智能指针 auto ptr
<p><code>auto_ptr</code> 是 C++98 中引入的智能指针,用于自动管理动态分配的对象的生命周期。然而,它在 C++11 中已被标记为已废弃,并且在 C++17 中已被移除,因为它存在一些严重的缺陷和安全问题。</p> <ol> <li>auto_ptr 用法 {#title-0} ...
<p><code>auto_ptr</code> 是 C++98 中引入的智能指针,用于自动管理动态分配的对象的生命周期。然而,它在 C++11 中已被标记为已废弃,并且在 C++17 中已被移除,因为它存在一些严重的缺陷和安全问题。</p> <ol> <li>auto_ptr 用法 {#title-0} ...
`Type Traits` 是 C++11 中的一种模板元编程技术,它提供了一系列的模板类和函数,用于在**编译时**查询和操作类型信息。这些类型特征可以用于泛型编程中,帮助我们编写更加灵活、通用和安全的代码。 例如:判断一个类型是否为指针类型、是否为整数类型、是否可以进行拷贝构造等等。这使得我们可以根据类型的属性来做出不同的编译时决策,从而避免在运行时出现错误或者不必要的性...
<p>C++ 是一种静态类型语言,数据类型在编译时确定。但在有些场景下,编译时无法确定数据类型,需要在运行时才能确定。RTTI(Run Time Type Identification,运行时类型识 别)就是一种能够在运行时动态确定数据类型的机制。</p> <ol> <li>RTTI 应用场景 {#title-0}</li&...
可以使用C对变量中的个别位进行操作。您可能对人们想这样做的原因感到奇怪。这种能力有时确实是必须的,或者至少是有用的。C提供位的逻辑运算符和移位运算符。 1. 位运算符 {#title-0} ================== 1. 位运算符 1. 取反 \~,对于每个位按位取反。 2. 位与 \&,对于每个位,只有两个操作数的对应位都是 1 时结果才为...
<p><code>std::function</code> 是 C++11 标准库中的一个类模板,用于封装可调用对象(函数、函数指针、成员函数指针、Lambda 表达式等),并提供一种统一的方式来管理它们。</p> <p>通过 <code>std::function</code>,你可以将可调用...
C++ 中的 using 用法有很多种,我们下面剖析下常见几种场景: 1. using 关键字给类型增加别名 2. using 用于继承中的同名函数 3. using 关键字用于构造函数 1. using 关键字给类型增加别名 {#title-0} ============================== ``` typedef int my_int1; using ...
<pre><code>// 1. C++11 就地初始化 // 所谓就地初始化,就是在变量定义时直接给其初始化。 // 以前我们可以通过:构造函数、成员初始化列表 // C++98的时候,静态的const变量使用的就是就地初始化 class Demo1 { public: const static int s_a = 100; }; // C++11 ...
<ol> <li>多继承的名字冲突问题 {#title-0} ========================</li> </ol> <p>多继承:一个类可以同时继承多个类,但是多继承很容易产生同名冲突(函数、变量)。</p> <pre><code>class A { public...
<ol> <li>异常对象的保存 {#title-0} =====================</li> </ol> <p>异常对象保存,指的是当异常发生时,我们将其捕获,但是并不马上处理,而是将其存储起来。这样的话,我们可以在程序最后、或者其他的并行任务的进程、线程里处理。</p> <p>...
<p>在 C++ 11之后,值的类别有三种:左值(lvalue)、纯右值(prvalue)、将亡值(xvalue)。</p> <ol> <li>左值 {#title-0} ================</li> </ol> <br /> <p>在C++中,左值(lvalue)是指...