CaveOps: Night-City
#Hello Edgerunners, welcome to the Night-City.

Welcome!

C++ Primer 007 : 引用

本篇主要介绍C++ 中的引用。 什么是引用 引用实际上不是一种独立的数据类型,类似于 C 中的指针,本质就是对变量起别名,例如: int a = 66; int& b = a;// 表示给变量 a 起别名为 b /* &b : 取地址 1&2: 按位与 */ b++;// b = 67 a = 67 int& c = b;// c = 67 引用和指针的比较 引用必须初始化,指针可以不初始化 int& b; // 错误,必须初始化 int* p; // 野指针 引用不可以为空,指针可以为空 int& a = NULL; // 错...

C++ Primer 008 : 类型转换

本篇主要介绍C++ 中的类型转换。 类型转换分为隐式与显式两种情况,隐式指较小的数据类型转为较大的数据类型,编译器会自动进行操作,例如 int 转换为 long;显式则与隐式相反,因为可能造成数据丢失等情况因此必须在代码中写明才有效,所以也被称为强制类型转换。 char c = 'a'; int i = (int)c; // C 风格 int i = int(c); // C++ 风格 静态类型转换 目标类型 变量名 = static_cast<目标类型>(源类型变量); 在源类型和目标类型之间只要有一个方向可以做隐式类型转换,那么在两个方向上都可以使用静态...

C++ Primer 001 : 概述

在阅读本系列之前我假定你已经学习过 C 语言,因此我主要对 C++ 与 C 语言的不同之处做出介绍。如果你没有学习过 C 语言,你也可以参考我关于 C 语言的系列博客。希望这一系列能帮到有需要的朋友们。 从何而来 C++ 这门语言于 1983 年诞生,由本贾尼斯特劳斯特卢普在 C 语言的基础上改进和扩充而来,起初被命名为 C with classes,后收到 ++ 运算符启发改为 C++。 相关历史事件 1983 年,C++ 语言诞生 1985 年,CFront 1.0 诞生,第一个商用编译器 1987 年,GNU C++ 编译器(g++) 1990 年,Borland C++...

C++ Primer 002 : 命名空间

在 C++ 中,当程序中需要用同名的变量和函数时,使用命名空间来限定不同变量和函数所在的作用域。 格式 定义命名空间的格式是这样的: namespace 名称 { 变量、函数等 } 使用 使用命名空间指令的方式也很简单: using namespace 命名空间的名称; 例如: using namespace std; 当然,你可以通过作用域限定符 :: 来使用命名空间中制定内容: using 命名空间的名称::要使用的标识符; 例如: using std::cout; 或者: std::cout << "输出一条测试信息"; 无...

C++ Primer 003 : 结构体、联合、枚举

本篇主要介绍 C++ 中得结构体、联合与枚举。 结构体 C++ 中使用结构体类型定义变量时,struct 关键字可以省略,如: struct Person {}; struct Person p1; Person p2; C++ 中的结构中可以定义函数 struct Person { void show(){} }; 联合 C++ 中的联合在定义联合变量时可以省略关键字 union,并且支持匿名联合,也即省略 union 后面的类型名 枚举 C++ 中的枚举在定义枚举变量时可以省略关键字 enum,C++ 中的枚举类型是一种独立的数据类型,不能使用整型数据进行赋值。 例如我们...

C++ Primer 004 : bool 类型

本篇主要介绍C++ 中的 bool 类型。 bool类型 bool 类型用来表示逻辑值,它只有两个值: true1 与 false,我们可以通过函数 boolalpha 来将 bool 值显示为 true 或 false 字面值。 bool 类型可以定义变量,也可以定义指针,可以作为函数的参数,也可以作为函数的返回值。 回顾 C 语言中的知识,取值为 0、0.0、NULL 或 \0 均可以表示为假。...

C++ Primer 005 : 函数 (重载、缺省、哑元与内联)

