1. int = 4;
(a++) = +a; //左侧不是一个有效变量,不能赋值
(++a) += (a++); // 真确可以赋值
2. 头文件中的ifndef/define/endif 干什么用?预处理
防止头文件被重复引用。
3. 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”声明?
答:函数和变量被C++编译后在符号库中的名字与C 语言的不同,被extern "C"修饰的变量和函数是按照C 语言方式编译和连接的。
由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。
4. switch()中不允许的数据类型是?
实型。
5. C++中为什么用模板类?
(1)可以用来创建动态增长和减小的数据结构
(2)它是类型无关的,因此具有很高的可复用性
(3)它在编译时而不是运行时检查数据类型,保证了类型安全
(4)它是平台无关的,可移植性
(5)可用于基本数据类型
6. 程序什么时候应该使用线程,什么时候单线程效率高。
(1)耗时的操作使用线程,提高应用程序响应。
(2)并行操作时使用线程,如C/S 架构的服务器端并发线程响应用户的请求。
(3)多CPU 系统中,使用线程提高CPU 利用率。
(4)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
其他情况都使用单线程。
7. 用户级线程和内核级线程比较。
(1)用户级线程利用线程库提供的创建、同步、调度和管理线程的函数来控制用户线程,
内核级线程需要内核的参与、有内核来创建、撤销和调度。
(2)用户级线程不需要占用内核的宝贵空间。
(3)用户级线程若有一个因I/O而处于等待状态则整个进程就处于等待状态,
内核级线程则有利于多处理器的并发,但却占用了更多的系统开支。
8. 给结构体成员赋值
struct A {
int a;
int b;
int c;
};
int main (void)
{
// 可以用其点成员名字给其成员赋值
struct A a = { .a = 1, .b = 2, .c = 3 };
return 0;
}