这里可能没有你想看的...
03
01
C++ の 异常处理(Exception) C++ の 异常处理(Exception)
异常,在操作系统中指的是指令内部出现的"内中断",如除数为零,地址越界等。这些情况在程序中也时有发生,C++ 为了应对偶发的程序异常事件,引入了异常处理机制。其基于三个关键字:try,throw 与 catch。 异常处理流程 一个完整的
2023-03-01
02
28
C++ の 泛型编程(Generics) C++ の 泛型编程(Generics)
泛型编程是程序设计语言的一种风格或范式,允许程序员在编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。在 C++ 里,这是与 OOP 并列的一大分支,通过模板来实现。 Why 模板? 现在有一个需求,就是写一个简单的 s
2023-02-28
27
C++ の 类型转换(Type&Cast) C++ の 类型转换(Type&Cast)
当表达式期望为 T 类型,而我们只能产生 S 类型的表达式时,就需要利用类型转换功能来满足需求。 传统的转换总结来说分为隐式与显式两种。 隐式转换 凡是在语境中使用了某种表达式类型 T1,但语境不接受该类型,而接受另一类型 T2 的时候,
2023-02-27
19
C++ の 内存分配(Memory Allocation) C++ の 内存分配(Memory Allocation)
众所周知,C++ 是一门与内存紧密相关的语言,本文就来聊聊 C++ 眼中的内存分配。 内存布局 C++ 程序的内存分为 5 大区域,分别为代码区、常量存储区、全局/静态存储区、堆区、栈区,每个区域存放不同类型的数据: 代码区(.text
2023-02-19
14
C++ の 面向对象(OOP) C++ の 面向对象(OOP)
面向对象程序设计(Object-oriented programming, OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。 封装 装 装是指把数据与操作这些数据的函数绑定到一块,抽象成一个类。 C++11 引入移
2023-02-14
13
C++ の 内联函数(Inline) C++ の 内联函数(Inline)
inline 只能用于修饰函数,能够解决一些频繁调用的小函数大量消耗栈内存的问题,是一种提高程序运行效率的手段。 inline 基本 众所周知,函数的调用需要消耗栈内存,每次调用一个函数,就会在栈中分配一片函数所需内存(如参数压栈),但栈
2023-02-13
13
C++ の 静态修饰符(Static) C++ の 静态修饰符(Static)
static 是 C++ 中很常用的修饰符,它被用来控制变量的存储方式和可见性。 static 普通变量 static 修饰的普通变量存储在静态区,其生命周期延长至整个程序结束。只有第一次会执行初始化,若无初始值,则用默认值进行初始化。
2023-02-13
13
C++ の 常量(Const) C++ の 常量(Const)
const 与 volatile 一起并称 CV 限定符,用于指定被声明对象或被命名类型的常量性或易变性。 const 全称 constant,其指定一个约束,告知编译器该变量无法被修改。对于那些明确不发生改变的变量,应尽可能使用 con
2023-02-13
06
C++11 の 其它特性(Else) C++11 の 其它特性(Else)
有些 C++11 特性比较琐碎,单纯用一篇文章描述浪费,还有灌水嫌疑(bushi),于是整合到同一篇来讲。 范围 for 循环 允许 for 循环中使用 for (范围变量声明 : 范围表达式) 的形式进行遍历,无需 for(...;..
2023-02-06
05
C++11 の 正则表达式(Regex) C++11 の 正则表达式(Regex)
正则表达式,又称规则表达式(Regular Expression,常简写为 regex、regexp 或 RE),是一种文本模式/规则,包括普通字符和特殊字符(元字符)。通常使用单个字符串来表示正则表达式 pattern,并匹配一系列符合模
2023-02-05
04
C++11 の 预置与弃置(Default & Delete) C++11 の 预置与弃置(Default & Delete)
C++11 中新增了 default 与 delete 这俩关键字。请不要误会,这里的 delete 并不是与 new 搭配使用释放内存的那个,而是跟 default 相对的用于类成员函数声明的关键字。 default 众所周知,如果用户
2023-02-04
03
02
C++11 の 智能指针(Smart Pointer) C++11 の 智能指针(Smart Pointer)
C++ 不像 Java 那样有虚拟机动态的管理内存,如果使用裸指针,在程序运行过程中可能就会出现内存泄漏等问题,然而这种问题其实都可以通过 C++11 引入的智能指针来解决。 裸指针的内存泄漏问题 前面提到使用裸指针会存在内存泄漏等问题。
2023-02-02
01
29
C++11 の 并发支持(Concurrency) C++11 の 并发支持(Concurrency)
C++11 新增了官方并发支持库,使得我们能够更好地在系统间移植程序,之前的 Boost 库等也就随之成为历史了。 并发与并行 多线程的世界中,常常会涉及这俩重要概念。 从定义的角度来说,在操作系统中,并发是指一个时间段中有几个程序都处于
2023-01-29
28
C++11 の 列表初始化(List Initialize) C++11 の 列表初始化(List Initialize)
在 C++11 中,可以直接在变量名后面用 {初始化列表} 来进行对象的初始化。 旧世界 C++11 以前,各种初始化方式如神仙打架,百花齐放,在同一个项目中,你或许可以看到如以下几种不同的初始化方式: class A { public
2023-01-28
20
C++11 の 左值与右值(Lvalue & Rvalue) C++11 の 左值与右值(Lvalue & Rvalue)
早年的 C++ 中已经出现了左值与右值这两个基本概念,但并不重要,平时也不怎么会用到。直到 C++11 引入了右值引用等新特性,这俩概念终于翻身做起了主人——它们是理解移动与转发语义的重要基础。 值 所有值类别可用以下韦恩图描述: 左值
2023-01-20
18
C++11 の 函数调用(Function Call) C++11 の 函数调用(Function Call)
C++11 新增了若干使函数调用更加方便的特性。 lambda 表达式 lambda 表达式是闭包类型的纯右值变量,也可以称之为匿名函数。其基本用法为: auto func = [ 捕获 ] ( 参数列表 ) 可选说明符 -> 返回
2023-01-18
17
C++11 の 别名(Alias) C++11 の 别名(Alias)
虽然使用 auto 可以大大简化代码,但对于一些使用 dynamic_cast 的结果不能用 auto 作为占位符。将冗长的变量类型简化仍然是很头疼的一个问题,幸好 C++11 提供了用关键字 using 给类型起别名的特性,既能有效简化代
2023-01-17
4 / 7