C++基础知识
文章平均质量分 66
herostarone
这个作者很懒,什么都没留下…
展开
-
char *p 与char p[]区别,strcpy_s
char *p = "abc";则abc存储在常量存储区,而p直接指向了这个常量存储区,所以不能改变abc的内容void test(char *p){ *p = 1;}是错误的,因为是常量存储区,不能改变。但是char p[]="abc";//相当于strcpy(p,“abc”),如果定义在全局,abc就在全局区,如果在局部,abc就在栈内。void test(c转载 2012-03-07 22:50:03 · 1273 阅读 · 0 评论 -
指针的强制转换
前面曾经讲过,如果指针变量指向的变量类型相同,两个指针变量可以互相赋值。如果指向的变量类型不同,可以先对指针进行类型强制转换。下面用一个具体的例子说明:main(){long num=0xAAAABBBB, *pl=# /*num初始化为16进制数AAAABBBB*/int *pn;printf("\npl=%lX",*pl); /*%lX:以16进制方式输出一个lon转载 2012-03-07 23:11:03 · 894 阅读 · 0 评论 -
栈区 堆区
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,原创 2012-03-07 23:11:48 · 554 阅读 · 0 评论 -
C++ 关于声明,定义,类的定义,头文件作用,防止头文件在同一个编译单元重复引用,不具名空间
1. 编译单元,一个.cc,或.cpp作为一个编译单元.生成.o2. 普通数据类型的定义,声明,函数的定义声明(类函数是一样的)extern int x; //变量是声明,并未实际分配地址,未产生实际目标代码 void print(); // 函数声明, 未产生实际目标代码 如int x; int x = 3 ; void print() {}转载 2012-03-07 23:12:50 · 967 阅读 · 1 评论 -
复制构造函数的总结
string a=“abc”;调用的是复制构造函数还是普通构造函数啊?c++primer上写的是copy-initialization,可是很多人交流都说是隐士调用了普通的构造函数。如果是调用复制构造函数的话,书上说是先用指定构造函数创建一个临时对象,按后用复制构造函数将那个临时对象复制到正在创建的对象,是不是就似乎先string temp(”abc“),然后再string a =te原创 2012-03-07 22:50:41 · 617 阅读 · 0 评论 -
Linux实用代码--文件系统操作
这篇文档实用性很强,它不是讲某个命令的参数具体含义,而是从实际工作的角度来考虑,完成什么工作需要什么指令。 文件系统操作是最基本的操作,没有文件系统,操作系统根本就运行不了。 下面是我们经常要做的一些事情。在下面具体参数意义不解释,要了解这些 可以查询该命令帮助文档 1. 创建目录 mkdir NO1. 在当前路径转载 2012-03-08 20:13:04 · 659 阅读 · 0 评论 -
deadline_timer
注意deadline_timer和socket一样,都用 io_service作为构造函数的参数。也即,在其上进行异步操作,都将导致和io_service所包含的iocp相关联。这同样意味着在析构 io_service之前,必须析构关联在这个io_service上的deadline_timer。一个deadline_timer只维护一个超时时间,一个deadline_timer不同时维持多个定转载 2012-06-01 23:02:23 · 5227 阅读 · 1 评论 -
boost::scoped_ptr
boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法:#include#include #include class implementation{publ转载 2012-06-01 23:06:00 · 1043 阅读 · 0 评论 -
C++迭代器失效
众所周知当使用一个容器的insert或者erase函数通过迭代器插入或删除元素"可能"会导致迭代器失效,因此很多建议都是让我们获取insert或者erase返回的迭代器,以便用重新获取新的有效的迭代器进行正确的操作:view plaincopy to clipboardprint?iter=vec.insert(iter); iter=vec.erase(iter);转载 2012-10-08 22:25:56 · 744 阅读 · 0 评论 -
字节对齐详解
一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数转载 2012-03-07 23:10:18 · 464 阅读 · 0 评论 -
typedef的四个用途和两个陷阱
用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // 可行,同时声明了两个指向字符变量转载 2012-03-07 23:08:11 · 480 阅读 · 0 评论 -
class里定义enum的用法
enum可以这样用:Status x = INVALID 然后你再把类加上去看看 枚举类型里面的值就是常量 class EventType { public: enum Type { INVALID, //Report ethernet network status REPORT_ETHERR = 0x11,原创 2012-03-07 22:51:20 · 3596 阅读 · 0 评论 -
赋值构造函数的教训
昨晚整了半天,返回一个string类型,我再用这个string里东西,是“192.168.2.22”,返回的时候一旦把string编程string.c_str(),再读这个指针就是乱码了。调了1个多小时还没有结果,终于在师兄的点拨下明白了,返回指针后对对象已经消失了,所以指针指向的内容是错误的。 如果返回的是对象,那么会调用拷贝构造函数创建一个临时对象,一旦出作用域,临时对象会销毁,并发生原创 2012-03-07 22:53:21 · 951 阅读 · 0 评论 -
引用容易犯的错误。
view plaincopy to clipboardprint?·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150class A转载 2012-03-07 23:01:40 · 605 阅读 · 0 评论 -
堆、栈及静态数据区详解(C++)
全局区(静态区)(static)--,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存转载 2012-03-07 23:03:34 · 856 阅读 · 0 评论 -
指针和数组名的区别 char *str 和 char str[]的不同之处
一个简单的字符串相关程序,运行时崩溃,罪魁祸首 char *str 和 char str[]的不同之处代码如下:view plaincopy to clipboardprint?#include using namespace std; void deletechar(char *str, ch转载 2012-03-07 23:04:56 · 1123 阅读 · 0 评论 -
不要声明布尔值作为类成员变量 “血”的教训
昨天,写好了一个类提交到VSS,代码评审未通过,原因是我声明了一个bool做为类的成员变量,一前辈大吃一惊,跑到我面前说,兴奋又痛苦的说,赶快把bool改成BOOL,这是我血的教训,我以前调了一天就是因为这个错误。“不能把bool声明为类的成员变量”。 为什么? 原因是字节对齐的问题,bool是占1个字节,BOOL是占4个字节,(typedef int BOOL). 在一般的情转载 2012-03-07 23:05:56 · 2473 阅读 · 1 评论 -
类的static成员变量和成员函数能被继承吗
1. 父类的static变量和函数在派生类中依然可用,但是受访问性控制(比如,父类的private域中的就不可访问),而且对static变量来说,派生类和父类中的static变量是共用空间的,这点在利用static变量进行引用计数的时候要特别注意。 2. static函数没有“虚函数”一说。因为static函数实际上是“加上了访问控制的全局函数”,全局函数哪来的什原创 2012-03-07 23:06:40 · 23937 阅读 · 1 评论 -
C语言中的函数声明
看了C陷阱与缺陷,第一个给我震撼的就是理解函数声明了,下面是我的理解。1.理解函数声明 为了模拟开机启动时的情形,我们必须设计出一个C语句,以显示调用位于地址0的子例程。调用语句如下: (*(void (*)())0)();胆颤了吧?首先我们从函数的声明说起:有如下一个函数 void func(){...}那么,要想声明一个函数指针,指向这类函数,怎样声明原创 2012-03-07 23:07:32 · 1503 阅读 · 0 评论 -
迭代器失效小结
迭代器(iterator)是一个可以对其执行类似指针的操作(如:解除引用(operator*())和递增(operator++()))的对象,我们可以将它理解成为一个指针。但它又不是我们所谓普通的指针,我们可以称之为广义指针,你可以通过sizeof(vector::iterator)来查看,所占内存并不是4个字节。 首先对于vector而言,添加和删除操作可能使容器的部分或者全部迭代器失转载 2012-10-08 22:16:37 · 735 阅读 · 0 评论