本篇主要介绍C++ 中的函数重载、缺省参数、哑元与内联。 函数重载 概念 同一个作用域中,函数的名字相同,函数的参数列表不同,这样的函数构成重载。 方式 函数名相同,函数的参数类型不同 函数名相同,函数的参数个数不同 函数名相同,函数的参数顺序不同 const 修饰的常函数和非 const 修饰的函数也可以构成重载 特殊重载关系 使用不同范围的方式导入命名空间时,那么局部优先 当使用相同范围的方式导入命名空间时,那么如果不构成重载,则编译报错产生歧义 函数匹配原则 完全匹配 > 常量转换 > 升级转换 > 标准转换 > 自定义类型转换 &...

C++ Primer 006 : 动态内存

本篇主要介绍C++ 中的动态内存。 在 C 语言中我们可以使用 malloc、calloc、realloc、free 等进行动态内存操作,在 C++ 中,除了兼容 C 中的动态内存分配的方法之外,还提供了两个关键字 new 和 delete。 使用new/delete 来分配指定类型变量的内存: int* p = new int; //申请内存的时候进行初始化 int* p = new int(66); //释放内存空间 delete p; p = NULL; 申请指定类型数组大小的内存: int* p = new int[5]; //申请数组大小的内存并初始化(C++11标准) int*...

BSD : 异步 I/O

在 BSD 及其派生系统中,异步 I/O 是信号 SIGIO 与 SIGURG 的组合,其中 SIGIO 是通用异步 I/O 信号,SIGURG 则仅用来通知进程在网络连接上到达了带外的数据。 接收 SIGIO 信号需要执行三个步骤: 调用 signal 或 sigaction 为 SIGIO 信号简历信号处理程序 以 F_SETOWN 调用 fcntl 来设置进程 ID 和进程组 ID,它们将接收对于该描述符的信号 以 F_SETEL 调用 fcntl 来设置 O_ASYNC 文件状态标志,使在该描述符上可以进行异步 I/O,附表: fcntl 文件状态标志描述 O_RDO...

PIP Primer

本文主要介绍 PIP 的基本用法。 安装 方法一 sudo easy_install pip 方法二 移步 https://pypi.python.org/pypi/pip 下载安装。 方法三 移步 https://pip.pypa.io/en/stable/installing/ 下载 get-pip.py 文件。 这个文件也可以通过 curl -O https://bootstrap.pypa.io/get-pip.py 获取。 然后在本地目录执行: sudo python get-pip.py 你可以添加 --no-setuptools 选项禁止安装 setuptools; 或者...

MacPorts Primer

本文主要介绍 MacPorts 的基本用法。 安装 推荐你直接移步 官方网站 下载安装器。 另一种方法 否则,你也可以选择通过 wget 安装,个人觉得是比较不靠谱的方法: wget https://distfiles.macports.org/MacPorts/MacPorts-1.9.2.tar.gz 看到后面这个链接想必你也明白为什么这种方法不靠谱了。 下载完成后执行: tar zxvf MacPorts-1.9.2.tar.gz 进入解压后的目录: ./configure && make && sudo make install 还需要进一步配置...

Homebrew Primer

Homebrew 使 OS X 更完美。使用 gem 来安装 gems、用 brew 来搞定那些依赖包。本文主要介绍 Homebrew 的基本用法。 安装 官方建议的安装方式是通过执行: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 安装要求 Intel 处理器 Xcode 命令行工具,xcode-select --install、https://developer.apple.com/downloads B...

What's this?

The Night-City version of CaveOps inspired by Cyberpunk 2077. Not finished yet.

Pinned Message

The Founder and CEO of Infeca Technology.

Developer, Designer, Blogger.

Big fan of Apple, Love of colour.

Feel free to contact me.

反曲点科技创始人和首席执行官。

开发、设计与写作皆为所长。

热爱苹果、钟情色彩。

随时恭候 垂询