牛客 C++刷题day40

1.编译把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。按照编译的工作内容推断编译错误可分为词法错误和语法错误。

2.无符号数中的最高位将不再作为符号位而转变为数值位计入数值。还有负数都是以补码形式存储的啊,别又忘了。。。

3."常量折叠"是 就是在编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。

因为编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏似的: #define pi 3.1415,用到pi时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!!!
简单的说就是,当编译器处理const的时候,编译器会将其变成一个立即数。
4.C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。
关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。
基本类型的对象没有析构函数,所以回收基本类型组成的数组空间用 delete 和 delete[] 都是应该可以的;但是对于类对象数组,只能用 delete[]。
   所以一个简单的使用原则就是:new 和 delete、new[] 和 delete[] 对应使用。
5.这么需要考虑虚函数表,指向虚函数表的指针在32位系统下占用4个字节,其地址分布在整个类成员变量的地址的首部,接下来就是成员变量地址。当然随着编译器的不同,也会有不同。
6.
(1)派生类中的基类子对象和子对象必须初始化,初始化在派生类的构造函数的初始化列表中,如果初始化列表中没有进行初始化,则调用缺省的构造函数进行初始化。
(2)派生类构造函数的调用顺序:
   基类的构造函数
   子对象类的构造函数
   派生类的构造函数
基类子对象初始化应该在基类的构造函数中完成。
posted @ 2019-10-11 22:37  Tonarinototoro  阅读(141)  评论(0编辑  收藏  举报