摘要:
【1】引入外部模板为了解决什么问题? “外部模板”是C++11中一个关于模板性能上的改进。实际上,“外部”(extern)这个概念早在C的时候已经就有了。 常见的情况,在一个文件a.c中定义了一个变量int i,而在另外一个文件b.c中想使用它,这个时候就会在没有定义变量i的b.c文件中做一个外部变 阅读全文
摘要:
类模板:通用的类描述(使用泛型来定义类),进行实例化时,其中的泛型再用具体的类型替换。 函数模板:通用的函数描述(使用泛型来定义函数),进行实例化时,其中的泛型再用具体的类型替换。 【1】C++98标准中两者的区别 函数模板和类模板在C++98标准中一起被引入,两者区别主要在于: 在类模板声明时,标 阅读全文
摘要:
严正声明:如果没有搞明白重载、覆盖、隐藏等基础概念,请先参见随笔《重载 覆盖 隐藏》 【1】为什么要引入final关键字? 在通常情况下,一旦在基类A中的成员函数fun被声明为virtual的,那么对于其派生类B而言,fun总是能够被重写的。 有的时候我们并不想fun在派生类B中被重写,那么,C++ 阅读全文
摘要:
【1】C++98的friend 参见很久以前的随笔《友元》 【2】C++11扩展的friend 直接用代码说明,示例如下: 1 class Poly; 2 typedef Poly P; 3 4 class LiLei 5 { 6 friend class Poly; // C++98通过, C++ 阅读全文
摘要:
【1】非静态成员变量的sizeof 从C语言被发明开始,sizeof就是一个运算符,也是C语言中除了加减乘除以外为数不多的特殊运算符之一。 而在C++引入类(class)类型之后,sizeof的定义也随之进行了拓展。 不过在C++98标准中,对非静态成员变量使用sizeof是不能够通过编译的。 如下 阅读全文
摘要:
【1】“就地”声明 C++98中,支持在类声明的时候使用等号"="初始化类中静态成员变量,这种声明方式我们称之为“就地”声明。 但是,C++98要求静态成员必须满足常量性,而且类型必须是整型或者枚举型,而非静态成员变量的初始化则必须在构造函数中进行。 如下示例: 如上各种情况均无法通过编译。 【2】 阅读全文
摘要:
noexcept修饰符与noexcept操作符 首先,明确一点: 在C++11之后,表示函数不会抛出异常的动态异常声明throw()被新的noexcept异常声明所取代。 在通常情况下,在C++11中使用noexcept可以有效的阻止异常的传播与扩散。 【1】noexcept修饰符 从语法上讲,no 阅读全文
摘要:
【1】assert 与 #error 我们知道,C++现有的标准中就有assert、#error两个方法是用来检查错误的,除此而外还有一些第三方的静态断言实现。 assert是运行期断言,它用来发现运行期间的错误,不能提前到编译期发现错误,也不具有强制性,也谈不上改善编译信息的可读性。 既然是运行期 阅读全文
摘要:
【1】__cplusplus 在C与C++混合编写的代码中,常常会在头文件中看到如下形式的声明: 这种类型的头文件可以被#include到C文件中进行编译,也可以被#include到C++文件中进行编译。 关键点:由于extern"C"可以抑制C++对函数名、变量名等符号(symbol)进行名称重整 阅读全文
摘要:
【1】变长参数的宏定义以及__VA_ARGS__ 在C99标准中,我们就已经可以使用变长参数的宏定义。 变长参数的宏定义是个神马?就是在宏定义的参数列表中最后一个参数为省略号。 而现在C++ 11中,使用预定义宏__VA_ARGS__可以在宏定义的实现部分替换省略号所代表的字符串。 原书示例: 定义 阅读全文
摘要:
【1】__func__预定义标识符 很多现代的编译器都支持C99标准中的__func__预定义标识符功能,其基本功能就是返回所在函数的名字。 常见的用法,看下面这个例子: 上例中,定义了两个函数hello和world。利用__func__预定义标识符,我们返回了函数的名字,并将其打印出来。 事实上, 阅读全文
摘要:
【1】__pragma 与 #pragma 的区别 在C/C++标准中,#pragma是一条预处理的指令(preprocessor directive)。 简单地说,#pragma是用来向编译器传达语言标准以外的一些信息。 举个常见的例子,如果我们在代码的头文件中定义了以下语句: #pragma o 阅读全文
摘要:
Cmder用来执行命令行程序,替代Windows系统默认的cmd。 具体开发过程中可能会频繁使用命令行,建议安装并注册到右键菜单。 【1】下载 官网下载《Cmder》 便携包,解压缩,即可使用。 【2】右键添加 (1)管理员权限执行命令:Cmder.exe /REGISTER ALL 如下图: 注意 阅读全文
摘要:
【1】CMake基础 CMake是一种跨平台编译工具 CMake主要是编写CMakeLists.txt文件 通过cmake命令将CMakeLists.txt文件转化为make所需的Makefile文件 再用make命令编译源代码生成可执行程序或库文件 【2】示例工程 (1)项目结构 build目录 阅读全文
摘要:
【1】问题现象 cmake发生异常:如下图所示 【2】问题分析 Centos6 上使用Cmake出现错误 "No CMAKE_CXX_COMPILER could be found." 导致错误原因:cmake找不到对应的编译器!!! 【3】解决方案 sudo yum install gcc-c++ 阅读全文
摘要:
C++ Primer Plus (六) 1 预备知识 2 开始学习C++ 3 处理数据 3.1 简单变量 3.1 limits.cpp 3.2 exceed.cpp 3.2 const限定符 3.3 浮点数 3.4 C++ 算术运算符 3.5 总结 3.6 复习题 3.7 编程练习 4 复合类型 5 阅读全文
摘要:
【1】C++数据类型 为了不再重复造轮子,特别推荐菜鸟教程《C++数据类型》 补充: C++11新增数据类型:long long、unsigned long long和char16_t(16位字符编码)、char32_t(32位字符编码)。 Good Good Study, Day Day Up. 阅读全文
摘要:
【1】main函数 【2】main() 经典的C风格函数头,如下: 在C语言中,省略返回类型相当于说函数的类型为int。 但是,需要明确,C++逐步淘汰了这种用法。 另外,在C语言中,让括号空着意味着对是否接受参数保持沉默。 【3】int main() 和 int main(void) 在C++中, 阅读全文
摘要:
(1)技术能力 技术能力,无疑肯定是最重要的。不会写代码的架构不是专业架构,技术能力弱的架构师不是一个好架构师。 所以,需要知道所有主流技术的基本原理、应用场景,及快速解决问题的能力。 所以,架构师必须要有见识,所需知识面肯定是要不断拓展的。 你需要清楚在什么样的场景用什么样的技术比较合适,并知道可 阅读全文
摘要:
背景:13年初(2013-3)选购的本,目前(2019-12)使用发现卡得厉害,原装内存只有4G,遂寻思扩充内存。 【1】准备工具 待准备工具明细: (1)螺丝刀 主要为了卸后盖的螺丝(一般买内存条时,备注一下,商家都会赠送一支)。 (2)内存条 待增加的内存条,如下图: 说明一点:不是所有的笔记本 阅读全文