一、选择题
1、下面关于C++缺省参数描述错误的是( ) 【不定项缺省】(多选题)
A、缺省参数是声明或定义函数时为函数的参数指定一个默认值
B、在调用有缺省参数的函数时,如果没有指定实参则采用该默认值,否则使用指定的实参
C、C和C++都支持缺省参数
D、全缺省就是参数全部给缺省值,半缺省就是缺省一半的值
答案:C、D
解析:A、缺省参数就是给出的函数参数的默认值
B、很明显,这是给出缺省值的意义所在
C、纯C语言,即.c文件,函数不支持缺省参数,C++即.cpp文件支持
D、半缺省不能随便缺省一半,必须从右往左缺省,否则编译出错
2、以下不是double compare(int,int)的重载函数的是( ) (单选题)
A、int compare(double,double)
B、double compare(double,double)
C、double compare(double,int)
D、int compare(int,int)
答案:D
解析:A、重载必须是参数列表有所不同(包括个数和类型),所以参数类型不同,构成重载
B、参数类型不同,构成重载
C、参数类型不同,构成重载
D、函数重载不能依靠返回值的不同来构成重载,因为调用时无法根据参数列表确定调用哪个重载函数,故错误
3、下面关于函数重载描述错误的是( ) (多选题)
A、构成函数重载的条件是函数名相同就可以
B、重载的函数参数可以相同
C、重载的函数返回值可以相同
D、C和C++都支持函数重载
答案:A、B、D
解析:A、函数名相同只是函数重载的条件之一
B、重载函数必须参数列表有所不同(包括参数类型和参数个数)
C、重载函数不依靠返回值来区分,所以返回值可以相同
D、C不支持函数重载
4、“引用”与指针的区别是什么( ) (单选题)
A、指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作
B、引用通过某个引用变量指向一个对象后,对它所指向的变量间接操作。程序中使用引用,程序的可读性差;而指针本身就是目标变量的别名,对指针的操作就是对目标变量的操作
C、指针比引用更节省存储空间
D、以上都不正确
答案:A
解析:A、指针是间接操作对象,引用时对象的别名,对别名的操作就是对真实对象的直接操作, 故A正确
B、很显然,答案刚好相反
C、指针需要开辟空间,引用不需要开辟空间,故错误
5、关于引用与指针的区别,下面叙述错误的是( ) (单选题)
A、引用必须被初始化,指针不必
B、指针初始化以后不能被改变,引用可以改变所指的对象
C、删除空指针是无害的,不能删除引用
D、不存在指向空值的引用,但是存在指向空值的指针
答案:B
解析:A、引用必须定义时初始化,指针不初始化其值为随机指向
B、指针可以改变指向,引用不能,故错误
C、空指针没有任何指向,删除无害,引用是别名,删除引用就删除真实对象
D、引用必须初始化,所以不能为空引用,指针可以
6、关于引用以下说法错误的是( )。(单选题)
A、引用必须初始化,指针不必
B、引用初始化以后不能被改变,指针可以改变所指的对象
C、不存在指向空值的引用,但是存在指向空值的指针
D、一个引用可以看作是某个变量的一个“别名”
E、引用传值,指针传地址
F、函数参数可以声明为引用或指针类型
答案:E
解析:A、引用必须初始化,必须在定义引用时明确引用的是哪个变量或者对象,否则语法错误,指针不初始化时值为随机指向
B、引用一旦定义时初始化指定,就不能再修改,指针可以改变指向
C、引用必须出示化,不能出现空引用,指针可以赋值为空
D、简单粗暴的引用理解可以理解为被引用变量或对象的"别名"
E、引用表面好像是传值,其本质也是传地址,只是这个工作有编译器来做,所以错误
F、函数调用为了提高效率,常使用引用或指针作为函数参数传递变量或对象
7、下面关于C++命名空间描述错误的是( ) (单选题)
A、命名空间定义了一个新的作用域
B、std是C++标准库的命名空间
C、在C++程序中,命名空间必须写成using namespace std;
D、我们可以自己定义命名空间
答案:C
解析:A、命名空间主要解决名字冲突,其作用就是定义一个新的作用域
B、std是标准命名空间
C、还有std::xx 和using std::xx来使用标准库中的用法,所以不是必须写using namespace std
D、可以通过namespace space_name{};定义自己新的命名空间
8、在( )情况下适宜采用 inline 定义内联函数 (单选题)
A、函数体含有循环语句
B、函数体含有递归语句
C、函数代码少、频繁调用
D、函数代码多,不常调用
答案:C
解析:A、含有循环语句,违背内联函数的本质
B、含有递归语句,违背内联函数的本质
C、尽可能把代码短小,频繁调用的函数设置为内联函数
D、含代码量大,违背内联函数的本质
内联函数是一种建议,如果函数内部包括循环,递归,或者代码量大且复杂,这些函数即使设置了内联函数,系统也不会当做内联函数来处理。
9、关于c++的inline关键字,以下说法正确的是( ) (单选题)
A、使用inline关键字的函数会被编译器在调用处展开
B、头文件中可以包含inline函数的声明
C、可以在同一个项目的不同源文件内定义函数名相同但实现不同的inline函数
D、递归函数也都可以成为inline函数
答案:C
解析:A、不一定,因为inline只是一种建议,需要看此函数是否能够成为内联函数
B、 inline函数不支持声明和定义分离开,因为编译器一旦将一个函数作为内联函数处理, 就会在调用位置展开,即该函数是没有地址的,也不能在其他源文件中调用,故一般 都是直接在源文件中定义内联函数的
C、inline函数会在调用的地方展开,所以符号表中不会有inline函数的符号名,不存在链接 冲突.。(如果在同一个项目不同的.c文件定义同名的普通函数就会发生链接错误)
D、比较长的函数,递归函数就算定义为inline,也会被编译器忽略,故错误