博客园 - zhuyf87
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=59694
2013-04-04T14:05:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
feed.cnblogs.com
https://www.cnblogs.com/zhuyf87/archive/2013/04/04/2999916.html
c++中的new_handler - zhuyf87
原文地址:http://blog.csdn.net/wzq981264/article/details/673630在过去或者传统的模式中,当operator new不能满足一个内存分配请求的时候,它会返回一个空指针,但是现在如果operator new不能满足一个内存分配请求的时候,会抛出一个异常,这个时候我们可不可以自己定制处理策略呢?这正是new_handler的作用所在,具体情况在后面详细道来。 当operator new申请一个内存失败时,它会进行如下的处理步骤: 1、如果存在客户指定的处理函数,则调用处理函数(new_handler),如果不存在则抛出一个异常。new_han...
2013-04-04T13:58:00Z
2013-04-04T13:58:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】原文地址:http://blog.csdn.net/wzq981264/article/details/673630在过去或者传统的模式中,当operator new不能满足一个内存分配请求的时候,它会返回一个空指针,但是现在如果operator new不能满足一个内存分配请求的时候,会抛出一个异常,这个时候我们可不可以自己定制处理策略呢?这正是new_handler的作用所在,具体情况在后面详细道来。 当operator new申请一个内存失败时,它会进行如下的处理步骤: 1、如果存在客户指定的处理函数,则调用处理函数(new_handler),如果不存在则抛出一个异常。new_han... <a href="https://www.cnblogs.com/zhuyf87/archive/2013/04/04/2999916.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/23/2976772.html
c++ placement new的标准用法及用途 - zhuyf87
原文地址:http://blog.csdn.net/lazyking/article/details/5319580什么是placement new?所谓placement new就是在用户指定的内存位置上构建新的对象,这个构建过程不需要额外分配内存,只需要调用对象的构造函数即可。举例来说:class foo{};foo* pfoo = new foo;pfoo指向的对象的地址是不能决定的,因为new已经为我们做了这些工作:第一步分配内存,第二步调用类的构造函数。而placement new是怎么做的呢,说白了就是把原本new做的两步工作分开来。第一步你自己分配内存,第二步你调用类的构造函数在
2013-03-23T02:58:00Z
2013-03-23T02:58:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】原文地址:http://blog.csdn.net/lazyking/article/details/5319580什么是placement new?所谓placement new就是在用户指定的内存位置上构建新的对象,这个构建过程不需要额外分配内存,只需要调用对象的构造函数即可。举例来说:class foo{};foo* pfoo = new foo;pfoo指向的对象的地址是不能决定的,因为new已经为我们做了这些工作:第一步分配内存,第二步调用类的构造函数。而placement new是怎么做的呢,说白了就是把原本new做的两步工作分开来。第一步你自己分配内存,第二步你调用类的构造函数在 <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/23/2976772.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/23/2976714.html
c++ new的三种形态 - zhuyf87
(1)new operatornew的第一种形态是new operator,它是语言内建的,不能重载。new operator完成以下三件工作:1. allocate memory for this object.2. call constructor to init that memory.3. return the pointer of this object.例如:string *pStr = new string(“Memory Management”);它实际完成以下三件事:// 1. 为string对象分配raw内存void *memroy = operator new( size
2013-03-23T02:20:00Z
2013-03-23T02:20:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】(1)new operatornew的第一种形态是new operator,它是语言内建的,不能重载。new operator完成以下三件工作:1. allocate memory for this object.2. call constructor to init that memory.3. return the pointer of this object.例如:string *pStr = new string(“Memory Management”);它实际完成以下三件事:// 1. 为string对象分配raw内存void *memroy = operator new( size <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/23/2976714.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/19/2969814.html
(MFC Combo Box)Switch between drop-list and drop-down mode - zhuyf87
参考此贴:http://www.codeguru.com/cpp/controls/combobox/article.php/c1823/Switch-between-droplist-and-dropdown-mode.htm实现源码(经过少量修改,原版本请参考上贴)// FineCombo.h : header file//// Copyright (c) 1999 Bruno Vais//// Distribute and use freely, except:// a) Don't alter or remove this notice.// b) Mark the chang
2013-03-19T11:29:00Z
2013-03-19T11:29:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】参考此贴:http://www.codeguru.com/cpp/controls/combobox/article.php/c1823/Switch-between-droplist-and-dropdown-mode.htm实现源码(经过少量修改,原版本请参考上贴)// FineCombo.h : header file//// Copyright (c) 1999 Bruno Vais//// Distribute and use freely, except:// a) Don't alter or remove this notice.// b) Mark the chang <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/19/2969814.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/18/2965972.html
(visual)c++ 内存分配 - zhuyf87
“烫”和“屯”在vc++中,栈中未初始化的内存在变量监视窗口总是显示为一串“烫”字;而堆中未初始化的内存则显示一串“屯”字。原因是:vc++编译器对栈中未初始化的内存默认设置为0xcc,而两个0xcc,即0xcccc在GBK编码中就是“烫”;而堆中未初始化的内存默认设置为0xcd,而0xcdcd在GBK编码中则是“屯”。内存分配方式程序运行时,首先要被加载到内存,程序在内存中的布局大致如下图:代码区存放程序的执行代码。数据区存放全局数据、常量、静态变量,所以在c++中数据区又可分为自由存储区(自由存储区是那些由malloc等分配的内存块,它和堆十分相似,不过它是由free来释放的)、全局/静态
2013-03-18T06:38:00Z
2013-03-18T06:38:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】“烫”和“屯”在vc++中,栈中未初始化的内存在变量监视窗口总是显示为一串“烫”字;而堆中未初始化的内存则显示一串“屯”字。原因是:vc++编译器对栈中未初始化的内存默认设置为0xcc,而两个0xcc,即0xcccc在GBK编码中就是“烫”;而堆中未初始化的内存默认设置为0xcd,而0xcdcd在GBK编码中则是“屯”。内存分配方式程序运行时,首先要被加载到内存,程序在内存中的布局大致如下图:代码区存放程序的执行代码。数据区存放全局数据、常量、静态变量,所以在c++中数据区又可分为自由存储区(自由存储区是那些由malloc等分配的内存块,它和堆十分相似,不过它是由free来释放的)、全局/静态 <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/18/2965972.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/17/2964869.html
c++ new delete - zhuyf87
当创建一个c++对象时,会发生两件事:(1)为对象分配内存。(2)调用构造函数初始化这块内容。这块内存可以位于3个区域:静态存储区、栈、堆。operator new当用new创建一个对象时,它将在堆里为对象分配内存(使用“operator new()”)并为这块内存调用构造函数。MyType * fp = new MyType;operator delete与new结合使用。delete先调用析构函数,然后释放内存。delete fp;同一指针delete两次会产生未定义行为(程序可能崩溃),所以在delete某一指针之后最好将其置0,因为delete零值指针是安全的(其行为是什么都不做)。当
2013-03-17T12:10:00Z
2013-03-17T12:10:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】当创建一个c++对象时,会发生两件事:(1)为对象分配内存。(2)调用构造函数初始化这块内容。这块内存可以位于3个区域:静态存储区、栈、堆。operator new当用new创建一个对象时,它将在堆里为对象分配内存(使用“operator new()”)并为这块内存调用构造函数。MyType * fp = new MyType;operator delete与new结合使用。delete先调用析构函数,然后释放内存。delete fp;同一指针delete两次会产生未定义行为(程序可能崩溃),所以在delete某一指针之后最好将其置0,因为delete零值指针是安全的(其行为是什么都不做)。当 <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/17/2964869.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/15/2960899.html
c++ RTTI(运行时类型识别) - zhuyf87
通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型。c++通过下面两个操作符提供RTTI。(1)typeid:返回指针或引用所指对象的实际类型。(2)dynamic_cast:将基类类型的指针或引用安全的转换为派生类型的指针或引用。对于带虚函数的类,在运行时执行RTTI操作符,返回动态类型信息;对于其他类型,在编译时执行RTTI,返回静态类型信息。当具有基类的指针或引用,但需要执行派生类操作时,需要动态的强制类型转换(dynamic_cast)。这种机制的使用容易出错,最好以虚函数机制代替之。dynamic_cast 操作符如果dynamic_cast转换指针类型失败,则返回0;
2013-03-15T02:33:00Z
2013-03-15T02:33:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型。c++通过下面两个操作符提供RTTI。(1)typeid:返回指针或引用所指对象的实际类型。(2)dynamic_cast:将基类类型的指针或引用安全的转换为派生类型的指针或引用。对于带虚函数的类,在运行时执行RTTI操作符,返回动态类型信息;对于其他类型,在编译时执行RTTI,返回静态类型信息。当具有基类的指针或引用,但需要执行派生类操作时,需要动态的强制类型转换(dynamic_cast)。这种机制的使用容易出错,最好以虚函数机制代替之。dynamic_cast 操作符如果dynamic_cast转换指针类型失败,则返回0; <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/15/2960899.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/13/2957572.html
c++ stl algorithm: std::find, std::find_if - zhuyf87
原文地址:http://blog.csdn.net/ilysony/article/details/6526545std::find:查找容器元素, find只能查找容器元素为<基本数据类型>#include <iostream>#include <vector>#include <algorithm>int main(){ std::vector<int> v; for (int i = 0; i < 10; ++i) v.push_back(i); std::vector<int>::iterator iter
2013-03-13T06:06:00Z
2013-03-13T06:06:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】原文地址:http://blog.csdn.net/ilysony/article/details/6526545std::find:查找容器元素, find只能查找容器元素为<基本数据类型>#include <iostream>#include <vector>#include <algorithm>int main(){ std::vector<int> v; for (int i = 0; i < 10; ++i) v.push_back(i); std::vector<int>::iterator iter <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/13/2957572.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/13/2957023.html
vc++ warning C4541 'typeid' used on polymorphic type with GR- - zhuyf87
在vc2008编译器下使用c++ typeid操作符时,提示如下警告,并在运行时崩溃。warning C4541: 'typeid' used on polymorphic type 'XXX' with /GR-; unpredictable behavior may result.在vc++编译器中,“/GR”选项的作用如下:When /GR is on, the compiler defines the _CPPRTTI preprocessor macro./GR- disables run-time type information.Use /GR i
2013-03-13T01:45:00Z
2013-03-13T01:45:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】在vc2008编译器下使用c++ typeid操作符时,提示如下警告,并在运行时崩溃。warning C4541: 'typeid' used on polymorphic type 'XXX' with /GR-; unpredictable behavior may result.在vc++编译器中,“/GR”选项的作用如下:When /GR is on, the compiler defines the _CPPRTTI preprocessor macro./GR- disables run-time type information.Use /GR i <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/13/2957023.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/13/2956994.html
c++ typeid获取类型名 - zhuyf87
在我的项目中,有这样一个需求:在socket(TCP协议)通信部分,需要根据不同的业务协议类型分别设置一个不同的block时间。而此时我已经拿到了指向该协议(数据)对象的(父类型)指针。那最简单的区分不同协议的方式就是使用c++的 typeid操作符。typeid操作符的作用就是获取一个表达式的类型。返回结果是const type_info&。不同编译器实现的type_info class各不相同。但c++标准保证它会实现一个name()方法,该方法返回类型名字的c-style字符串。如果typeid的操作数不是类类型或者是没有虚函数的类,则typeid指出该操作数的静态类型。如果操作
2013-03-13T01:23:00Z
2013-03-13T01:23:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】在我的项目中,有这样一个需求:在socket(TCP协议)通信部分,需要根据不同的业务协议类型分别设置一个不同的block时间。而此时我已经拿到了指向该协议(数据)对象的(父类型)指针。那最简单的区分不同协议的方式就是使用c++的 typeid操作符。typeid操作符的作用就是获取一个表达式的类型。返回结果是const type_info&。不同编译器实现的type_info class各不相同。但c++标准保证它会实现一个name()方法,该方法返回类型名字的c-style字符串。如果typeid的操作数不是类类型或者是没有虚函数的类,则typeid指出该操作数的静态类型。如果操作 <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/13/2956994.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/12/2955058.html
多态基类的析构函数应该为虚函数 - zhuyf87
#include<iostream>using namespace std;class CBird{public: CBird() { cout << "CBird constructor." << endl; }; ~CBird() { cout << "CBird destructor." << endl; }; virtual void fly() { cout << "CBird fly." << endl; };};class CLark :
2013-03-12T01:37:00Z
2013-03-12T01:37:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】#include<iostream>using namespace std;class CBird{public: CBird() { cout << "CBird constructor." << endl; }; ~CBird() { cout << "CBird destructor." << endl; }; virtual void fly() { cout << "CBird fly." << endl; };};class CLark : <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/12/2955058.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/10/2952700.html
c/c++ 位操作的趣味应用 - zhuyf87
原文地址:http://blog.csdn.net/morewindows/article/details/7354571(代码部分,略作删减;加下划线部分,是后加内容,非原文内容)位操作有很有趣的应用,下面列举出一些,欢迎读者补充。1. 高低位交换给出一个16位的无符号整数。称这个二进制数的前8位为“高位”,后8位为“低位”。现在写一程序将它的高低位交换。例如,数34520用二进制表示为:1000011011011000将它的高低位进行交换,我们得到了一个新的二进制数:1101100010000110它即是十进制的55430。这个问题用位操作解决起来非常方便,设x=34520=1000011
2013-03-10T07:00:00Z
2013-03-10T07:00:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】原文地址:http://blog.csdn.net/morewindows/article/details/7354571(代码部分,略作删减;加下划线部分,是后加内容,非原文内容)位操作有很有趣的应用,下面列举出一些,欢迎读者补充。1. 高低位交换给出一个16位的无符号整数。称这个二进制数的前8位为“高位”,后8位为“低位”。现在写一程序将它的高低位交换。例如,数34520用二进制表示为:1000011011011000将它的高低位进行交换,我们得到了一个新的二进制数:1101100010000110它即是十进制的55430。这个问题用位操作解决起来非常方便,设x=34520=1000011 <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/10/2952700.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/10/2952641.html
c/c++ 位操作与空间压缩 - zhuyf87
原文地址:http://blog.csdn.net/morewindows/article/details/7354571(加下划线部分,是后加内容,非原文内容)这里不详细介绍筛素数法,本文着重对筛素数法所使用的素数表进行优化来减小其空间占用。要压缩素数表的空间占用,可以使用位操作。下面是用筛素数法计算100以内的素数示例代码(这种筛素数的方法很朴素,会多次重复访问素数表中的同一数据,改进方法请参看《改进的筛素数方法》一文):#include <stdio.h>#include <memory.h>const int MAXN = 100;bool flag[MAXN]
2013-03-10T05:54:00Z
2013-03-10T05:54:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】原文地址:http://blog.csdn.net/morewindows/article/details/7354571(加下划线部分,是后加内容,非原文内容)这里不详细介绍筛素数法,本文着重对筛素数法所使用的素数表进行优化来减小其空间占用。要压缩素数表的空间占用,可以使用位操作。下面是用筛素数法计算100以内的素数示例代码(这种筛素数的方法很朴素,会多次重复访问素数表中的同一数据,改进方法请参看《改进的筛素数方法》一文):#include <stdio.h>#include <memory.h>const int MAXN = 100;bool flag[MAXN] <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/10/2952641.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/10/2952570.html
c/c++ 位操作 常用小技巧 - zhuyf87
原文地址:http://blog.csdn.net/morewindows/article/details/7354571(加下划线部分,是后加内容,非原文内容)下面对位操作的一些常见应用作个总结,有判断奇偶、交换两数、变换符号及求绝对值。这些小技巧应用易记,应当熟练掌握。1.判断奇偶根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数。下面程序将输出0到100之间的所有奇数。for (i = 0; i < 100; ++i) if (i & 1) printf("
2013-03-10T04:31:00Z
2013-03-10T04:31:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】原文地址:http://blog.csdn.net/morewindows/article/details/7354571(加下划线部分,是后加内容,非原文内容)下面对位操作的一些常见应用作个总结,有判断奇偶、交换两数、变换符号及求绝对值。这些小技巧应用易记,应当熟练掌握。1.判断奇偶根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数。下面程序将输出0到100之间的所有奇数。for (i = 0; i < 100; ++i) if (i & 1) printf(" <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/10/2952570.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/10/2952508.html
c/c++ 位操作基础 - zhuyf87
原文地址:http://blog.csdn.net/morewindows/article/details/7354571#quote(这里将原文分为4部分分别转载)在计算机中所有数据都是以二进制的形式存储的。位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千斤的效果。正因为位操作的这些优点,所以位操作在各大IT公司的笔试面试中一直是个热点问题。基本的位操作符有与、或、异或、取反、左移、右移这6种,它们的运算规则如下所示:符号描述运算规则 by MoreWindows&与两个位都为1时,结果才为1|或两个
2013-03-10T03:31:00Z
2013-03-10T03:31:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】原文地址:http://blog.csdn.net/morewindows/article/details/7354571#quote(这里将原文分为4部分分别转载)在计算机中所有数据都是以二进制的形式存储的。位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千斤的效果。正因为位操作的这些优点,所以位操作在各大IT公司的笔试面试中一直是个热点问题。基本的位操作符有与、或、异或、取反、左移、右移这6种,它们的运算规则如下所示:符号描述运算规则 by MoreWindows&与两个位都为1时,结果才为1|或两个 <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/10/2952508.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/09/2951905.html
【面试题】计算整数符号 - zhuyf87
题目:计算一个整数的符号位int v; // we want to find the sign of vint sign; // the result goes here不能使用函数,不能使用if,不能使用“?:”三目运算符…总而言之,本题主要考查的是“位操作、逻辑操作、关系操作”。在google里面输入“Compute the sign of an integer”,搜到一篇强文,里面也包括了这道题目的答案。地址:http://graphics.stanford.edu/~seander/bithacks.html这里把文中关于本题的解答引用如下:Compute the sig...
2013-03-09T12:26:00Z
2013-03-09T12:26:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】题目:计算一个整数的符号位int v; // we want to find the sign of vint sign; // the result goes here不能使用函数,不能使用if,不能使用“?:”三目运算符…总而言之,本题主要考查的是“位操作、逻辑操作、关系操作”。在google里面输入“Compute the sign of an integer”,搜到一篇强文,里面也包括了这道题目的答案。地址:http://graphics.stanford.edu/~seander/bithacks.html这里把文中关于本题的解答引用如下:Compute the sig... <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/09/2951905.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/07/2948105.html
原码, 反码, 补码 详解 - zhuyf87
原文地址:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助!一. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负
2013-03-07T07:05:00Z
2013-03-07T07:05:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】原文地址:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助!一. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负 <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/07/2948105.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/07/2947555.html
一道 c++字符串 面试题 - zhuyf87
c/c++ 中的字符串以“\0”作为结尾符,这样每个字符串都有一个额外字符的开销。下面代码将造成内存越界。char str[10];strcpy(str, “0123456789”);为了节省内存,c/c++ 会把常量字符串放到单独的一个内存区域。当几个指针赋予相同的常量字符串时,它们实际上会指向相同的内存地址。char str1[] = "hello world";char str2[] = "hello world";char *str3 = "hello world";char *str4 = "hello world
2013-03-07T02:35:00Z
2013-03-07T02:35:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】c/c++ 中的字符串以“\0”作为结尾符,这样每个字符串都有一个额外字符的开销。下面代码将造成内存越界。char str[10];strcpy(str, “0123456789”);为了节省内存,c/c++ 会把常量字符串放到单独的一个内存区域。当几个指针赋予相同的常量字符串时,它们实际上会指向相同的内存地址。char str1[] = "hello world";char str2[] = "hello world";char *str3 = "hello world";char *str4 = "hello world <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/07/2947555.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/04/2942209.html
c++中 typename 和 class 的区别 - zhuyf87
原文地址:http://blog.163.com/susu_sf/blog/static/171060253201092233759957/在c++Template中,很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?相信学习C++的人对class这个关键字都非常明白,class用于定义类。在模板引入c++后,最初定义模板的方法为: template<class T>......在这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字。它的作用同cl
2013-03-03T23:11:00Z
2013-03-03T23:11:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】原文地址:http://blog.163.com/susu_sf/blog/static/171060253201092233759957/在c++Template中,很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?相信学习C++的人对class这个关键字都非常明白,class用于定义类。在模板引入c++后,最初定义模板的方法为: template<class T>......在这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字。它的作用同cl <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/04/2942209.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhuyf87/archive/2013/03/04/2942208.html
c++模板与泛型编程基础 - zhuyf87
泛型编程就是以独立于任何特定类型的方式编写代码,而模板是泛型编程的基础。(1)定义函数模板(function template)函数模板是一个独立于类型的函数,可以产生函数的特定类型版本。// implement strcmp-like generic compare functiontemplate <typename T>int compare(const T &v1, const T &v2){ if (v1 < v2) return -1; if (v2 < v1) return 1; return 0;}模板定义以关键字template开始,后
2013-03-03T23:05:00Z
2013-03-03T23:05:00Z
zhuyf87
https://www.cnblogs.com/zhuyf87/
【摘要】泛型编程就是以独立于任何特定类型的方式编写代码,而模板是泛型编程的基础。(1)定义函数模板(function template)函数模板是一个独立于类型的函数,可以产生函数的特定类型版本。// implement strcmp-like generic compare functiontemplate <typename T>int compare(const T &v1, const T &v2){ if (v1 < v2) return -1; if (v2 < v1) return 1; return 0;}模板定义以关键字template开始,后 <a href="https://www.cnblogs.com/zhuyf87/archive/2013/03/04/2942208.html" target="_blank">阅读全文</a>