知识回顾:
print() 函数,用命名空间区分)。namespace 命名空间名 { ... } 定义;命名空间名::标识符 访问内部成员(如 std::cout);using namespace 命名空间名 简化访问(避免重复写前缀,但全局使用可能再次引入冲突)。1、下面关于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{ };定义自己新的命名空间
知识回顾:
类型 参数名=默认值(如 void func(int a=10) { ... });func(20))或省略(func(),自动用默认值 10)。1、下面关于C++缺省参数描述错误的是() A.缺省参数是声明或定义函数时为函数的参数指定一个默认值. B.在调用有缺省参数的函数时,如果没有指定实参则采用该默认值,否则使用指定的实参 C.C和C++都支持缺省参数 D.全缺省就是参数全部给缺省值,半缺省就是缺省一半的值 答案:CD 解析: A:缺省参数就是给出的函数参数的默认值 B:很明显,这是给出缺省值的意义所在 C:纯C语言,即.c文件,函数不支持缺省参数,C++即.cpp文件支持 D:半缺省不能随便缺省一半,必须从右往左缺省,否则编译出错
知识回顾:
add(1,2)匹配 int 版,add(1.5,2.5)匹配 double 版)。1、以下不是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:函数重载不能依靠返回值的不同来构成重载,因为调用时无法根据参数列表确定调用哪个重载函数,故错误
2、下面关于函数重载描述错误的是() A.构成函数重载的条件是函数名相同就可以 B.重载的函数参数可以相同 C.重载的函数返回值可以相同 D.C和C++都支持函数重载 答案:ABD 解析: A:函数名相同只是函数重载的条件之一 B:重载函数必须参数列表有所不同(包括参数类型和参数个数) C:重载函数不依靠返回值来区分,所以返回值可以相同 D:C不支持函数重载
知识回顾:
类型& 引用名 = 原变量(如int a=10; int& b=a;,b 是 a 的别名);b=20会使 a 的值同步变为 20);const 类型&)可绑定临时值 / 常量(如const int& c=5;),且无法通过引用修改绑定的值;1、关于引用以下说法错误的是()(阿里巴巴2015笔试题) A.引用必须初始化,指针不必 B.引用初始化以后不能被改变,指针可以改变所指的对象 C.不存在指向空值的引用,但是存在指向空值的指针 D.一个引用可以看作是某个变量的一个“别名” E.引用传值,指针传地址 F.函数参数可以声明为引用或指针类型 答案:E 解析: A:引用必须初始化,必须在定义引用时明确引用的是哪个变量或者对象,否则语法错误,指针不初始化时值为随机指向 B:引用一旦定义时初始化指定,就不能再修改,指针可以改变指向 C:引用必须初始化,不能出现空引用,指针可以赋值为空 D:简单粗暴的引用理解可以理解为被引用变量或对象的"别名" E:引用表面好像是传值,其本质也是传地址,只是这个工作由编译器来做,所以错误 F:函数调用为了提高效率,常使用引用或指针作为函数参数传递变量或对象
2、“引用”与指针的区别是什么() A.指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指 针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作 B.引用通过某个引用变量指向一个对象后,对它所指向的变量间接操作。程序中使用引用,程序的可读性差;而指针本身就是目标变量的别名,对指针的操作就是对目标变量的操作 C.指针比引用更节省存储空间 D.以上都不正确 答案:A 解析: A:指针是间接操作对象,引用时对象的别名,对别名的操作就是对真实对象的直接操作,故正确 B:很显然,答案刚好相反 C:指针需要开辟空间,引用不需要开辟空间,故错误 D:A正确,故D错误
3、关于引用与指针的区别,下面叙述错误的是() A.引用必须被初始化,指针不必 B.指针初始化以后不能被改变,引用可以改变所指的对象 C.删除空指针是无害的,不能删除引用 D.不存在指向空值的引用,但是存在指向空值的指针 答案:B 解析: A:引用必须定义时初始化,指针不初始化其值为随机指向 B:指针可以改变指向,引用不能,故错误 C:空指针没有任何指向,删除无害,引用是别名,删除引用就删除真实对象 D:引用必须初始化,所以不能为空引用,指针可以
知识回顾:
inline关键字(如inline int add(int a, int b) { return a+b; });int c = add(1,2);),编译器会尝试在调用处展开代码。inline是 “建议” 而非强制,编译器可根据函数复杂度(如包含循环、递归)忽略内联请求;1、在()情况下适宜采用 inline 定义内联函数 A.函数体含有循环语句 B.函数体含有递归语句 C.函数代码少、频繁调用 D.函数代码多,不常调用 答案:C 解析: A:含有循环语句,违背内联函数的本质 B:含有递归语句,违背内联函数的本质 C:尽可能把代码短小,频繁调用的函数设置为内联函数 D:含代码量大,违背内联函数的本质 内联函数是一种建议,如果函数内部包括循环,递归,或者 代码量大且复杂,这些函数即使设置了内联函数,系统也不会当做内联函数来处理。
2、关于c++的inline关键字,以下说法正确的是() A.使用inline关键字的函数会被编译器在调用处展开 B.头文件中可以包含inline函数的声明 C.可以在同一个项目的不同源文件内定义函数名相同但实现不同的inline函数 D.递归函数也都可以成为inline函数 答案:C 解析: A:不一定,因为inline只是一种建议,需要看此函数是否能够成为内联函数 B:inline函数不支持声明和定义分离开,因为编译器一旦将一个函数作为内联函数处理,就会在调用位置展开,即该函数是没有地址的,也不能在其他源文件中调用,故一般都是直接在源文件中定义内联函数的 C:inline函数会在调用的地方展开,所以符号表中不会有inline函数的符号名,不存在链接冲突 D:比较长的函数,递归函数就算定义为inline,也会被编译器忽略,故错误
知识回顾:
(void*)0 导致的类型歧义(如重载函数匹配错误),让空指针表示更精准、安全。int* p = nullptr; char* q = nullptr;);if (p == nullptr) 判断指针是否为空)。nullptr_t,可隐式转换为任意指针类型,但不能转换为非指针类型(如 int);0 或 (void*)0,可能导致重载匹配错误(如同时有 func(int) 和 func(int*) 时,func(NULL) 会匹配 func(int))。注:这篇博客以及这个专栏是帮助大家同步学习C++所开的另一个独立的专栏文章,希望大家学完C++专栏相关内容再来同步学习这部专栏加强巩固