`
kmplayer
  • 浏览: 512673 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
1,class members以它们在class内的声明次序来初始化,和它们在member initialization list中出现的次序完全无关. 2,这么做的原因: 对象数据成员的析构总是以和其构造相反的次序被调用,如果按照初始化列表的次序构造,那么编译器必须跟踪每个对象内members初始化的次序,这将带来昂贵的成本.
1,如果class含有const成员或引用reference,由于它们只能被初始化,而不可能被赋值. 因此必须使用初始化列表. 2,出于效率上的考虑: 对象的构造分两个阶段: (1)data member初始化. (2)执行constructor. 如果有一个string str成员.可能会被调用两次: 一次初始化阶段,dafault constructor,一次constructor阶段,调用assignment运算符. 3,注意:static class members绝不应该在一个class's constructor中被初始化. static members在每一个程序执行时,只应该被 ...
1, 定义两个对象: String a("Hello"); String b("Word"); 如下所示: 执行b=a;后,变为: 这样的状况至少存在两个问题: (1)b原先指向的内存没有被释放掉,内存泄露. (2)a和b的指针指向相同的字符串,当其中一个离开生存空间,其destructor会删除内存,另外一个悬垂指针. 如: #include<iostream> using namespace std; class String { public: String(const char* value); ...
异常控制流(ECF) 1,这里异常指允许程序进行非本地跳转(违反通常的调用/返回栈规则的跳转)。 2,异常处理完成后,发生三种情况: (1)执行当前指令Icurr (2)执行下一条指令Inext (3)处理程序终止被中断的程序。 3,每 ...
1,加载器创建了存储器映像,将可执行文件的相关内容拷贝到了代码和数据段。 接下来加载器跳转到程序的入口点:_start的地址。 _start处的启动代码是在目标文件ctrl.o中定义的,对所有的C程序都是一样的。 0x080480c0 <_start>: call _libc_init_first call _init call atexit call main call _exit 首先从.text和.init节中调用初始化例程,启动代码调用atexit例程,它注册了一系列在调用exit函数时应该调用的程序。 然后启动代码调用应用程序的main程序,开始执行我们的c代码。 ...
1,文件元数据。 stat结构体: struct stat { mode_t st_mode; //文件对应的模式,文件,目录等 ino_t st_ino; //i-node节点号 dev_t st_dev; //设备号码 dev_t st_rdev; //特殊设备号码 nlink_t st_nlink; //文件的连接数 uid_t st_uid; //文件所有者 gid_t st_gid; //文件所有者对应的组 off_t st_size; //普通文件,对应的文件字节数 time_t st_atime; //文件最后被访问的时间 time_t st_mtime; ...
1,一个静态内容的http事务: kmplayer@kmplayer:~$ //客户端请求 telnet www.baidu.com 80 //网络应答 Trying 119.75.213.51... Connected to www.a.shifen.com. Escape character is '^]'. //HTTP请求 形式:<method><uri><version> GET / HTTP/1.1 host: www.baidu.com //空行表示请求报头的结束 //HTTP响应 形式:<version><status ...
1,语言的缺陷:多做之过,少做之过,误做之过. 2,多做之过:缺省的全局作用域. 3,少做之过: (1)C语言中的符号重载: static 函数内部:静态变量; 函数级别:该函数只对本文件可见. extern 用于函数定义:全局可见(缺省情况) 放在变量前:声明,在其他地方定义. (2)优先级问题: 建议:在C中牢记两个优先级就够了,乘除先于加减,在涉及其他操作符时,一律加上括号. (3)gets: Internet蠕虫病毒.
1,数组char a[4][6]; 访问元素a[i][j]; 编译器符号列表中,a的地址9980 (1)取i的值,乘以行宽row,加到9980上. 9980+i*row; (2)取j的值,乘以元素factor的宽度,9980+i*row+j*factor; (3)从地址(9980+i*row+j*factor)中取出内容. 2,数组char* a6]; 访问元素a[i][j]; 编译器符号列表中,a的地址9980 (1)取i的值,乘以4,加到9980上. 9980+i*4; (2)取j的值,乘以元素factor的宽度,9980+i*4+j*factor; (3)从地址(9980+i*4+j*f ...
1,char s[]和char* s等价的情况:作为函数定义的形式参数(仅限于这种情况). 实例: #include <stdio.h> int main() { char a[]="abcefgh"; printf("%p %s\n",a,a); //这里既可以把a作为数组名,也可以作为一个地址. return 0; } 2,对数组的引用如a[i]在编译时,总是被编译改写成*(a+i)的形式. 在表达式中,指针和数组是可以互换的,因为他们在编译器那里的最终形式都是指针,并且都可以进行下标操 ...
1,先看一个常见的错误: file1: int mango[100];  //定义mango为一个数组. file2: extern int* mango; //声明mango为一个指针. 基于错误的认识"数组定义等同于指针的外部声明" 正确: file2: extern int mango[]; 2,地址(左值)和地址的内容(右值)之间的区别 x=y (1)x的含义是x代表的地址;被称为左值;左值在编译时可知,表示存储结果的地方. (2)y的含义是y代表的地址的内容;被称为右值;右值直到运行时才知道. 注:关键之处在于每个符号的地址编译时可知,如果编译器需要一个地址可直 ...
1,我的总结: 【.】匹配任何单个字符。例如正则表达式r.t匹配这些字符串:rat、rut、r t,但是不匹配root。 【$】匹配以此字符串结束行的结束符。 【^】匹配以此字符串结束行的结束符。 【*】匹配0或多个正好在它之前的那个字符。例如正则表达式.*意味着能够匹配任意数量的任何字符。 【\】这是引用符,用来将这里列出的这些元字符当作普通的字符来进行匹配(将一些特殊的符号正常化使用)。 [A-Za-z]可以匹配任何大小写字母 【\< \>】匹配词(word)的开始(\<)和结束(\>)。例如正则表达式\<the能够匹配字符串"for the wis ...
1。a.out:“assembler output(汇编程序输出)”的缩写形式。 2,段的概念: (1)在UNIX中,段表示一个二进制相关的内容块。 命令:size test(可执行程序),返回文件中的三个段。    text    data     bss     dec     hex filename    1196     276     188    1660     67c test (2)Inter x86架构: 地址空间被分成64K大小的区域,称之为段。 3,使自己确信: (1)数据段保存在目标文件中。 (2)BSS段不保存在目标文件中(只是记录BSS段运行时所需要的大小) ...
1,8086内存地址的形成经过:取得段寄存器的值,左移4位,加上16位的偏移地址(段内地址)。 在Microsoft C中,fan关键字表示指针存储了段寄存器的内容和偏移地址。 near关键字表示指针只存储16位的偏移地址,它的段地址使用当 ...
1,类型提升: 在C的表达式中,每个char都被转换为int,每个表达式中的float被转换为double。 由于函数参数也是一个表达式,所以当参数传递给函数时,也会发生类型转换。 如: sizeof(‘a’); C结果:4 C++结果:1 printf(“%d”); %d可以适用short,char和int,因为他们都会被转换为int。 2,隐式类型转换是语言中的一种临时手段,起源于简化最初的编译器的想法。 把所有的操作数转换为统一的长度极大地简化了代码的生成。这样压到堆栈中的参数都是同一长度,所以运行时只需要知道参数的数目,而不需要知道它们的长度。 3,编写链表法解决hash,可以先让h ...
Global site tag (gtag.js) - Google Analytics