【C++同步练习】C++入门

🫧个人主页:小年糕是糕手

💫个人专栏:《C++》《C++同步练习》《数据结构》《C语言》

🎨你不能左右天气,但你可以改变心情;你不能改变过去,但你可以决定未来!



目录

一、命名空间

二、缺省参数

三、函数重载

四、引用

五、inline

六、nullptr


一、命名空间

知识回顾:

  1. 本质:一个 "名字容器",隔离不同模块的标识符(变量、函数、类等)。
  2. 核心目的 :避免命名冲突(比如两个库都有 print() 函数,用命名空间区分)。
  3. 基本用法
    • 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{ };定义自己新的命名空间

二、缺省参数

知识回顾:

  1. 本质:函数定义时给参数指定默认值,调用时可省略该参数。
  2. 核心目的:简化函数调用,增强函数灵活性(同一函数适配不同传参场景)。
  3. 基本用法
    • 定义函数时写 类型 参数名=默认值(如 void func(int a=10) { ... });
    • 调用时,可传参(func(20))或省略(func(),自动用默认值 10)。
  4. 规则
    • 缺省参数需从右往左连续设置(不能中间空着);
    • 同一函数的缺省参数不能多次定义(声明和定义只能一处指定)。
    • 给的缺省参数要从左至右依次赋值
      1、下面关于C++缺省参数描述错误的是()

A.缺省参数是声明或定义函数时为函数的参数指定一个默认值.

B.在调用有缺省参数的函数时,如果没有指定实参则采用该默认值,否则使用指定的实参

C.C和C++都支持缺省参数

D.全缺省就是参数全部给缺省值,半缺省就是缺省一半的值

答案:CD

解析:

A:缺省参数就是给出的函数参数的默认值

B:很明显,这是给出缺省值的意义所在

C:纯C语言,即.c文件,函数不支持缺省参数,C++即.cpp文件支持

D:半缺省不能随便缺省一半,必须从右往左缺省,否则编译出错

三、函数重载

知识回顾:

  1. 本质:同一函数名对应多个 "参数列表不同" 的函数实现,是同名函数的多态形式。
  2. 核心目的:简化函数调用(不用记多个函数名),让同名函数适配不同参数场景。
  3. 基本用法
    1. 定义多个函数名相同、参数列表(类型 / 个数 / 顺序)不同的函数;
    2. 调用时,编译器自动根据传入参数匹配对应版本(如add(1,2)匹配 int 版,add(1.5,2.5)匹配 double 版)。
  4. 规则
    1. 返回值类型不影响重载匹配;
    2. 避免与缺省参数混用,防止出现匹配歧义。
      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不支持函数重载

四、引用

知识回顾:

  1. 本质:变量的 "别名",与原变量共享同一块内存空间,不额外占用存储资源。
  2. 核心目的:简化指针操作、避免数据拷贝(提升效率),同时安全地传递函数参数 / 返回值。
  3. 基本用法
    1. 定义格式:类型& 引用名 = 原变量(如int a=10; int& b=a;,b 是 a 的别名);
    2. 必须在定义时初始化(不能存在 "空引用"),初始化后不可修改指向其他变量。
  4. 规则
    1. 对引用的操作等价于对原变量的操作(如b=20会使 a 的值同步变为 20);
    2. 常引用(const 类型&)可绑定临时值 / 常量(如const int& c=5;),且无法通过引用修改绑定的值;
    3. 引用不能直接绑定到不同类型的变量(需显式类型转换时除外)。
      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

知识回顾:

  1. 本质:编译器将函数调用处直接替换为函数体代码的 "特殊函数",避免函数调用的开销。
  2. 核心目的:提升小函数(如简单计算、取值)的执行效率,平衡代码复用与性能。
  3. 基本用法
    1. 定义时在函数前加inline关键字(如inline int add(int a, int b) { return a+b; });
    2. 直接像普通函数一样调用(如int c = add(1,2);),编译器会尝试在调用处展开代码。
  4. 规则
    1. inline是 "建议" 而非强制,编译器可根据函数复杂度(如包含循环、递归)忽略内联请求;
    2. 内联函数的定义通常需放在头文件中(避免链接错误);
    3. 不适合复杂 / 长函数(会导致代码膨胀,反而降低性能)。
      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,也会被编译器忽略,故错误

六、nullptr

知识回顾:

  1. 本质:C++11 引入的强类型空指针常量,专门用于表示 "空指针",区别于 NULL。
  2. 核心目的 :解决 NULL 本质是 (void*)0 导致的类型歧义(如重载函数匹配错误),让空指针表示更精准、安全。
  3. 基本用法
    • 直接用于初始化指针或给指针赋值(如int* p = nullptr; char* q = nullptr;);
    • 替代 NULL,避免类型转换带来的问题(如if (p == nullptr) 判断指针是否为空)。
  4. 规则
    • nullptr 类型是 nullptr_t,可隐式转换为任意指针类型,但不能转换为非指针类型(如 int);
    • 优先使用 nullptr 而非 NULL(C++11 及以上标准),兼容所有指针类型,无歧义;
    • NULL 在 C++ 中通常定义为 0(void*)0,可能导致重载匹配错误(如同时有 func(int)func(int*) 时,func(NULL) 会匹配 func(int))。

注:这篇博客以及这个专栏是帮助大家同步学习C++所开的另一个独立的专栏文章,希望大家学完C++专栏相关内容再来同步学习这部专栏加强巩固


相关推荐
Bdygsl43 分钟前
数字图像处理总结 Day 1
人工智能·算法·计算机视觉
北郭guo44 分钟前
垃圾回收底层原理【深入了解】
java·jvm·算法
报错小能手1 小时前
数据结构 链式队列
数据结构·算法
Octhexis1 小时前
LC191 位1的个数
算法
Lethehong1 小时前
openGauss在教育领域的AI实践:基于Java JDBC的学生成绩预测系统
java·开发语言·人工智能·sql·rag
报错小能手1 小时前
数据结构 链栈
数据结构
LDG_AGI1 小时前
【推荐系统】深度学习训练框架(六):PyTorch DDP(DistributedDataParallel)数据并行分布式深度学习原理
人工智能·pytorch·分布式·python·深度学习·算法·spark
繁华似锦respect1 小时前
C++ 设计模式之工厂模式详细介绍
java·linux·c++·网络协议·设计模式
零匠学堂20251 小时前
OfficeOnlineServer文件在线浏览方案之OWA部署方法
开发语言·officeonline