面试题答案
一键面试-
分析代码片段中
const
的作用及变量可修改性:int num = 10;
:定义一个普通的int
类型变量num
,其值可以修改。const int* ptr1 = #
:const
的作用:修饰指针所指向的对象,即指针ptr1
指向的int
类型对象是常量。- 可修改性:
num
本身的值可以修改(因为它定义时不是const
),ptr1
可以指向其他int
类型变量,但不能通过ptr1
修改其所指向的值。例如*ptr1 = 20;
会报错。
int* const ptr2 = #
:const
的作用:修饰指针本身,即指针ptr2
是常量。- 可修改性:
ptr2
不能再指向其他int
类型变量,但可以通过ptr2
修改num
的值。例如*ptr2 = 30;
是合法的,而ptr2 = &anotherNum;
会报错。
const int* const ptr3 = #
:const
的作用:第一个const
修饰指针所指向的对象,第二个const
修饰指针本身。- 可修改性:
ptr3
不能再指向其他int
类型变量,也不能通过ptr3
修改其所指向的值。
const int& ref1 = num;
:const
的作用:修饰引用所绑定的对象,即引用ref1
绑定的int
类型对象是常量。- 可修改性:不能通过
ref1
修改num
的值,但num
本身的值可以修改(因为它定义时不是const
)。例如ref1 = 40;
会报错。
int& const ref2 = num;
:- 这行代码不正确。原因是引用本身一经初始化就不能再绑定到其他对象,所以不需要用
const
修饰引用本身。const
修饰引用通常是修饰引用所绑定的对象,即const int& ref = num;
这种形式。
- 这行代码不正确。原因是引用本身一经初始化就不能再绑定到其他对象,所以不需要用
-
在函数参数传递中,使用
const
指针和const
引用作为参数的好处和区别:- 好处:
- 保护数据:使用
const
指针和const
引用作为参数,可以防止函数内部意外修改传入的参数值,保护了调用者的数据。 - 提高效率:对于较大的对象,通过引用或指针传递可以避免对象的拷贝,提高函数调用效率。使用
const
修饰可以明确告知调用者函数不会修改传入的对象。
- 保护数据:使用
- 区别:
- 语法和语义:指针可以为空,而引用必须在初始化时绑定到一个对象,并且之后不能再绑定到其他对象。
const
指针可以重新指向其他对象(如果指针本身不是const
),而const
引用一旦绑定就无法改变绑定对象。 - 使用场景:如果需要表示一个可能为空的对象引用,指针更合适;如果确定引用会始终绑定到一个有效的对象,并且不需要重新绑定,引用更简洁且使用起来更安全(因为不存在空引用)。在函数参数传递中,如果参数可能为
nullptr
,使用const
指针;如果参数肯定是有效的对象,使用const
引用更自然。
- 语法和语义:指针可以为空,而引用必须在初始化时绑定到一个对象,并且之后不能再绑定到其他对象。
- 好处: