随笔分类 -  C++

c++预处理指令(转)
摘要:C++中的预处理命令分类:vc++经验谈2009-07-02 15:061024人阅读评论(0)收藏举报c++iostream编译器语言filepreprocessorC++中的预处理命令转来的:http://blog.csdn.net/zy102600/article/details/4316205一、预处理的由来: 在C++的历史发展中,有很多的语言特征(特别是语言的晦涩之处)来自于C语言,预处理就是其中的一个。C++从C语言那里把C语言预处理器继承过来(C语言预处理器,被Bjarne博士简称为Cpp,不知道是不是C Program Preprocessor的简称)。二、常见的预处理功能: 阅读全文
posted @ 2013-04-04 17:16 侠骨豪情 阅读(109) 评论(0) 推荐(0)
保证cin输入合法
摘要:【转帖】cin输入流的fail(),clear(),sync(),例子详解___有疑惑的看过来by健 张- 星期六, 31 十月 2009, 05:26 下午考虑如下代码:#include using namespace std;int main(){int a;while(cout>a,! (a>=1 && ausing namespace std;int main(){int a;while(cout>a,! (a>=1 && a>K),要用 if( cin>>K , cin.fail()) 。前者可能会失败。--- 阅读全文
posted @ 2013-03-31 17:35 侠骨豪情 阅读(333) 评论(0) 推荐(0)
c++异常参数传递和普通函数参数传递的区别。
摘要:从语法上看,在函数里声明参数与在catch子句中声明参数是一样的,catch里的参数可以是值类型,引用类型,指针类型。例如:try{ .....}catch(A a){}catch(B& b){}catch(C* c){}尽管表面是它们是一样的,但是编译器对二者的处理却又很大的不同。调用函数时,程序的控制权最终还会返回到函数的调用处,但是抛出一个异常时,控制权永远不会回到抛出异常的地方。class A;void func_throw(){ A a; throw a; //抛出的是a的拷贝,拷贝到一个临时对象里}try{ func_throw();}catch(A a) //临时对象的拷 阅读全文
posted @ 2013-03-05 16:07 侠骨豪情 阅读(835) 评论(0) 推荐(0)
虚函数表剖析,网上转的,呵呵
摘要:http://www.cppblog.com/xczhang/archive/2008/01/20/41508.htmlC++虚函数表解析(转)C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从 阅读全文
posted @ 2013-03-04 20:19 侠骨豪情 阅读(256) 评论(0) 推荐(0)
多态
摘要:静态类型(在编译时可知的引用类型或指针类型)动态类型(指针或引用所绑定的对象的类型这是仅在运行时可知的)[cpp]view plaincopy#includeusingnamespacestd;classA{public:A(){fun();};//private://如果这里设置为private则编译不通过virtualvoidfun(inti=10){coutfun();system("pause");return0;}为什么编译不通过?(当设置为public 时,输出: B init 10 )过程:1,在编译阶段,p->fun(); 只是按其静态类型来处理的, 阅读全文
posted @ 2013-03-04 17:13 侠骨豪情 阅读(256) 评论(0) 推荐(0)
placement new (转)
摘要:placement new (转)有关placement new 作者: hzh5121. placement new的含义 placement new 是重载operator new 的一个标准、全局的版本,它不能够被自定义的版本代替(不像普通版本的operator new 和 operator delete能够被替换)。void *operator new( size_t, void *p ) throw() { return p; }placement new的执行忽略了size_t参数,只返还第二个参数。其结果是允许用户把一个对象放到一个特定的地方,达到调用构造函数的效果。和其他普通. 阅读全文
posted @ 2013-03-03 19:56 侠骨豪情 阅读(255) 评论(0) 推荐(0)
sizeof问题
摘要:sizeof和sizeof(string)的问题今天看《程序员面试宝典》一书(为了应付将要到来的微软笔试),看到了sizeof(string)这个问题。在Dev C++上测试的结果是4,很不明白。上网搜了一下,得到如下结果:string strArr1[]={"Trend", "Micro", "Soft"};sizeof(strArr1)=12转自:http://apps.hi.baidu.com/share/detail/30398570关于sizeof(string),今天看那本面试宝典的时候看到这个表达式,有点吃惊,书上写着s 阅读全文
posted @ 2013-03-03 15:42 侠骨豪情 阅读(789) 评论(4) 推荐(0)
C++中的内存对齐
摘要:原文地址:【转】C++中结构体的内存空间占用作者:E览众山小关于内存对齐一: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 阅读全文
posted @ 2013-03-01 23:06 侠骨豪情 阅读(463) 评论(0) 推荐(0)
const,static,extern用法总结
摘要:--------------------------CONST---------------------------------------const应用:一、对于基本声明 const int r=100;//标准const变量声明加初始化,编译器经过类型检查后直接用100在编译时替换。 二、对于指针 1. int x=10; const int *r=&x; //指针指向的内容是常量,r指向的内容不能够通过r改变,但如果是非const,内容可以通过自己改变,而且r指针可以改变,可以指向其它的整形. //*r=*r+1;NO //x++;YES //r=&y;YES 2. in 阅读全文
posted @ 2013-03-01 22:23 侠骨豪情 阅读(508) 评论(0) 推荐(0)
断言assert
摘要:assert()在release中没有任何作用(转)发布时间:2011-10-08 11:51:02技术类别:自由话题最近在调试别人写的代码。被assert()狠狠的涮了一把。现在将涮我的代码片段摘录如下: else if( m_radarLevel > c_maxRadarLevel ) {//可以在预计正常情况下程序不会到达的地方放置断言 :assert false ASSERT( false ); m_radarLevel = c_maxRadarLevel; }【注】c_maxRadarLevel是一个全局变量,出错前的值为16。因为m_radarLevel 值得范围是0--32 阅读全文
posted @ 2013-02-27 22:58 侠骨豪情 阅读(385) 评论(2) 推荐(1)
extern与static
摘要:extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编 译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。 这个功能十分有用处,因为在C++出现以前,很多代码都是C语言写的,而且很底层的库也是C语言写的,为了更好的支持原来的C代码和已经写好的C语言库,需要在C++中尽可能的支持C,而extern 阅读全文
posted @ 2013-02-27 20:38 侠骨豪情 阅读(328) 评论(1) 推荐(1)
函数返回引用和值的区别
摘要:String的赋值函数operator=的实现如下:CMystring& CMystring::operator=( const CMystring& other ) { if( this == &other ) // 检查自身赋值 { return *this; }if( m_data != NULL ) { delete []m_data; // 释放原有的空间 m_data = NULL; }m_data = new char[ strlen(other.m_data)+1 ]; if( m_data == NULL ) { cout << " 阅读全文
posted @ 2013-02-26 17:39 侠骨豪情 阅读(449) 评论(0) 推荐(1)
C++中delete和delete[]的区别
摘要:一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论。做个备份,以免丢失。C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。 关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。请看下面的程序。?12345678910111213141516171819202122#include ;usingnamespacestd;classT {public:T() { cou 阅读全文
posted @ 2013-02-26 16:28 侠骨豪情 阅读(383) 评论(0) 推荐(1)