1、 字符串常量应该是个常字符指针,就是一个数组名,求sizeof得到的是字符串长加1('\0'),而对string类型求sizeof VS2015得到28,因为string类型实际上是一个类类型,所以一个字符串常量不可能是string类型;


2、 定义字符串,所以一定要有'\0';定义一个字符数组的话'\0'并不是必须的;


3、 下列程序中,K的值为:6


enum {
a,b=5,c,d=4,e
}k;
K=c;

分析:enum中,首元素不赋值的话,默认为0;后一个元素不赋值的话比前一个元素大1.


4、 程序运行正常。

#include<iostream>
using namespace std;
int main() {
         http://www/taobao.com
         cout<<"welcometo taobao"<<endl;
}



分析:(http:)相当于一个label,类似于访问限定符private,public;程序可以正常运行。


双斜杠之后的www.csdn.net被当做注释了,那么前面的http:是否合法?这就是C++中一个几乎不会被用到的语法,标签。
带标签的语句是一种特殊的语句,在语句前面有一个标识符(即标签,上段代码中的http)和一个冒号。
使用goto label就可以跳到标签处执行,比如可以在代码中写goto http,这样就会执行cout语句了。case就是一种标签,case关键字和它对应的值一起,称为case标签。类中的public、private、protect也是标签,称为成员访问标签。


5、中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。

(简单来说,中间件并不能提高内核的效率,一般只是负责网络信息的分发处理)


中间件特点的描述:

1). 中间件应支持标准的协议和接口

2)中间件可运行于多种硬件和操作系统平台上

3). 跨越网络,硬件,操作系统平台的应用或服务可通过中间件透明交互


5、 若PAT是一个类,则程序运行时,语句”PAT(*ad)[3];”调用PAT的工作函数次数是:0

分析:PAT(*ad)[3];

ad首先是个指针;

ad是个指向有着三个PAT元素的数组的指针;

这里只是声明了指针,虽然指针指向的数组有三个PAT对象,但是没有实例化其中的对象,所以并没有调用构造函数。


6. 函数传参的形式,它包括三种:传值、传指针、传引用;

其中传值不会改变变量的值,传指针和传引用会改变变量的值。

传值的情况,函数的参数会产生临时空间,函数结束就会释放空间,因此不会改变主函数中变量的值;

传指针即传递的是地址,将主函数中变量的地址传到函数中,而不会产生临时变量,因此会改变量的值;

传引用的情况,就是传递的变量的别名,因此也会改变变量的值。


7、某些运算符必须重载位成员函数,比如operator new;

某些运算符必须重载位非成员函数,比如 operator >>……


8、C语言本身没有提供对字符串进行整体操作的运算符。


9、假定x=500,求下面函数的返回值为 6

#include<iostream>
using namespace std;
int fun(int x) {
         intcount=0;
         while(x){
                   count++;
                   x=x&(x-1);
         }
         returncount;
}
int main() {
         cout<<fun(500);     
}


分析:x每次与x-1进行一次与(&)操作,就会导致x二进制中的1减少一个。通过函数fun可知,x二进制中有多少位1就会进行多少次与计算。

500的二进制表示是:111110100,共有6个1。所以答案是6


10、算术转换:把一种算术类型转换成另一种算术类型。运算符的运算对象将转换成最宽的类型,题中最宽的是double类型8字节,所以结果是double。  

其他几种转换情况:  1、整型提升:把小整数类型转换成较大的整数类型。其中布尔值false提升为0、true提升为1;

2、无符号类型的运算对象如果一个运算对象是无符号类型、另一个是带符号类型,而且其中无符号类型不小于带符号类型,那么带符号的运算对象转换成无符号的;如果一个运算对象是无符号类型、另一个是带符号类型,而且其中无符号类型小于带符号类型,此时转换结果依赖于机器。


11、代码生成阶段的主要任务:把中间代码变换成依赖具体机器的目标代码。


源码 ->(扫描)-> 标记 ->(语法分析)-> 语法树 ->(语义分析)-> 标识语义后的语法树 ->(源码优化)-> 中间代码 ->(代码生成)-> 目标机器代码 ->(目标代码优化)-> 最终目标代码


12、(1)、classB(classA a) {ma =a;}

(2)、classB(classA a) : mA(a){}

通常情况下,(2)比(1)的效率高、

分析:第一种先调用a的默认构造函数,再调用operator =赋值函数;第二种直接调用复制构造函数。


第一个就是调用构造函数,再赋值一次,第二个就是调用拷贝构造函数,直接初始化列表来进行构造(也就是:mA(a))。这就是初始化列表,很方便。而且初始化列表的顺序只和变量声明的顺序有关