MST

星途 面试题库

面试题:C++ 模板参数中const的基础应用

假设有一个模板函数如下:template <typename T> void func(const T& param) { /* 函数体 */ }。请解释这里模板参数中const的作用。如果T是一个自定义类类型,并且该类有成员函数修改成员变量,在func函数中调用这些成员函数会有什么问题?
45.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 模板参数中const的作用
    • const修饰param,表示func函数内部不会修改传入的参数param。这样做可以防止在函数内部意外修改传入的对象,提高代码的安全性和可维护性。同时,const引用可以接受临时对象,使得函数可以处理右值(如字面量、函数返回的临时对象等),增强了函数的通用性。
  2. 如果T是自定义类类型且类有修改成员变量的成员函数,在func函数中调用这些成员函数的问题
    • func函数中,paramconst引用,意味着param被视为一个常量对象。对于const对象,只能调用const成员函数。如果尝试调用修改成员变量的非const成员函数,会导致编译错误。因为这些非const成员函数有修改对象状态的潜在可能,而const对象的状态是不允许被修改的。例如:
class MyClass {
public:
    void modifyVariable() { // 非const成员函数
        data = 42;
    }
private:
    int data;
};

template <typename T> void func(const T& param) {
    // 以下调用会报错,因为param是const对象,不能调用非const成员函数
    // param.modifyVariable(); 
}