1. 简介
我们对传递数值或变量给函数都很熟悉,除了传递变量,我们还能传递类型给模板。传递类型就是大家所熟知的泛型编程,因为 我们可以用泛型编写程序,而用特定的类型调用。
泛型编程的目的是为了编写的程序不依赖于数据类型。在 C 语言中,所有的代码都需要绑定到确定的数据类型,这样写的代码只能对特定的数据类型起作用。 而模板可以让我们实现泛型编程。你可以将类型作为参数来构建模板函数和类模板。当你的算法需要作用于多种数据类型的时候,模板就显得及其有用了。
C++的标准模板库(STL)提供了一些常用的容器类模板的实现,例如vector
,可以用来存放所有类型的元素。
2. 示例:STL 中的 vector 类模板
C/C++中的内置数组有...
1. 继承
1.1 术语
超类(基类)和子类(派生类):在面向对象程序设计中,我们通常使用继承来避免代码冗余。在 C++中,继承的语法规则如下:
class SubclassName : inheritance-access-specifier SuperclassName {
......
};
子类继承了父类所有的成员,子类也可以定义自己的构造器和成员。
访问标识符:C++支持三种访问标识符:private
,public
和protected
。一个类的 public 成员变量、成员函数,可以通过类的成员函数、类的实例变量进行访问。
一个类的 protected 成员变量、成员函数,无法通过类的实例变量进行访问。但是可以通过类...
指针,引用和动态分配内存是 C/C++语言中最强大的特性,这些特性使得程序员能够直接操作计算机中非常珍贵的记忆体资源,进而对内存进行最大性能和高效的使用。 然而指针也是一把双刃剑,它也是 C/C++编程语言中最复杂和最难的特性。
指针之所以这么强大,是因为它允许你通过地址来访问和操作对应记忆体中存储的内容。但是指针也很难被驾驭,使用好的话确实能够大大提升性能,而用的 不好的话,也会导致很多问题,例如著名的内存泄漏和缓冲区溢出,这些 bug 会致使系统发生紊乱。一些新的编程语言(例如 Java 和 C#),将指针从它的语法 中去掉,通过提供自动内存管理的方式来避免使用指针导致的许多问题。
虽然你在编写 C/C++代码的时候可以不使用指...
1. 为什么要使用 OOP?
假如你想组装一台电脑,你会去硬件商店购买主板、处理器、内存条、硬盘、机箱、电源,然后将它们组装在一起,然后打开电源,电脑就能运行。 你不用考虑主板是 4 重板还是 6 重板,硬盘是什么尺寸,内存是哪里生产的诸如此类的问题。你只需要将这些硬件单元组合在一起,就能期待电脑能够运行。 当然,你需要保证你有正确的接口,比如,如果你的主板只支持 IDE 接口,而你需要购买一个 IDE 的硬盘而不是 SCSI 硬盘,又例如你需要选择一个合适速率的 内存。即便如此,将硬件组件组装成一台机器也没有任何难度。
同样的,一辆车也是由多个部分组装起来的,例如底盘、车门、引擎、车轮、刹车和传动装置。这些组件都是可复用的。比如...
原文地址http://nikic.github.io/2017/04/14/PHP-7-Virtual-machine.html
写这篇文章的目的是基于 php7,阐述 Zend Virtual Machine 的内部实现。这不是一篇综合描述,我将尽可能地覆盖到所有重要的部分和细节。
本文的描述对象是 php7.2 版本,但是几乎所有的特性都已经应用在了 php7.0/7.1 中了。然而,它们同 php5.x 系列 VM 的不同之处同样也很重要,我会很有耐心的同步描述。
这篇文章主要是从指令的角度来阐述,只有在末尾花了少量篇幅描述了 C 语言实现 VM 的细节。但是在文章开始之前,我想先提供一些实现 VM 的主要代码文件:...
原文地址http://blog.jpauli.tech/2017/01/12/threads-and-php.html
前言
PHP 和线程,单凭这简短的几个字,就足以写一本书。像往常一样,我们不会这么做,但是会给出一定程度上跟这个话题相关的信息与细节。让我们从一些人在谈论这个话题时通常感到的困惑开始,PHP 不是一种线程语言, PHP 的内核没有使用线程,而且 PHP 天生也不允许用户层代码通过任何方式使用多线程作为并发机制。
因此 PHP 跟其他一些技术有很大的区别,例如 Java。Java 不仅自身使用了大量的线程,它还允许用户通过编程来是用线程。然而,PHP 不适用线程是有它的原因的。
PHP 内核没有使用线程,主要是为了...