qintangtao

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

随笔分类 -  C++

1 2 下一页

摘要:点击Abort之后,查看调用栈,发现异常在函数return时被时产生,进一步看是vector的析构函数被调用时产生,以前没开发过C++项目,没什么经验,这个错误让我很困惑,第一,我电脑上并没有f盘;第二,我并没有调用析构函数;第三,这到底是个什么错误。第一个问题,大概是一个虚拟的分区吧,第二个问题,... 阅读全文
posted @ 2015-09-09 16:14 qintangtao 阅读(851) 评论(0) 推荐(0)

摘要:C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:#includeusing namespace std;static int n; //定义静态全局变量void fn(){ n++; coutusing namespace std;void fn();static int n; //定义静态全局变... 阅读全文
posted @ 2013-08-27 20:23 qintangtao 阅读(5391) 评论(1) 推荐(2)

摘要:宏中"#"和"##"的用法一、一般用法我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.用法:#include<cstdio>#include<climits>using namespace std;#define STR(s) #s#define CONS(a,b) int(a##e##b)int main(){ printf(STR(vck)); // 输出字符串"vck" printf("%d/n", CONS(2,3)); // 2e3 输出:2000 return 0 阅读全文
posted @ 2013-06-14 14:52 qintangtao 阅读(371) 评论(0) 推荐(0)

摘要:按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello”);但是有的时候可能会不需要这种隐式转换,如下:class String { String ( int n ); //本意是预先分配n个字节给字符串String ( const char* p ); // 用C风格的字符串p作为... 阅读全文
posted @ 2013-04-02 16:21 qintangtao 阅读(227) 评论(0) 推荐(0)

摘要:一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论。做个备份,以免丢失。C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。请看下面的程序。#include <iostream>;using namespace std; class T {public: T() { cout << " 阅读全文
posted @ 2013-03-06 11:24 qintangtao 阅读(415) 评论(1) 推荐(0)

摘要:关于内存对齐一:1.什么是内存对齐假设我们同时声明两个变量:char a;short b;用&(取地址符号)观察变量a,b的地址的话,我们会发现(以16位CPU为例):如果a的地址是0x0000,那么b的地址将会是0x0002或者是0x0004。那么就出现这样一个问题:0x0001这个地址没有被使用,那它干什么去了?答案就是它确实没被使用。因为CPU每次都是从以2字节(16位CPU)或是4字节(32位CPU)的整数倍的内存地址中读进数据的。如果变量b的地址是0x0001的话,那么CPU就需要先从0x0000中读取一个short,取它的高8位放入b的低8位,然后再从0x0002中读取下一 阅读全文
posted @ 2013-03-06 11:14 qintangtao 阅读(25911) 评论(4) 推荐(2)

摘要:导读:从本篇文章开始,将全面阐述__try,__except,__finally,__leave异常模型机制,它也即是Windows系列操作系统平台上提供的SEH模型。主人公阿愚将在这里与大家分享SEH( 结构化异常处理)的学习过程和经验总结。 深入理解请参阅<<windows 核心编程>>第23, 24章.SEH实际包含两个主要功能:结束处理(termination handling)和异常处理(exception handling)每当你建立一个try块,它必须跟随一个finally块或一个except块。一个try 块之后不能既有finally块又有except块 阅读全文
posted @ 2013-02-21 11:14 qintangtao 阅读(3390) 评论(1) 推荐(1)

摘要:在win7和 win 2008 的64位 机器上取注册表键值时,发现键值存在,在调用RegQueryValueEx的时候总是查询失败,返回了2,一直以为是权限的问题,将其提升到debug还是不行,网络上也有朋友说创建.mainfest的文件提升权限,后面在MSDN网上也找到相关说明。不过还是失败。把这个程序放到xp下和win7 32下均能正常得到读取出来的值.于是就想会不会是64位OS的问题呢?最后还是在微软最新MSDN在线找到了答案。原来是在64位OS下操作注册表必须注意设置一个值。首先在文件头定义:#define KEY_WOW64_64KEY 256 // 兼容64位主机然后将RegOp 阅读全文
posted @ 2013-01-07 12:28 qintangtao 阅读(947) 评论(0) 推荐(0)

摘要:1.前言:时常在cpp的代码之中看到这样的代码:#ifdef __cplusplusextern "C" {#endif//一段代码#ifdef __cplusplus}#endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C"{和}处理其中的代码。 要明白为何使用extern "C",还得从cpp中对函数的重载处理开始说起。在c++中,为了支持重载机制,在编译生成的汇编码 阅读全文
posted @ 2013-01-07 10:31 qintangtao 阅读(951) 评论(0) 推荐(0)

摘要:#error命令是C/C++语言的预处理命令之一,当预处理器预处理到#error命令时将停止编译并输出用户自定义的错误消息。 语法: #error [用户自定义的错误消息] 注:上述语法成份中的方括号“[]”代表用户自定义的错误消息可以省略不写。 举例1: #error Sorry,an error has occurred! 举例2: #error 用法示例: /* *检查编译此源文件的编译器是不是C++编译器 *如果使用的是C语言编译器则执行#error命令 *如果使用的是 C++ 编译器则跳过#error命令 */ #ifndef __cplusplus #... 阅读全文
posted @ 2012-12-27 10:54 qintangtao 阅读(216) 评论(0) 推荐(0)

摘要:概述 这是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。 #pragma once是编译器相关的,就是说即使这个编译系统上有效,但在其他编译系统也不一定可以,不过现在基本上已经是每个编译器都有这个杂注了。 #ifndef,#define,#endif是C/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式具体写法 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句 ... 阅读全文
posted @ 2012-12-27 10:50 qintangtao 阅读(238) 评论(0) 推荐(0)

摘要:注册表简介:注册表是Windows程序员建造的一个复杂的信息数据库,它是多层次式的。在不同系统上注册表的基本结构相同。其中的复杂数据会在不同方式上结合,从而产生出一个绝对唯一的注册表。注册表结构:注册表由键(或称“项”)、子键(子项)和值项构成。一个键就是分支中的一个文件夹,而子键就是这个文件夹中的子文件夹,子键同样是一个键。一个值项则是一个键的当前定义,由名称、数据类型以及分配的值组成。一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。注册表中的数据类型:显示类型(在编辑器中) 数据类型 说明REG_SZ 字符串 文本字符串REG_MULTI_SZ. 阅读全文
posted @ 2012-12-26 12:11 qintangtao 阅读(528) 评论(0) 推荐(0)

摘要:int 转 CString:CString.Format("%d",int);...............................string 转 CStringCString.format("%s", string.c_str());用c_str()确实比data()要好........................................char* 转 CStringCString.format("%s", char*);CString strtest;char * charpoint;charpoint=&q 阅读全文
posted @ 2012-12-21 13:51 qintangtao 阅读(293) 评论(0) 推荐(0)

摘要:Unicode下CString与char*转换在VisualC++.NET2005中,默认的字符集形式是Unicode,但在VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-ByteCharacterSet),这样导致在VC6.0中非常简单实用的各类字符操作和函数在VS2005环境下运行时会报各种各样的错误,这里总结了在VisualC++.NET2005环境中Unicode字符集下CString和char*之间相互转换的几种方法,其实也就是Unicode字符集与MBCS字符集转换。(1)、Unicode下CString转换为char*方法一:使用API:WideChar 阅读全文
posted @ 2012-12-21 13:27 qintangtao 阅读(628) 评论(0) 推荐(0)

