这里可能没有你想看的...
02
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
16
C++11 の 类型推导(Auto & Decltype) C++11 の 类型推导(Auto & Decltype)
C++11引入了 auto 和 decltype 这两个关键字,从而可以在编译期就推导出变量或者表达式的类型,方便开发者编码也简化了代码。 auto 关键字 auto 的作用便是自动推导变量/函数(C++14起)/模板(C++20起)的类
2023-01-16
14
C++ の 流(Stream) C++ の 流(Stream)
C++ 程序常用 cin , cout 进行标准 I/O(从键盘读取数据,或输出数据到屏幕),当然也可以进行文件 I/O (基于文件的数据读写)。这些行为本质上都是进行数据传输——数据向水流一样从一个地方流到另一个地方。C++11 中,将这
2023-01-14
4 / 6