一、static(静态)变量有什么作用?
答:在C语言中,关键字static的意思是静态,它有3个明显的作用:
1. 在函数体内,静态变量具有“记忆功能”,即一个被声明为静态的变量在这一函数被调用的过程中其值保持不变。
2. 在模块内(函数体外),它的作用域范围是有限的,即如果一个变量被声明为静态的,那么该变量可以被模块内的所有函数访问,但是不能被模块外的其它函数访问。它是一个本地的全局变量,如果一个函数被声明为静态,那么该函数与普通函数作用于不同,其作用域仅在本文件中,它只可被这一模块的其它函数调研,不能被模块外的其它函数调用,也就是说这个函数被限制在声明它的模块的本地范围内使用。
3. 内部函数应该在当前源文件中声明和定义,对于可在当前源文件以外使用的函数,应该在头一个文件中声明,使用这些函数的源文件要包含这个头文件。
具体而言,static全局变量和普通全局变量的区别在于static全局变量只初始化一次,这样做的目的是为了防止在其他文件但愿中被引用。Static局部变量和普通局部变量的区别在于static局部变量只被初始化一次,下一次的运算依据是上一次的结果值。Static()函数与普通函数的区别在于作用域不一样,static(函数)只在一个源文件中有效,不能被其他源文件使用。
C++中,在类内数据成员的声明前面加上关键字static,该数据成员就是类内的静态数据成员。静态数据成员有以下特点:
1. 对于非静态数据成员,每个类对象都有自己的复制品,而静态数据成员被当做类的成员,无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一个复制品,由该类的所有对象共享访问。
2. 静态数据成员存储在全区数据区,定义时要分配空间,所以不能在类声明中定义。
3. 静态数据成员和普通成员函数一样遵从public、PRotected、private访问规则。
4. static成员变量的初始化是在类外,此时不能再带上static的关键字。Private、protected的static成员虽然可以在类外初始化,但是不能再类外被访问。
5. 类的静态数据成员必须初始化,因为它是在程序初始化的时候分配的。
与全局变量相比,使用静态数据成员的有以下两个优势:
1. 静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其他全局名字冲突的可能性。
2. 可以实现信息隐藏。静态数据成员可以是private成员,而全局变量不能。
对于所有类的对象(不仅仅是静态对象),初始化都只有一次,而由于静态变量具有“记忆”功能,初始化后,一直没有被销毁,而是保存在内存区域中,所以不会再次初始化。
二. const 有哪些作用?
答:常类型也称const类型,是指使用类型修饰符const说明的类型。常类型的变量或对象的值是不能被更新的。
一般而言,const有以下几个方面的作用:
1. 定义const常量,具有不可变性。
2. 进行类型检查,使编译器对处理内容有更多的了解,消除一些隐患。
3. 保护被修饰的东西,防止被意外的修改,增强程序的健壮性。
4. 节省空间,避免不必要的内存分配。
5. 提高程序的效率。编译器通常不为普通的const常量分配存储空间,而是将它们保存在符号中,这使得它成为一个编译期间的常量,没有存储与读内存的操作,使得它效率提高。
三.什么是常引用?
答:常引用叶城const引用。引入常引用是为了避免在使用变量的引用时,在毫不知情的情况下改变了变量的值,从而引起程序错误。常引用主要用于定义一个普通变量的只读属性的别名,作为函数的传入形参,避免在实参调用函数中被意外的改变。
如果既要利用引用提高程序的效率,又要保护传递给函数的数据在函数中不被改变,就应该使用常引用。常引用的主要用途有:
1. 用作普通变量的只读别名。
2. 用于函数的形参。
四 static 关键字至少有下列n 个作用:
答:(1)函数体内static 变量的作用范围为该函数体,不同于auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)在模块内的static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)在模块内的static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
(4)在类中的static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
(5)在类中的static 成员函数属于整个类所拥有,这个函数不接收this 指针,因而只能访问类的static 成员变量。
五. const 关键字至少有下列n 个作用:
答:(1)欲阻止一个变量被改变,可以使用const 关键字。在定义该const 变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;
(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;
(3)在一个函数声明中,const 可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;
(4)对于类的成员函数,若指定其为const 类型,则表明其是一个常函数,不能修改类的成员变量;
(5)对于类的成员函数,有时候必须指定其返回值为const 类型,以使得其返回值不为“左值”.
六. C++中为什么用模板类。
答:(1)可用来创建动态增长和减小的数据结构
(2)它是类型无关的,因此具有很高的可复用性。
(3)它在编译时而不是运行时检查数据类型,保证了类型安全
(4)它是平台无关的,可移植性
(5)可用于基本数据类型.
七. 程序什么时候应该使用线程,什么时候单线程效率高。
答:1.耗时的操作使用线程,提高应用程序响应
2.并行操作时使用线程,如C/S 架构的服务器端并发线程响应用户的请求。
3.多CPU 系统中,使用线程提高CPU 利用率
4.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
其他情况都使用单线程。
八. 什么是“引用”?申明和使用“引用”要注意哪些问题?
答:引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。
九 将“引用”作为函数参数有哪些特点?
答:(1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。
(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。
(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易使用,更清晰。
十.在什么时候需要使用“常引用”?
答:如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。常引用声明方式:const 类型标识符&引用名=目标变量名.
新闻热点
疑难解答
图片精选