随笔分类 -  C++

上一页 1 2 3 4 5 6 7 8 ··· 12 下一页
摘要:最简单的知识有时间记忆回忆起来却最难. 1.类型转换会生成临时变量 (const std::vector<ACE_INT32>)类型转换将导致生成新的临时变量. 所以先做类型转换,再取其地址或其内部属性地址时危险的. 1.1.signed、unsigned 分别指的是signed int和unsig 阅读全文
posted @ 2012-06-17 23:27 dzqabc 阅读(772) 评论(0) 推荐(0)
摘要:静态全局变量就是在main函数调用之前调用的.静态局部变量则在第一次使用之前调用的. 静态变量的初始化是在首次执行到初始化语句时间执行的,编译时在初始化语句之前放置一个标志位,每次进行判断,倘若需要初始化则执行初始化操作,否则不执行. 阅读全文
posted @ 2012-06-04 22:22 dzqabc 阅读(1610) 评论(0) 推荐(0)
摘要:C++为类中提供类成员的初始化列表类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员2.进入构造函数后在构造函数中执行一般计算 1.类里面的任何成员变量在定义时是不能初始化的。 2.一般的数据成员可以在构造函数中初始化。 3.const数据成员必须在构造函数的初始化列表中初始化。 4.static要在类的定义外面初始化。 5.数组成员是不能在初始化列表里初始化的。 6.不能给数组指定明显的初始化。 这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。这个事情似乎说不过去啊?没有办法,就只好转而求助于静态数据成员。到此,我的问题解决。. 阅读全文
posted @ 2012-05-27 00:37 dzqabc 阅读(482) 评论(0) 推荐(0)
摘要:为什么要有TLS?原因在于,进程中的全局变量与函数内定义的静态(static)变 量,是各个线程都可以访问的共享变量。在一个线程修改的内存内容,对所有线程都生效。这是一个优点也是一个缺点。说它是优点,线程的数据交换变得非常快 捷。说它是缺点,一个线程死掉了,其它线程也性命不保; 多个线程访问共享数据,需要昂贵的同步开销,也容易造成同步相关的BUG。 如果需要在一个线程内部的各个函数调用都能访问、但其它线程不能访问的变量(被称为static memory local to a thread 线程局部静态变量),就需要新的机制来实现。这就是TLS。 线程局部存储在不同的平台有不同的实现,可移植.. 阅读全文
posted @ 2012-05-13 22:41 dzqabc 阅读(1619) 评论(0) 推荐(0)
摘要:1. 相关函数 #include <pthread.h> pthread_cond_t cond = PTHREAD_COND_INITIALIZER; int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr); int pthread_cond_signal(pthread_cond_t *cond); int pthread_cond_broadcast(pthread_cond_t *cond); int pthread_cond_wait(pthread_cond_t *cond, 阅读全文
posted @ 2012-05-13 22:27 dzqabc 阅读(424) 评论(0) 推荐(0)
摘要:声明时关键字 static extern virtual定义时关键字列表 inline 阅读全文
posted @ 2012-02-21 22:47 dzqabc 阅读(219) 评论(0) 推荐(0)
摘要:1、map insert 用于Map 拷贝的正确方式(end()不需要--) map a map b b.insert(a.begin(), a.end()) 其中倘若出现键值重复的数值,则仅插入不重复的. map insert 插入另一个map时 的效率 看了一下VC中内部实现,也只是取出两个迭代器中间值每个执行insert,所以也没有什么效率优化处理2、map中数据插入删除导致map中数据乱掉 可能是自己定义的key类型中的<操作符重载错误,map中的红黑树要求通过<比较操作可以唯一确定一组key的顺序而不受key传入(即insert)顺序影响。因为Map在查找操作中要求该顺序 阅读全文
posted @ 2012-02-21 22:45 dzqabc 阅读(280) 评论(0) 推荐(0)
摘要:赋值函数需要返回当前被赋值对象的引用(非常量引用)void test(){ int h; int & g = (h = 1);}上面操作并未告警,所以.... 阅读全文
posted @ 2012-02-21 22:37 dzqabc 阅读(388) 评论(0) 推荐(0)
摘要:错误信息禁止 源码中 ·隐藏某类错误 /*lint -e725 */ -e(#) ·隐藏下一表达式中的某类错误 /*lint –e(534) */ printf(“it’s all”); !e# ·隐藏本行中的错误 /*lint !e534*/ printf(“it’s all”); -esym(#, Symbol) ·隐藏有关某符号的错误 /*lint –esym(534, printf)*/ printf(“it’s all”); -elib(#) ·隐藏头文件中的某类错误 /*lint –elib(129) */ #include “r0 阅读全文
posted @ 2012-02-18 22:46 dzqabc 阅读(1127) 评论(0) 推荐(0)
摘要:1.微软针对这个问题发布了一个补丁包。下载地址 2.下载之后是一个源码包,解压,编译,生成一个FileTool.dll。 3.将生成的dll拷贝到VC安装目录的“\Common\MSDev98\AddIns\”文件夹下。 4.在AddIns目录下执行命令“regsvr32 File Tool.dll”手动注册dll文件。 5.运行VC6,右击工具栏,选择“自定义…>附加项和宏文件”,选择F... 阅读全文
posted @ 2012-02-16 22:33 dzqabc 阅读(428) 评论(0) 推荐(0)
摘要:数组定义时长度可以使用变量不是很清楚了,自己写的是可以的,可能新版本编译器已经支持函数调用时动态分配数组空间了吧,使用g++是编译成功了。 动态长度的栈区数组是C99的特性。在C99之前,在栈区分配动态大小的内存块是使用alloca函数,不过由于不在堆中,分配出来的内存不需要释放滴int len;c 阅读全文
posted @ 2012-02-12 22:27 dzqabc 阅读(4042) 评论(0) 推荐(0)
摘要:概述 C语言的内存模型基本上对应了现在von Neumann(冯·诺伊曼)计算机的实际存储模型,很好的达到了对机器的映射,这是C/C++适合做底层开发的主要原因,另外,C语言适合做底层开发还有另外一个原因,那就是C语言对底层操作做了很多的的支持,提供了很多比较底层的功能。 下面结合问题分别进行阐述。 阅读全文
posted @ 2012-02-04 23:20 dzqabc 阅读(1493) 评论(0) 推荐(0)
摘要:__attribute__是GNU C提供的一种机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。 __attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数。 __... 阅读全文
posted @ 2012-01-14 15:42 dzqabc 阅读(492) 评论(0) 推荐(0)
摘要:众所周知,程序为了提高访问效率,编译器在编译的时候,进行字节对齐。程序员也可以字节指定对齐方式。 Win32下的为progma指令,具体来说 #pragma pack(push) //保存原对齐状态#pragma pack(4)//设定为4字节对齐struct test{ int a;};#pragma pack(pop)//恢复对齐状态在linux下,gcc是默认的编译器。g++ 支持pro... 阅读全文
posted @ 2012-01-14 15:23 dzqabc 阅读(1393) 评论(0) 推荐(0)
摘要:BOOL 定义 typedef int BOOL; #define FALSE 0 #define TRUE 1 不能完全重载(BOOL的本质就是int),如: //file.h void f(int ); // ok void f(BOOL); // ok // file.cpp void f(int) {/*….*/} // ok void f(BOOL) {/*….*/} // 错误,重新声明bool(false,true)是C++内置的类型,可以避免上述的问题。bool在C++里是占用1字节,而BOOL是int类型,int类型的大小是视具体环境而定的;所以来说:false/true只占 阅读全文
posted @ 2012-01-14 14:25 dzqabc 阅读(3276) 评论(0) 推荐(0)
摘要:Shell中设置 bash中 export TZ="Europe/Moscow" date -u -s "2011-10-29 21:55:00" cshell中 setenv TZ Europe/Moscow程序中设置(同样也是设置环境变量的方式) linux程序中修改时区并立即生效. setenv("TZ","Europe/Moscow",1); tzset(); 只是发现其他程序执行不会受该设置影响了.也就是该设置实际上是的环境变量只是对程序自身生效的,而ACE则直接将该选项封装为ACE_Process_Op 阅读全文
posted @ 2012-01-09 23:44 dzqabc 阅读(4892) 评论(0) 推荐(0)
摘要:C里操作字符串很高效,但也很麻烦。 1. char * strcpy ( char * destination, const char * source ); 最常用的函数,但是却不安全,原因在于,一是要destination有足够的空间,二是要保证source和destination指向的空间没有overlap。 2. int sprintf ( char * str, const cha... 阅读全文
posted @ 2012-01-09 23:27 dzqabc 阅读(9628) 评论(0) 推荐(1)
摘要:迭代器失效 vector: 1.当插入(push_back)一个元素后,end操作返回的迭代器肯定失效。 2.当插入(push_back)一个元素后,capacity返回值与没有插入元素之前相比有改变,则需要重新加载整个容器,此时first和end操作返回的迭代器都会失效。 3.当进行删除操作(er 阅读全文
posted @ 2011-12-18 23:45 dzqabc 阅读(308) 评论(0) 推荐(0)
摘要:序列性容器::(vector) erase迭代器不仅使所有指向被删元素的迭代器失效,而且使被删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方式,但是erase的返回值为下一个有效的迭代器,所以 正确方法为:: for( iter = c.begin(); iter != c.end(); ) iter = c.eras... 阅读全文
posted @ 2011-12-18 22:41 dzqabc 阅读(711) 评论(0) 推荐(0)
摘要:很多人不是很明白GCC与G++的区别 gcc和g++都是GNU(组织)的一个编译器。 误区一:gcc只能编译c代码,g++只能编译c++代码 两者都可以,但是请注意: 1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的,例如: #include ... 阅读全文
posted @ 2011-12-15 22:06 dzqabc 阅读(431) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 7 8 ··· 12 下一页