面试题答案
一键面试1. 对指向const修饰函数指针的影响
- 原理:当函数被
const
修饰时,意味着该函数承诺不会修改调用它的对象的成员变量(对于成员函数而言)。指向const
修饰函数的指针也必须遵循这种“只读”约束,即不能通过该指针调用会修改对象状态的函数。 - 代码示例:
class MyClass {
private:
int data;
public:
MyClass(int value) : data(value) {}
// const修饰的成员函数
void printData() const {
std::cout << "Data: " << data << std::endl;
}
};
int main() {
MyClass obj(10);
// 定义指向const修饰函数的指针
void (MyClass::*constFuncPtr)() const = &MyClass::printData;
// 使用指针调用函数
(obj.*constFuncPtr)();
return 0;
}
2. 对以该函数为基础构建的函数对象的影响
- 原理:函数对象(仿函数)本质上是一个重载了
()
运算符的类。如果这个类的()
运算符被定义为const
,那么该函数对象在调用时,同样不能修改其内部状态(除非成员变量用mutable
修饰)。这与const
修饰的成员函数概念类似,都是为了保证对象状态的不可变性。 - 代码示例:
class PrintDataFunctor {
private:
int data;
public:
PrintDataFunctor(int value) : data(value) {}
// const修饰的函数调用运算符
void operator()() const {
std::cout << "Data in functor: " << data << std::endl;
}
};
int main() {
PrintDataFunctor functor(20);
// 使用函数对象
functor();
return 0;
}
通过上述分析和代码示例,可以清晰看到const
修饰函数对指针和函数对象的影响,它们都遵循const
所规定的不可修改对象状态的原则。