面试题答案
一键面试-
代码通过编译的原因:
- C++ 允许函数重载,即同一作用域内的多个函数可以具有相同的名字,但形参列表不同。在上述代码中,
process
函数有两个重载版本,一个接受const MyClass&
类型的参数,另一个接受MyClass&
类型的参数。 - 当调用
process
函数时,编译器会根据实参的类型来选择合适的重载版本。
- C++ 允许函数重载,即同一作用域内的多个函数可以具有相同的名字,但形参列表不同。在上述代码中,
-
process
函数两个重载版本的调用情况:void process(const MyClass& obj)
的调用情况:- 当实参是
const MyClass
类型的对象,如const MyClass cobj(10); process(cobj);
时,会调用这个版本。因为cobj
是常量对象,只能绑定到const
引用。
- 当实参是
void process(MyClass& obj)
的调用情况:- 当实参是
MyClass
类型的非常量对象,如MyClass obj(20); process(obj);
时,会调用这个版本。非常量对象既可以绑定到const
引用,也可以绑定到非const
引用,但编译器会优先选择最匹配的版本,即非const
引用版本。
- 当实参是
-
按常量引用传递在函数重载解析中的作用:
- 区分常量和非常量对象的处理:通过提供接受
const
引用和非const
引用的重载函数,可以对常量对象和非常量对象进行不同的处理。这在实际应用中很有用,例如,对于常量对象可能只进行读取操作,而对于非常量对象可能会进行修改操作。 - 保持对象的常量性:当函数接受
const
引用时,函数内部不能修改对象的成员变量(除非成员变量被声明为mutable
)。这有助于保证对象的常量性,使得代码更加安全和可维护。同时,这也使得编译器能够更准确地进行类型检查和函数重载解析,提高代码的可靠性。
- 区分常量和非常量对象的处理:通过提供接受