c/c++ 本身问题
文章平均质量分 69
向量Vector
IT 人员
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
被误解的C++——学习和使用
学习和使用C++太复杂了。我猜想你一定是在计算机屏幕前不住地点头。其实我也在使劲的点头。没错,C++着实复杂,大概是迄今为止最复杂的语言。于是,便产生了一个推论:C++难学难用。这句话也相当准确,但并非所有时候都这样。C++的学习和使用可以分为若干个层面,这些层面由简到繁,由易到转载 2011-07-12 13:09:06 · 1108 阅读 · 1 评论 -
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 · 502 阅读 · 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 · 467 阅读 · 0 评论 -
[转]最快速度找到内存泄漏
内存管理是C++程序员的痛。我的《内存管理变革》系列就是试图讨论更为有效的内存管理方式,以杜绝(或减少)内存泄漏,减轻C++程序员的负担。由于工作忙的缘故,这个系列目前未完,暂停。这篇短文我想换个方式,讨论一下如何以最快的速度找到内存泄漏。确认是否存在内存泄漏我们知道,MFC程序转载 2011-07-14 10:34:24 · 357 阅读 · 0 评论 -
函数对非法参数输入的判断需要做到什么程度?
在开发一套SDK的时候,常常要面对这个问题,我们的对外接口对使用者的非法输入参数的判断要做如何的处理?处理到什么地步?以下是几个备选方案:1)不对输入非法参数做判断。但是文档应该很清晰的执行合法的参数。另外,对于可能导致缓冲区溢出等严重错误应该做判断。防止被恶意程序攻击。2)对输原创 2011-07-14 10:19:58 · 597 阅读 · 0 评论 -
c++抛出异常 详解
1:不可以抛出一个指向局部类的指针!因为,该局部类会在退出try的时候销毁!不可以抛出一个指向局部类的引用. 原理同上.2:抛出一个局部的类对象时,thow先通过Copy构造函数构造一个新对象,再把该新对象传递给 catch.因为局部对象在退出try时会被析构,所以,这里要构造一原创 2011-07-14 09:42:12 · 3547 阅读 · 1 评论 -
C++箴言:理解typename的两个含义
在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 相信学习C++的人对class这个关键字都非常明白,class用于定义类,在模板引入c++后,最初定义模板的方法为: tem翻译 2011-07-13 10:16:02 · 339 阅读 · 0 评论 -
C语言编译全过程剖析
内容摘要 C语言编译的整个过程是非常复杂的,里面涉及到的编译器知识、硬件知识、工具链知识都是非常多的,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的,希望大家可以多了解一些,在遇到问题时多思考、多实践。 一般情况下,我们只需要知道分成编译和连接两个阶段,编译阶段将源转载 2011-07-13 09:11:05 · 212 阅读 · 0 评论 -
二分查找的几点思考
二分查找的几点思考 很早听说90%的程序员写不出正确的二分查找程序,对此颇为怀疑也颇为惶恐。怀疑的是,二分查找真的很难写吗?惶恐的是,怀疑的我能否在短时间内写出一个正确的二分查找程序?为了自己能成为10%中的一员,在此特别总结了二分查找算法。 二分查找又称折半查找,用于在有序序列原创 2011-07-12 17:35:20 · 265 阅读 · 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 · 381 阅读 · 0 评论 -
关于全局变量的变义的地方及函意,及如何避兔用Extern去声明外部变量?
规则1:不要在.h文件中定义变量(事实上这个变量一定义肯定是全局变量)原因概要:因为.h文件的只包含一次声明不能保证该.h文件在整个项目中被只编译一次!!!,尽管能保证在一个CPP文件中能只被编译一次.如果能保证,在.h中声明变量也就可以了.这是为什么没人这样做的原因.即:在CP原创 2011-07-12 11:53:15 · 834 阅读 · 0 评论 -
moto & google笔试题目-STL/C++面试题
2007年摩托罗拉笔试题1.介绍一下STL,详细说明STL如何实现vector。Answer:STL (标准模版库,Standard Template Library.它由容器算法迭代器组成。STL有以下的一些优点:可以方便容易地实现搜索数据或对数据排序等一系列的算法;调试程序时转载 2011-07-12 11:18:55 · 13576 阅读 · 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 · 401 阅读 · 0 评论 -
模板知识准备: 1. C++关键字typename
/******************************************************************************* * SGI*STL是STL之父Alexander Stepanov和STL巨匠Matt Austern等人的作品,原创 2011-07-11 17:34:06 · 325 阅读 · 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 · 422 阅读 · 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 · 231 阅读 · 0 评论 -
被误解的C++——模板和宏
模板和宏前些日子,论坛里大打口水仗的时候,有人提出这样一个论断:模板本质上是宏。于是,诸位高手为此好好辩论了一番。我原本也想加入论战,但是觉得众人的言论已经覆盖了我的想法,所以也就作罢了。尽管没有参与讨论,但“模板究竟和宏有什么关系”这个问题,始终在我的脑海中上下翻飞。每当我能够原创 2011-07-12 13:04:28 · 421 阅读 · 0 评论 -
函数调用栈
理解调用栈最重要的两点是:栈的结构,EBP寄存器的作用。右侧的红色部分,写出了引发栈结构变化的对应的指令+| (栈底方向,高位地址) || ....................|| ....................| //转载 2011-07-14 15:18:34 · 3585 阅读 · 0 评论 -
如何使用一个输出流迭代器 ostream_iterator
对于迭代器,有另一种方法使用流和标准函数。理解的要点是将输入/输出流作为容器看待。因此,任何接受迭代器参数的算法都可以和流一起工作。 Listing 4. outstrm.cpp#include #include // Need random(), srandom()#i转载 2011-07-14 15:52:13 · 404 阅读 · 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 · 295 阅读 · 0 评论 -
巧用空数组建立动态缓冲区
巧用空数组建立动态缓冲区关于在结构体末尾定义空数组的用法,以前看到过,一直没搞懂,在无意中瞄到了答案,实在是三生有幸,阿弥陀佛啊,所以就贴出来大家一起分享:struct ast_exten {char *exten; char stuff[0];};又如:struct ast原创 2011-07-14 13:26:04 · 358 阅读 · 0 评论 -
一道C笔试题
文件1里声明全局变量:int array[5];文件2里声明全局变量:extern int *array;问在运行时会不会报错,如果会,是在编译时还是在链接时?答:编译与链接时均不报错,当用array[i]存取数组中元素时,运行时报错!原因:int array[5]; //原创 2011-07-14 14:24:06 · 284 阅读 · 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 · 657 阅读 · 1 评论 -
做一回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 · 282 阅读 · 0 评论 -
可变参数的函数的原理
可变参数。1:必须有一个提前参数,(即:...之前必须要有一个参数),用以计算出后面的第一个未知参数的地址sprintf()的原型:sprintf(char* buffer, const char* fmt, ... ) ,其中,fmt就是提前参数2:每一个可变阐述函数,其编写者原创 2011-07-14 14:42:14 · 292 阅读 · 0 评论 -
关于 const_cast的有意思的问题
#include using namespace std; int main() { //TODO: Add your code here const in原创 2011-07-14 09:45:28 · 368 阅读 · 0 评论 -
二维数组来个了断!
持续面临二维数组的问题, 每次都怕怕的. 那些指针实在让人烦恼, 那些内存更让人烦恼.今日总结: 以供日后参考.只写出最常用的几个1: 在栈上 分配 int A[m][n]. 缺点, m, n必须为已知 函数参数调用 fun( int A[][n], int d原创 2011-07-14 10:45:08 · 390 阅读 · 0 评论 -
如何修改const类中的变量(或在const函数中修改变量)
有时候,我们需要在const函数中修改一些变量,比如类的共享标记、共享计数器,如下代码: class Entity { private: int referenceCounter; public: void ref() { referenceCounter++;原创 2011-07-14 11:28:01 · 635 阅读 · 0 评论 -
【转】避免 C/C++ 程序一闪而过的方法
2. 第一种办法够简单吧?不过这第二种办法可更简单哦!在您想要暂停的地方加上 system("pause"); 就可以使 C/C++ 程序暂停。不过,这个办法奏效的前提是系统中必须存在 pause 这个命令。此外,还需要包含标准头文件 stdlib.h(对于 C)或者 cstdl转载 2011-07-14 13:41:26 · 341 阅读 · 0 评论 -
__stdcall,__fastcall,__cdecl等函数说明符详解
__stdcall,__fastcall,__cdecl用于确定以下三方面函数调用信息:1。将函数参数推送到堆栈上的顺序。 2。是由调用方函数还是由被调用函数在调用结束时从堆栈中移除参数。 3。编译器用来标识各个函数的名称修饰约定。 __cdecl 细节对于 C,__cdecl原创 2011-07-18 09:53:54 · 373 阅读 · 0 评论 -
__uuidof 什么意思
__uuidof 什么意思 取得和某个标示符相关联的 GUID ,例如 struct __declspec(uuid( "00000000-0000-0000-c000-000000000046 ")) IUnknown; __uuidof(IUnknown)原创 2011-07-19 09:06:29 · 357 阅读 · 0 评论 -
C++中的64位整数
转自:http://hi.baidu.com/gchrist/blog/item/3e7df5fe81d1df305d600819.html 在做ACM题时,经常都会遇到一些比较大的整数。而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31)原创 2011-07-21 09:12:11 · 807 阅读 · 0 评论 -
C++ 误区:检查 new 的返回值
首先澄清一下,这个误区仅对 C++ 成立,这里不过是沿用“C/C++ 误区”这个衔头罢了。 我们都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的。原创 2011-07-11 10:39:32 · 308 阅读 · 0 评论 -
位运算技巧 大总结
首先,老牛的blog里有一个。1: 判断一个整数是否为2的幂 !x&(x-1) 参考:2:统计一个整数的二进制中1的个数 http://hi.youkuaiyun.com/link.php?url=http://blog.youkuaiyun.com%2Fpeterniu121转载 2011-07-08 21:52:47 · 205 阅读 · 0 评论 -
析构函数中抛异常
1: 可以在析构函数中抛异常吗? 不可以! 虽然语法上并没错,但会对整体系统带来重大隐患!! 2: 那么如何保证析构不抛异常呢? 2.1)析构里如同构造函数一样,做一些简单的操作。 2.2)如果异常不可避免,那么直接在析构里捕获原创 2011-07-11 15:04:49 · 224 阅读 · 0 评论 -
C/C++移位运算符出界后的结果是不可预期的
以前看到C++标准上说,移位运算符(>)出界时的行为并不确定:The behavior is undefined if the right operand is negative, or greater than or equal to the length in bits of原创 2011-07-11 09:27:45 · 192 阅读 · 0 评论 -
骚变态的C++题
1:#i nclude union{int i;char x[2];}a;void main(){a.x[0] = 10;a.x[1] = 1;printf("%d",a.i);}答案:266 (低位低地址,高位高地址,内存占用情况是Ox010A)2:(微软笔试题)int fun原创 2011-07-11 10:11:10 · 310 阅读 · 0 评论 -
一个完美的类的构造函数应该这样写
1: 初始化效率要高效。 所有的成员变量初始化通过 初始化列表实现。 如果放在类的构造函数里面初始化,效率会低! 因为:在进入类的构造函数之前,类必须是一个已经构造好的类了!也就是,其内部成员变量也已经被构造好了。也就是进入构造函数之前所有的内部成员原创 2011-07-11 10:13:33 · 217 阅读 · 0 评论 -
虚函数不可以是内联函数
虚函数不能是内联的。 这是因为“内联”是指“在编译期间用被调用的函数体本身来代替函数调用的指令,”但是虚函数的“虚”是指“直到运行时才能知道要调用的是哪一个函数。”如果编译器在某个函数的调用点不知道具体是哪个函数被调用,你就能知道为什么它不会内联该函数的调用。原创 2011-07-11 10:16:36 · 257 阅读 · 0 评论 -
【转】编写可移植C/C++程序的要点
以前做过两年C++程序移植工作,从Win32平台移植到Linux平台。大约有上百万行C/C++代码,历时一年多。在开发Win32版本时,已 经强调了程序的可植性,无奈Win32团队里对Linux精通的人比较少,很多问题没有想到,直到后来移植工作开始时,才发现移植并非像想的那样简单转载 2011-07-11 13:01:23 · 394 阅读 · 1 评论
分享