c/c++
AlwaysSLH
软件工程专业 本科 工作一年 嵌入式
展开
-
C++技术感想——多态类的虚复制函数
C++技术感想 ——多态类的虚复制函数 当我们在进行类对象的复制时,很可能会写下面的语句:T* pSomeObj = ...;T* pNewObj = new T(*pSomeObj); 对于非多态类我们可能放心的这样作,但对多态类呢?看这样一个场景,T是一个派生层次中的基类,而pSomeObj指向的是T的一个派生类对象,这样的复制显然无法达到我们的预期目的。此时我们可原创 2008-05-21 23:23:00 · 993 阅读 · 0 评论 -
C++中的内存划分
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系转载 2008-01-30 22:20:00 · 798 阅读 · 1 评论 -
编程技术感想——一个用模板实现的assert
今天看到了Andrei Alexandrescu设计的一个用模板实现的类CTAssert template,作用和assert宏类似,但施行于“可在编译期间被核定(evaluated)”的条件句中。以下别是CTAssert template: templatebool> struct CTAssert;template struct CTAsserttrue> ..原创 2008-04-09 22:30:00 · 1171 阅读 · 0 评论 -
C/C++中的内存对齐
[Intel Architecture 32 Manual] 字,双字,和四字在自然边界上不需要在内存中对齐。(对字,双字,和四字来说,自然边界分别是偶数地址,可以被4整除的地址,和可以被8整除的地址。) 无论如何,为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。转载 2008-11-05 23:04:00 · 729 阅读 · 2 评论 -
C++技术感想 -- 禁止类的复制构造函数和赋值操作符的使用
有些类是不希望产生被复制或赋值的(甚至坚决拒绝),但若不为类定义复制构造函数和复制操作符时系统将自动按值复制或赋值,因此简单的不去定义这两个函数无法起到禁止的作用。现总结方法如下:1,在类无友元的情况下,将复制构造函数和赋值操作符声明为private。2,只提供成员的生命而不提供定义。这样当程序中出现 复制或赋值现象时,会造成链接错误。原创 2008-03-12 23:11:00 · 1538 阅读 · 0 评论 -
C++技术感想——多态赋值
今天突然想到一个问题:C++中多态该如何完成赋值呢?形如以下的情况:class Base{public: Base() : a(0){} Base(int n) : a(n){} ~Base(){} //使用缺省的operator = //...private: int a;};class Derived : public Base{public: Derived() : Base()原创 2008-07-24 23:32:00 · 919 阅读 · 0 评论 -
C++点滴——const/volatile不能用来修饰没有this指针的成员函数
前几天在论坛闲逛,看到这样一个静态成员函数声明: static int XX::count() const; 当时还真没看出什么问题(因为这个函数确实没有改变数据成员的值,一切似乎都正常),后来看到有人说static成员函数不能用const和volatile修饰,突然感觉这句话好熟悉,却怎么都想不起为什么了。后来查了下书,恍然大悟,特发此篇。原创 2008-04-02 23:04:00 · 2208 阅读 · 0 评论 -
CSDN C/C++电子杂志第一期 之 可变参数学习笔记
前言:本文在很大程度上改编自网友kevintz的“C语言中可变参数的用法”一文,在行文之前先向这位前辈表示真诚的敬意和感谢。一、什么是可变参数我们在C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变转载 2008-11-05 23:03:00 · 838 阅读 · 0 评论 -
c/c++ c++ file c++/stl/boost 判断文件目录是否存在
1.C++很简单的一种办法:#include iostream>#include fstream>using namespace std;#define FILENAME "stat.dat"int main(){ fstream _file; _file.open(FILENAME,ios::in); if(!_file) { cout转载 2008-12-21 10:56:00 · 9914 阅读 · 3 评论 -
可变参数模拟C++中缺省参数及重载
前几天在论坛C++版块里看到一个帖子,求教一个让函数参数缺省为同一参数表里的其他参数的方法。『其连接为:http://topic.csdn.net/u/20081101/13/743fffff-5f5d-4077-91e1-3465748372d5.html』 大体解决方案有二: 1)在函数体中进行参数特征的判断。该方法的缺点在于很难找到一个合适的判断条件,假如用户的输入正好符原创 2008-11-06 12:25:00 · 1364 阅读 · 0 评论 -
volatile编写多线程程序的好帮手
并不是我故意想弄糟你的心情,但是在这期专栏里,我们将讨论多线程编程这一话题。正如上一期Generic里所说的,编写异常安全(exception-safe)的程序是非常困难的,但是和编写多线程程序比起来,那简直就是儿戏。 多线程的程序是出了名的难编写、难验证、难调试、难维护,这通常是件苦差事。不正确的多线程程序可能可以运行很多年也不出一点错,直到满足某些临界的条件时,才出现意想不到的奇转载 2009-02-10 14:14:00 · 960 阅读 · 0 评论 -
C/C++中随机数的生成函数和播种子的函数
随机数生成函数:int rand( void );播种子函数: void srand( unsigned int seed ); 例: void main( void ) { int i; /*根据时钟每次产生不同的种子*/ srand( ( unsigned )time( NULL ) ); /*原创 2008-03-19 22:52:00 · 1752 阅读 · 1 评论 -
Effective STL: Item 44:优先使用与泛型算法同名的成员函数
item 44:优先使用与泛型算法同名的成员函数一些容器拥有和stl泛型算法同名的成员函数。关联容器提供count()、find()、lower_bound()、upper_bound(),和equal_range(),而list提供了remove()、remove_if()、unique()、sort()、merge(),和reverse()。这样做有两个理由。首先,成员函数更快。其次,它们转载 2007-10-30 11:23:00 · 1010 阅读 · 0 评论