Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

在C++中通过模板规避潜在错误

在C++中通过模板规避潜在错误

注:本文节选自我正在创作的第二本书《C++跨平台与框架开发》,其中一些措词并未就博文进行调整,阅读时请注意。模板(template)为C++带来了泛型编程的能力,但也带来了使用难度。大体上,使用模板的三大动机分别是提高复用性、去除强制转换和规避潜在错误。在此让我们看一看规避错误的一个例子。假设我们有图 1所示的被简化了的定时器管理模块程序。从构造函数来看,它的三个参数分别指明了定时器的延时时间、回调函数和回调函数的参数,其中的回调函数是通过timer_ca...
数据结构之栈的应用----迷宫求解

数据结构之栈的应用----迷宫求解

/***********程序设计思想*************/(1)迷宫地图相关:利用动态二维数组来初步勾勒出迷宫:建议先用malloc申请一维数组,再用calloc申请每个元素中的一维数组,因为我用的是1来表示迷宫的通路,0表示死路,calloc申请完后就会自动初始化为0迷宫交岔路结点:我们要有一个扫描通路的函数,对一个坐标进行东南西北的扫描,当遇到交岔路的坐标时,需要将所有的通路存入一个数组,扫描从东开始,至北结束,逆时针方向这里设计的是单通道迷宫,...
数据结构之栈的应用----C程序的括号配对检查

数据结构之栈的应用----C程序的括号配对检查

已经对栈的应用有了一定的了解了,并且感觉到数据结构实在是很强大,它几乎可以解决我们生活中的大部分问题。关于栈的基本常识,这里不做过多的解释,总之,其核心就是先进后出(FILO)联想到这种模式我们就可以很容易的知道,栈可以有如下几种应用:1、进制之间的转换2、C程序的括号配对检查3、迷宫求解问题4、算术表达式求值5、递归函数......这里,我将以一个括号配对检查的程序为例,讲述栈的应用。。。(之一)起初看到这个题目是在K&R的书上看见的,当时看这个...
嵌入式C语言学习笔记

嵌入式C语言学习笔记

一、static关键字static,修饰变量时:1、限制该变量的作用域:比如静态全局变量,只能在该模块中使用(本c文件中)。2、决定该变量的存储位置:修饰为静态的变量,存储在静态数据区(非堆栈内)。(同比,全局变量也都存放在静态数据区中。)带初值和不带初值的静态变量:(以TI DSP 54XX为例)a.不带初值的静态变量,存储在.bss段中。b.带初值的静态变量,存储在.bss段中,但其初值存储在.init中。在DSP Booter完成加载初始化后已经将i...
C++中内联函数inline的另一作用

C++中内联函数inline的另一作用

内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。今天在coding时遇到多次定义一个函数而使ld返回错误的情况。大致过程如下:首先,在一个头文件中定义了一个类及其实现:test.h:#ifndefTEST_H #defineTEST_H classA{ public: voidfun(); }; voidA::fun(){ } #endif 然后分别有两个文件:a.cpp:#include"test.h" voidtt()...
C++中的const

C++中的const

声明对象时可以用const进行修饰,称为常对象。常对象的数据成员值在对象的整个生存期间内不能被改变。常对象必须进行初始化,而且不能更新。还可以用const修饰类成员,如下:1.常成员函数使用const关键字修饰的函数为常成员函数,常成员函数声明的格式为:类型说明符 函数名(参数表) const ;const是函数类型的一个组成部分,因此在函数的定义部分也要带const关键字。如果将一个对象说明为常对象,则通过该对象只能调用它的常成员函数,而不能调用其他成员...
C++继承:同名隐藏、覆盖,虚函数

C++继承:同名隐藏、覆盖,虚函数

不同作用域声明的标识符的可见性原则:如果存在两个或多个具有包含关系的作用域,外层声明了一个标识符,而内层没有再次声明同名标识符,那么外层标识符在内层依然可见,如果在内层声明了同名标识符,则外层标识符在内层不可见,这时称内层标识符隐藏了外层同名标识符,这种现象称为隐藏规则。在类的派生层次结构中,基类的成员和派生类新增的成员都具有类作用域。二者的作用范围不同,是相互包含的两个层,派生类在内层。这时,如果派生类声明了一个和某个基类成员同名的新成员,派生的新成员就...
C++中内联函数inline的另一作用

C++中内联函数inline的另一作用

内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。 今天在coding时遇到多次定义一个函数而使ld返回错误的情况。大致过程如下: 首先,在一个头文件中定义了一个类及其实现: test.h:#ifndefTEST_H #defineTEST_H classA{ public: voidfun(); }; voidA::fun(){ } #endif 然后分别有两个文件:a.cpp:#include"test.h" vo...
Java内存分配全面浅析

Java内存分配全面浅析

本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java。这类文章网上有很多,但大多比较零碎。本文从认知过程角度出发,将带给读者一个系统的介绍。进入正题前首先要知道的是Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可见JVM的重要性。所以在学习Java内存分配原理的时候一定要牢记这一切都是在JVM中进行的,...
Linux/Unix中的可重入函数与线程安全函数

Linux/Unix中的可重入函数与线程安全函数

可重入函数也就是异步信号安全函数,一般是除了使用自己栈上的变量以外不依赖于任何环境的purecode(纯代码)(使用锁是无法解决可重入问题的,因为当出现信号中断的,中断函数里再次调用此函数就会出现死锁!)而线程安全函数,如果使用了静态数据或者全局数据的话,可以用锁来将其变为线程安全的。(但无论怎么样都无法变为可重入函数(或称异步信号安全函数))可重入函数一定是线程安全函数。反之,则不正确。linux/unix中的异步信号函数(可用在中断函数中的函数)摘自《...
<< 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 >>