【C/C++】
viclee108
即使不能成为巨人,也要始终站在巨人的肩膀上
展开
-
main函数中两个参数的用法(转)
main函数中两个参数的用法MSDN6.0中写道:argc is An integer specifying how many arguments are passed to the program from the command line. Because the program name is considered an argument, argc is at least 1.即是第一个表示参数的个数;第二个参数中argv[0]为自身运行目录路径和程序名,argv[1]指向第一个参数、argv[2]转载 2010-10-14 19:32:00 · 21070 阅读 · 2 评论 -
C++中的typeid关键字
用以返回一个变量或数据类型的“类型”。用法如下:coutint a;cout输出如下:intint关于typeid的错误(warning C4541: 'typeid' used on polymorphic type 'class A' with /GR-; unpredictable behavior may result):解决方法:在vc6中. Project - settings... - C/C++ ,在Category那里选 C++ Language,再在下边勾上 Enable Run-Tim原创 2011-03-12 19:30:00 · 11859 阅读 · 2 评论 -
c++中两个类相互包含引用的相关问题
在构造自己的类时,可能会遇到两个类相互引用的问题。例如:class A{ int i; B b;}class B{ int i; A a;}在这种情况下,这样就会出现一个死循环a.b.a.b.a.b....,一般来说,应避免这种情况。如果确实需要的话,一般来说,至少有一方需要定义成指针。例如:class A{ int i; B b;}class B{ int i; A* a;}如果按照以上的方式,既然存在互相引用,就必须互相包含头文件,如果仅仅是在自己的头文件中包含另外一个头文件,这样是没法转载 2011-03-16 21:28:00 · 4236 阅读 · 0 评论 -
转换操作符
<br />有两种转换,我一向比较陌生,用得少嘛!并且都是编译器自动转换。<br /> 第一种:内置数据类型(大多数)到类的转换。最经典的是C类型字符串到string类对象的转换。如:<br />fun(string str);<br />fun("wangyi");//编译器调用了string(char*),自动转换。<br />如果希望编译器不自动调用具有此参数的构造函数,在构造函数前加上explicit。<br /> 第二种:类到内置数据类型或者其他类的转换。也是编译器自动调用。如:<br转载 2011-04-07 13:47:00 · 1177 阅读 · 0 评论 -
linux中system和exec函数的区别
<br />system是用shell来调用程序=fork+exec+waitpid,而exec是直接让你的程序代替用来的程序运行。<br />system 是在单独的进程中执行命令,完了还会回到你的程序中。而exec函数是直接在你的进程中执行新的程序,新的程序会把你的程序覆盖,除非调用出错,否则你再也回不到exec后面的代码,就是说你的程序就变成了exec调用的那个程序了。<br />看一下,下面的例子.<br />例子1<br />---------------------------------<br转载 2011-04-11 15:02:00 · 14595 阅读 · 0 评论 -
编译模板类时出现的错误
我写了一个模板类,将类声明和类定义分别放在了.h和.cpp,链接的时候就会出现下面的错误,所以要将成员函数的定义全部放在.h头文件中。main.obj : error LNK2001: unresolved external symbol "public: class LinearList & __thiscall LinearList::Delete(int,int &)" (?Delete原创 2011-06-03 23:17:00 · 3313 阅读 · 1 评论 -
C++中异常类的使用方法
C++有很多的标准异常类:namespace std{ //exception派生 class logic_error; //逻辑错误,在程序运行前可以检测出来 //logic_error派生 class domain_error; //违反了前置条件 class invalid_argument; //指出函数的一个无效参数原创 2011-06-09 12:47:00 · 31945 阅读 · 1 评论 -
八进制数转为十进制程序分析
<br />#include <iostream.h> <br /><br />void main() <br />{ <br />char s[6],*p=s; <br />cin> > s; <br />int k=*p- '0'; //这里为什么要减去0? <br />while(*(++p)!= '/0') <br />{ <br /> k = k*8+*p- '0'; //这里为什么如此表示? <br />} cout < <k < <en转载 2011-05-03 19:06:00 · 3519 阅读 · 0 评论 -
浅谈构造函数与析构函数的调用顺序
构造函数 先看看构造函数的调用顺序规则,只要我们在平时编程的时候遵守这种约定,任何关于构造函数的调用问题都能解决;构造函数的调用顺序总是如下:1.基类构造函数。如果有多个基类,则构造函数的调用顺序是某类在类派生表中出现的顺序,而不是它们在成员初始化表中的顺序。2转载 2011-08-20 21:44:42 · 1468 阅读 · 0 评论 -
字符编码笔记:ASCII,Unicode和UTF-8(转)
<br />本文转自:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html<br />PS:写的太好了!!!<br /> <br /> <br /> <br />今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。<br />结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。<br />下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋转载 2011-03-13 13:37:00 · 1189 阅读 · 0 评论 -
VC生成dll的方法
<br />下面首先说明用VC生成dll的方法,这个例子中只给出add函数:<br />用VC写一个工程:addFunc<br />头文件:addFunc.h<br />#ifndef _ADDFUNC_H<br />#define _ADDFUNC_H<br />int add(int a,int b); <br />#endif<br />源文件:addFunc.cpp<br />#include <stdlib.h><br />#include "addFunc.h"<br />int add(int原创 2011-01-16 14:43:00 · 3662 阅读 · 0 评论 -
预处理命令详解(转)
<br />预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。 <br />在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作,就需要使用预处理程序。尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。预处理过程还会删除程序中的注释和多余的空白字符。 <br转载 2011-01-11 12:11:00 · 962 阅读 · 0 评论 -
while循环中的内存分配问题
<br />诸如下面的while循环,循环内有个分配内存的语句。<br />while(1)<br /> {<br /> char command[100];<br /> printf("请输入命令:>");<br /> memset(command,0,100);<br /> gets(command);<br /> printf("%s/n",command);<br />}<br />那么它是每次都分配内存,还是只分配一次内存呢?<br />原创 2010-12-10 20:30:00 · 3367 阅读 · 0 评论 -
C++中的explicit关键字的作用
C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能在隐式转换中使用。 C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。一是个构造器,二是个默认且隐含的类型转换操作符。 所以,有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象。这样看起来好象很酷,很方便。转载 2010-10-19 22:26:00 · 1588 阅读 · 0 评论 -
使用STL时的问题
今天第一次使用STL写程序,用的是queue,并包含了头文件,然后在编译的时候发现编译器并不认识它。这是因为 和 可大不相同! queue.h : c形式的队列queue : 标准c++的容器 然后,我改成下列形式就没有问题了:#include using std::list;#include using std::list;#include using std::list;#include using std::queue; #include using std::原创 2010-12-09 15:20:00 · 933 阅读 · 0 评论 -
字符编码方式的比较
1.ASCII编码:它用7位二进制数进行编码,可以表示128个字符。字符数据以ASCII码的形式存放在内存中,其存储形式和整数的存储形式在本质上是相同的。一个字符数据可以以整数的形式输出,也可以以字符的形式输出。如果把一个字符以字符的形式输出,需要把存储在内存中的ASCII码转换成相应的字符,然后输出;如果是以整数形式输出,那么久可以直接将ASCII码作为整数输出。同样,对字符数据进行算术运算也就相当于对它们的ASCII码进行算术运算。2.GB2312编码:汉字采用两个字节来表示一个。由于ASCII码占用7原创 2010-12-18 21:00:00 · 1925 阅读 · 0 评论 -
C语言中的volatile关键字
<br />C语言中的volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。<br />使用该关键字的例子如下:<br />int volatile i; <br />当要使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。<br />例如:<br />volatile原创 2010-12-20 11:23:00 · 846 阅读 · 0 评论 -
C语言中变量的初始化问题
<br /> C语言中,全局变量和局部静态变量是存储在静态存储区的,他们在分配的时候都被系统默认初始化为0;而局部自动变量是在栈上分配内存的,如果不对它们进行初始化,那么他们可能是任意的随机值。原创 2010-12-27 13:01:00 · 1812 阅读 · 0 评论 -
数组名和指针的区别(转)
<br /> <br />请看程序<br />1. #include <iostream.h><br />2. int main(int argc, char* argv[])<br />3. {<br />4. char str[10];<br />5. char *pStr = str;<br />6. cout << sizeof(str) << endl;<br />7. cout << sizeof(pStr) << endl;<br />8. return 0;<br />9. }<br /转载 2011-01-07 13:09:00 · 2468 阅读 · 0 评论 -
寄存器变量
变量一般情况下都存在于内存中。如果程序需要使用某个变量,CPU的控制器将从内存中取得变量值后会将其暂存在寄存器中。寄存器就是CPU自己的"小内存",它的特点是"容量小、速度快"。正常情况下,编程语言本身无法直接操作寄存器。但某些时候,一些变量可能会被频繁地使用,这时,频繁地对内存进行存取操作就会耗费较多的时间;如果我们能够有效地利用CPU的寄存器,就会显著提升程序的运行效率。 C语言中使用关键字register来声明局部变量为寄存器变量。寄存器变量的值会被存放在CPU的寄存器中,每当需要使用它们时,原创 2010-11-16 23:04:00 · 6182 阅读 · 0 评论 -
linux内核之sys_wait4
<br />sys_wait4(pid_t pid,unsigned int * stat_addr, int options, struct rusage * ru)<br /> DECLARE_WAITQUEUE(wait, current);<br /> add_wait_queue(¤t->wait_chldexit,&wait);<br />repeat:<br /> flag = 0;<br /> current->state = TASK_INTER转载 2011-05-11 14:35:00 · 5545 阅读 · 0 评论