- 模板参数中
const
的作用:
const
修饰param
,表示func
函数内部不会修改传入的参数param
。这样做可以防止在函数内部意外修改传入的对象,提高代码的安全性和可维护性。同时,const
引用可以接受临时对象,使得函数可以处理右值(如字面量、函数返回的临时对象等),增强了函数的通用性。
- 如果
T
是自定义类类型且类有修改成员变量的成员函数,在func
函数中调用这些成员函数的问题:
- 在
func
函数中,param
是const
引用,意味着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();
}