cpp 中const class object(params); 和class const object(params);有什么区别?
时间: 2024-03-24 21:41:16 浏览: 20
在 C++ 中,这两种语法的区别在于 const 关键字的位置不同,它们分别表示:
1. `const class object(params);`:表示创建一个 const 对象,即该对象不能被修改。在这种情况下,const 修饰的是整个对象,即对象本身是一个常量。这意味着,该对象的成员变量和成员函数都不能被修改。
2. `class const object(params);`:表示创建一个常量对象的类类型限定符,即该对象的成员函数不能修改对象的状态。在这种情况下,const 修饰的是对象的类型,即对象的成员函数是常成员函数,不能修改对象的状态。
下面是一个示例代码:
```cpp
class MyClass {
public:
void setValue(int val) { value = val; }
int getValue() const { return value; }
private:
int value;
};
int main() {
const MyClass obj1(10); // 创建一个 const 对象
MyClass const obj2(20); // 创建一个常量对象的类类型限定符
// 对象的成员函数不能修改对象的状态
// obj1.setValue(20); // 错误,const 成员函数不能修改对象的状态
// obj2.setValue(30); // 错误,const 成员函数不能修改对象的状态
// 对象的成员变量不能被修改
int val1 = obj1.getValue(); // 正确,可以调用 const 成员函数来获取对象的成员变量
int val2 = obj2.getValue(); // 正确,可以调用 const 成员函数来获取对象的成员变量
// obj1.value = 20; // 错误,对象是 const 类型,不能修改成员变量
// obj2.value = 30; // 错误,对象是 const 类型,不能修改成员变量
return 0;
}
```
在上面的示例中,我们创建了两个对象 `obj1` 和 `obj2`,一个是 const 对象,一个是常量对象的类类型限定符。由于这两个对象都是常量,所以它们的成员变量均不能被修改,只能通过成员函数来获取它们的值。此外,这两个对象的成员函数也不能修改对象的状态,只能读取对象的成员变量。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)