摘要:C++注册表编程1.基础知识注册表的组织方式跟文件目录比较相似,主要分为根键、子键和键值项三部分,与文件目录对应的话就是根目录、子目录和文件。分别介绍一下这三部分:(1)根键。分为5个,分别为 HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS和HKEY_CURRENT_CONFIG 把它们理解成磁盘的五个分区可以了。(2)子键。可以有多个子键和键值项,就像一个目录中可以有多个子目录和多个文件一样。(3)键值项。可以理解为文件,它由三部分组成,分别为:名称、类型、数据。类型又分... 阅读全文
posted @ 2012-12-21 10:31 qintangtao 阅读(3904) 评论(0) 推荐(1)

摘要:L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。即win32中,long,near,far指针与普通指针没有区别,LP 与P是等效的。P表示这是一个指针。T表示_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。STR表示这个变量是一个字符串。C表示是一个常量,const。LPTSTR: 如果定义了UNICOD 阅读全文
posted @ 2012-12-19 18:04 qintangtao 阅读(373) 评论(0) 推荐(0)

摘要:字符串前面加L表示该字符串是Unicode字符串。_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。因此,Visual C++里边定义字符串的时候,用_T来保证兼容性。VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。以下是别人的总结:一、在字符串前加一个L作用: 如 L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。 strlen("asd") = 3; st 阅读全文
posted @ 2012-12-19 17:58 qintangtao 阅读(279) 评论(0) 推荐(0)

摘要:class Dog{public:enum Flag{aa=1,bb=2,cc=3};};cout<<Dog::aa<<endl; 阅读全文
posted @ 2012-12-12 10:28 qintangtao 阅读(167) 评论(0) 推荐(0)

摘要:1、什么是static? static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。 2、为什么要引入static? 函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅受此函数控制)。 3、什么时候用static? 需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装 阅读全文
posted @ 2012-12-12 10:21 qintangtao 阅读(7999) 评论(0) 推荐(0)

摘要:我们看下面的函数,函数体中只有一行语句: double Average(double total, int number){ return total/number; } 定义这么简单的函数有必要吗?实际上,它还是有一些优点的:第一,它使程序更可读;第二,它使这段代码可以重复使用。但是,它也有缺点:当它被频繁地调用的时候,由于调用函数的开销,会对应用程序的性能(时间+空间效率,这儿特指时间)有损失。例如,Average在一个循环语句中重复调用几千次,会降低程序的执行效率。 那么,有办法避免函数调用的开销吗?对于上面的函数,我么可以把它定义为内联函数的形式: inline double Aver 阅读全文
posted @ 2012-12-10 16:56 qintangtao 阅读(311) 评论(0) 推荐(0)

1 2 下一页