今天刷题看到这样一道题 发现对const在函数中的修饰还不懂 就去查了一下资料 下面做一个分享记录
- 题目
第 5 题(单选题)
题目名称:
假设 AA 是一个类, AA* abc () const 是该类的一个成员函数的原型。
若该函数返回 this 值,当用 x.abc ()调用该成员函数后, x 的值是( )
题目内容:
**A** .可能被改变
**B** .已经被改变
**C** . 受到函数调用的影响
**D** .不变
- 题解
在这个函数原型 AA* abc () const 中,const 关键字修饰的是成员函数,表示这个函数不会修改它所属的对象的状态。这意味着在这个函数中,this 指针是指向常量的指针,因此不能通过 this 指针修改对象的任何数据成员。也就是说,即使这个函数返回 this 指针,调用该函数也不会改变对象的状态,所以 x 的值不会改变。
情况一 :const 关键字紧跟在函数参数类型后面
如果 const 关键字紧跟在函数参数类型后面,那么它表示该参数是常量,即在函数内部不能改变该参数的值。例如,void func(const int param) 中的 param 参数在 func 中是不可变的。
void printArray(const int* arr, int size) {
// 这行代码将导致编译错误,因为 arr 是 const 指针
// arr[0] = 100;
for(int i = 0; i < size; i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
printArray(arr, 5);
return 0;
}
在上述例子中,printArray 函数的参数 arr 是一个常量指针,指向的元素不能被修改。如果你试图修改 arr 指向的值,编译器会给出错误。
情况二:const 关键字紧跟在函数参数类型后面
如果 const 关键字紧跟在函数的参数列表之后,那么它表示这个函数是一个常量成员函数,即这个函数不会改变它所属的对象的状态。例如,void MyClass::func() const 表示 func 不会改变 MyClass 的任何数据成员
const 关键字在函数参数列表后面,表示该函数是一个常量成员函数,不能修改它所属的对象的状态。例如:
class MyClass {
private:
int value;
public:
MyClass(int val) : value(val) {}
int getValue() const {
// 这行代码将导致编译错误,因为 this 是指向 const 的指针
// value = 100;
return value;
}
};
int main() {
MyClass obj(5);
std::cout << obj.getValue() << std::endl;
return 0;
}
在上述例子中,getValue 是一个常量成员函数,它不能修改它所属的对象的任何数据成员。如果你试图在 getValue 函数中修改 value,编译器会给出错误
情况三:const 关键字用在函数返回值类型前
如果 const 关键字用在函数返回值类型前,那么它表示函数返回的是一个常量值,不能对这个返回值进行修改。例如,const int func() 返回的是一个常量整数,不能对这个返回值进行赋值操作。
当你在C++中将 const 关键字用于函数返回值类型时,函数返回的就是一个常量,无法修改。下面给出一个例子
class MyClass {
private:
int value;
public:
MyClass(int val) : value(val) {}
const int getValue() const {
return value;
}
};
int main() {
MyClass obj(5);
// 下面这行代码将导致编译错误,因为 getValue() 返回的是 const int
obj.getValue() = 10;
return 0;
}