
c/c++ 本身问题
文章平均质量分 69
向量Vector
IT 人员
展开
-
C++中的64位整数
转自:http://hi.baidu.com/gchrist/blog/item/3e7df5fe81d1df305d600819.html 在做ACM题时,经常都会遇到一些比较大的整数。而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31)原创 2011-07-21 09:12:11 · 760 阅读 · 0 评论 -
运算符-重载为成员函数 和友元函数的区别.
下面的代码有无错误? 为什么?class A { public: A(){x=0;} A(int _x):x(_x){} //friend A operator + (const A& a1, const A& a2 ) //{ //原创 2011-07-14 10:53:41 · 422 阅读 · 0 评论 -
[转]最快速度找到内存泄漏
内存管理是C++程序员的痛。我的《内存管理变革》系列就是试图讨论更为有效的内存管理方式,以杜绝(或减少)内存泄漏,减轻C++程序员的负担。由于工作忙的缘故,这个系列目前未完,暂停。这篇短文我想换个方式,讨论一下如何以最快的速度找到内存泄漏。确认是否存在内存泄漏我们知道,MFC程序转载 2011-07-14 10:34:24 · 303 阅读 · 0 评论 -
函数对非法参数输入的判断需要做到什么程度?
在开发一套SDK的时候,常常要面对这个问题,我们的对外接口对使用者的非法输入参数的判断要做如何的处理?处理到什么地步?以下是几个备选方案:1)不对输入非法参数做判断。但是文档应该很清晰的执行合法的参数。另外,对于可能导致缓冲区溢出等严重错误应该做判断。防止被恶意程序攻击。2)对输原创 2011-07-14 10:19:58 · 539 阅读 · 0 评论 -
c++抛出异常 详解
1:不可以抛出一个指向局部类的指针!因为,该局部类会在退出try的时候销毁!不可以抛出一个指向局部类的引用. 原理同上.2:抛出一个局部的类对象时,thow先通过Copy构造函数构造一个新对象,再把该新对象传递给 catch.因为局部对象在退出try时会被析构,所以,这里要构造一原创 2011-07-14 09:42:12 · 3458 阅读 · 1 评论 -
C++箴言:理解typename的两个含义
在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 相信学习C++的人对class这个关键字都非常明白,class用于定义类,在模板引入c++后,最初定义模板的方法为: tem翻译 2011-07-13 10:16:02 · 286 阅读 · 0 评论 -
C语言编译全过程剖析
内容摘要 C语言编译的整个过程是非常复杂的,里面涉及到的编译器知识、硬件知识、工具链知识都是非常多的,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的,希望大家可以多了解一些,在遇到问题时多思考、多实践。 一般情况下,我们只需要知道分成编译和连接两个阶段,编译阶段将源转载 2011-07-13 09:11:05 · 181 阅读 · 0 评论 -
二分查找的几点思考
二分查找的几点思考 很早听说90%的程序员写不出正确的二分查找程序,对此颇为怀疑也颇为惶恐。怀疑的是,二分查找真的很难写吗?惶恐的是,怀疑的我能否在短时间内写出一个正确的二分查找程序?为了自己能成为10%中的一员,在此特别总结了二分查找算法。 二分查找又称折半查找,用于在有序序列原创 2011-07-12 17:35:20 · 223 阅读 · 0 评论 -
被误解的C++——学习和使用
学习和使用C++太复杂了。我猜想你一定是在计算机屏幕前不住地点头。其实我也在使劲的点头。没错,C++着实复杂,大概是迄今为止最复杂的语言。于是,便产生了一个推论:C++难学难用。这句话也相当准确,但并非所有时候都这样。C++的学习和使用可以分为若干个层面,这些层面由简到繁,由易到转载 2011-07-12 13:09:06 · 1063 阅读 · 1 评论 -
关于全局变量的变义的地方及函意,及如何避兔用Extern去声明外部变量?
规则1:不要在.h文件中定义变量(事实上这个变量一定义肯定是全局变量)原因概要:因为.h文件的只包含一次声明不能保证该.h文件在整个项目中被只编译一次!!!,尽管能保证在一个CPP文件中能只被编译一次.如果能保证,在.h中声明变量也就可以了.这是为什么没人这样做的原因.即:在CP原创 2011-07-12 11:53:15 · 780 阅读 · 0 评论 -
moto & google笔试题目-STL/C++面试题
2007年摩托罗拉笔试题1.介绍一下STL,详细说明STL如何实现vector。Answer:STL (标准模版库,Standard Template Library.它由容器算法迭代器组成。STL有以下的一些优点:可以方便容易地实现搜索数据或对数据排序等一系列的算法;调试程序时转载 2011-07-12 11:18:55 · 13472 阅读 · 3 评论 -
string的用法
// 参考资料:stl中文站,有一篇关于string的很详细的资料.// make_xml项目中用到很多string的资料.find,find_first_of,find_not_first_of.... 我用过的关于string的用法:typedef basic_string原创 2011-07-12 10:37:00 · 355 阅读 · 0 评论 -
模板知识准备: 1. C++关键字typename
/******************************************************************************* * SGI*STL是STL之父Alexander Stepanov和STL巨匠Matt Austern等人的作品,原创 2011-07-11 17:34:06 · 265 阅读 · 0 评论 -
volatile 如何保证编译器不去自做主张破坏多线程安全。
volatile 在Andrei Alexandrescu的文章《volatile - Multithreaded Programmer's Best Friend》[2]开头有如下简要描述:The volatile keyword was devised to prevent翻译 2011-07-13 16:22:44 · 390 阅读 · 0 评论 -
标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Function-style)强制转型使用这样的语法: T(exdivssion) // cast exdivssion to转载 2011-07-13 10:21:20 · 195 阅读 · 0 评论 -
C++ - Myths and Fallacies (rev#1)或“争论C++前你应当知道什么”
转自:http://blog.youkuaiyun.com/pongba/archive/2007/08/08/1732055.aspx最近写了一篇关于C++0x Concepts的文章,意料之外地引起了一场小规模口水仗。回各位帖子的同时,回想这些年C++社群的大小争论,觉得有必要把一些长久转载 2011-07-14 13:58:13 · 453 阅读 · 0 评论 -
函数调用规范解惑 Calling Conventions Demystified
原帖讲的非常的好,我懒得翻译了。。。嘎嘎。 __cdecl is the default calling convention for C and C++ programs. The advantage of this calling convetion is that it a翻译 2011-07-14 14:43:13 · 319 阅读 · 0 评论 -
__uuidof 什么意思
__uuidof 什么意思 取得和某个标示符相关联的 GUID ,例如 struct __declspec(uuid( "00000000-0000-0000-c000-000000000046 ")) IUnknown; __uuidof(IUnknown)原创 2011-07-19 09:06:29 · 317 阅读 · 0 评论 -
__stdcall,__fastcall,__cdecl等函数说明符详解
__stdcall,__fastcall,__cdecl用于确定以下三方面函数调用信息:1。将函数参数推送到堆栈上的顺序。 2。是由调用方函数还是由被调用函数在调用结束时从堆栈中移除参数。 3。编译器用来标识各个函数的名称修饰约定。 __cdecl 细节对于 C,__cdecl原创 2011-07-18 09:53:54 · 333 阅读 · 0 评论 -
【转】避免 C/C++ 程序一闪而过的方法
2. 第一种办法够简单吧?不过这第二种办法可更简单哦!在您想要暂停的地方加上 system("pause"); 就可以使 C/C++ 程序暂停。不过,这个办法奏效的前提是系统中必须存在 pause 这个命令。此外,还需要包含标准头文件 stdlib.h(对于 C)或者 cstdl转载 2011-07-14 13:41:26 · 286 阅读 · 0 评论 -
如何修改const类中的变量(或在const函数中修改变量)
有时候,我们需要在const函数中修改一些变量,比如类的共享标记、共享计数器,如下代码: class Entity { private: int referenceCounter; public: void ref() { referenceCounter++;原创 2011-07-14 11:28:01 · 572 阅读 · 0 评论 -
二维数组来个了断!
持续面临二维数组的问题, 每次都怕怕的. 那些指针实在让人烦恼, 那些内存更让人烦恼.今日总结: 以供日后参考.只写出最常用的几个1: 在栈上 分配 int A[m][n]. 缺点, m, n必须为已知 函数参数调用 fun( int A[][n], int d原创 2011-07-14 10:45:08 · 360 阅读 · 0 评论 -
关于 const_cast的有意思的问题
#include using namespace std; int main() { //TODO: Add your code here const in原创 2011-07-14 09:45:28 · 326 阅读 · 0 评论 -
可变参数的函数的原理
可变参数。1:必须有一个提前参数,(即:...之前必须要有一个参数),用以计算出后面的第一个未知参数的地址sprintf()的原型:sprintf(char* buffer, const char* fmt, ... ) ,其中,fmt就是提前参数2:每一个可变阐述函数,其编写者原创 2011-07-14 14:42:14 · 251 阅读 · 0 评论 -
做一回Haker,修改函数返回地址
#include "stdafx.h"#include #include using namespace std;void fun2();void fun( int a, int b ){ int retAddr =(int)(&a)-4; // :获取fun返回地址 *原创 2011-07-14 14:34:46 · 247 阅读 · 0 评论 -
A* p=NULL; p->Display()...如此诡异的代码。。----class object如何调用class memmber functions
A* p=NULL; p->Display()...如此诡异的代码。。请看下面的程序class foo{public:foo() { m_nVar1 = 100;};~foo(){};void Display(){printf( " m_nVar2 is %d", m_nVar2原创 2011-07-14 15:09:59 · 611 阅读 · 1 评论 -
一道C笔试题
文件1里声明全局变量:int array[5];文件2里声明全局变量:extern int *array;问在运行时会不会报错,如果会,是在编译时还是在链接时?答:编译与链接时均不报错,当用array[i]存取数组中元素时,运行时报错!原因:int array[5]; //原创 2011-07-14 14:24:06 · 246 阅读 · 0 评论 -
巧用空数组建立动态缓冲区
巧用空数组建立动态缓冲区关于在结构体末尾定义空数组的用法,以前看到过,一直没搞懂,在无意中瞄到了答案,实在是三生有幸,阿弥陀佛啊,所以就贴出来大家一起分享:struct ast_exten {char *exten; char stuff[0];};又如:struct ast原创 2011-07-14 13:26:04 · 299 阅读 · 0 评论 -
常用宏定义总结
今天,和一位网友Oasis谈了一些关于宏定义的一些问题,颇有所得。特录于此。起因是他看到open sourc中经常有这样的源码,感觉无法理解:#define swap(a,b) do {int tmp;tmp = (a);(a) = (b);(b) = tmp;}while(0)转载 2011-07-14 11:48:42 · 244 阅读 · 0 评论 -
如何使用一个输出流迭代器 ostream_iterator
对于迭代器,有另一种方法使用流和标准函数。理解的要点是将输入/输出流作为容器看待。因此,任何接受迭代器参数的算法都可以和流一起工作。 Listing 4. outstrm.cpp#include #include // Need random(), srandom()#i转载 2011-07-14 15:52:13 · 356 阅读 · 0 评论 -
函数调用栈
理解调用栈最重要的两点是:栈的结构,EBP寄存器的作用。右侧的红色部分,写出了引发栈结构变化的对应的指令+| (栈底方向,高位地址) || ....................|| ....................| //转载 2011-07-14 15:18:34 · 3508 阅读 · 0 评论 -
被误解的C++——模板和宏
模板和宏前些日子,论坛里大打口水仗的时候,有人提出这样一个论断:模板本质上是宏。于是,诸位高手为此好好辩论了一番。我原本也想加入论战,但是觉得众人的言论已经覆盖了我的想法,所以也就作罢了。尽管没有参与讨论,但“模板究竟和宏有什么关系”这个问题,始终在我的脑海中上下翻飞。每当我能够原创 2011-07-12 13:04:28 · 360 阅读 · 0 评论 -
关于C++中算符重载的高级话题 - 从OO暴露接口的角度审视
算符重载的作用是什么?它允许你为类的用户提供一个直觉的接口。 算符重载允许C/C++的运算符在用户定义类型(类)上拥有一个用户定义的意义。重载的算符是函数调用的语法修饰: class Fred { public: // … }; #if 0 //转载 2011-07-11 09:18:12 · 195 阅读 · 0 评论 -
使用REPLACEMENT NEW来调用对象的构造函数,从而实现任意内存位置的对象实例化....
#include template inline T * CALL_CON( T * ptMem ){ T * pt = new(ptMem)T; return pt;}template inline void CALL_DEC( T * pt ){ pt->~T();}使用方法翻译 2011-07-11 09:09:15 · 191 阅读 · 0 评论 -
构造函数中抛异常
1: 构造函数中是否可以抛异常? 可以。2: 有什么限制吗? 有限制。构造抛异常之前必须把已经申请的资源释放掉。这样,就算你的对象是new出来的,也不会造成内存泄漏。 因为析构函数不会被调用,所以抛出异常后,你没机会释放资源。原创 2011-07-11 15:09:43 · 232 阅读 · 0 评论 -
重读Effective C++的几点收获
1:常量可以放在头文件里,包括常量字符串,但是定义常量字符串应当这样定义const char* const pStr = "str";const char Str[] = "str"; 2:如果内存不足,new会跑出一个bad_alloc的异常,如果设置了内存不足的处理函数,那么转载 2011-07-11 12:23:15 · 295 阅读 · 0 评论 -
详细解说STL hash_map系列
0 为什么需要hash_map 用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改: 岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手转载 2011-07-11 09:55:18 · 249 阅读 · 0 评论 -
vc2010 and c++ 0x
新特性之一:Lambda表达式.很多编程编程语言都支持匿名函数(anonymous function)。所谓匿名函数,就是这个函数只有函数体,而没有函数名。Lambda表达式就是实现匿名函数的一种编程技巧,它为编写匿名函数提供了简明的函数式的句法。同样是Visual Studio原创 2011-07-08 21:46:21 · 358 阅读 · 0 评论 -
RTTI的机制。
什么是RTTI,RTTI就是运行时提供的一些类型信息,常用的功能包含如下两个方面一: 能提供 一个指针运行时的名字。 举例常见的3种实现p->Type_na() (程序员自己实现)(p->GetRuntimeClass())->m_psClassName(类库实现,egMFC)t原创 2011-07-11 13:04:36 · 227 阅读 · 0 评论 -
【转】编写可移植C/C++程序的要点
以前做过两年C++程序移植工作,从Win32平台移植到Linux平台。大约有上百万行C/C++代码,历时一年多。在开发Win32版本时,已 经强调了程序的可植性,无奈Win32团队里对Linux精通的人比较少,很多问题没有想到,直到后来移植工作开始时,才发现移植并非像想的那样简单转载 2011-07-11 13:01:23 · 346 阅读 · 1 评论