c++指向常对象的指针
时间: 2023-12-28 18:05:26 浏览: 33
指向常对象的指针是指不能通过该指针来修改所指向的对象的值的指针。在C++中,可以通过在指针类型前加上const关键字来定义指向常对象的指针。具体实现方式如下:
```c++
const Time t1; // 定义常对象
const Time *p; // 定义指向常对象的指针
p = &t1; // 将指针指向常对象
```
在上述代码中,定义了一个常对象`t1`和一个指向常对象的指针`p`,并将指针指向常对象`t1`。由于`t1`是常对象,因此不能通过指针`p`来修改`t1`的值。
另外,还可以使用指向对象的常指针来实现指向常对象的指针。具体实现方式如下:
```c++
const Time t1; // 定义常对象
const Time * const p = &t1; // 定义指向常对象的指针变量
```
在上述代码中,定义了一个常对象`t1`和一个指向对象的常指针`p`,并将指针`p`指向常对象`t1`。由于指针`p`是指向对象的常指针,因此不能通过指针`p`来修改`t1`的值。
相关问题
区分指向常对象的指针
指向常对象的指针是指针变量的值所对应的内存单元的值是一个常量。这意味着该指针不能用来修改所指向的对象。在C++中,可以通过在指针类型前加const关键字来定义指向常对象的指针,例如:
```
const int* p; //p是一个指向常整型数的指针
```
在上面的例子中,p是一个指向常整型数的指针,这意味着p所指向的整型数不能被修改。如果尝试通过p来修改所指向的整型数,编译器会给出错误提示。
c++中如何知道this指针指向常对象
在C++中,如果一个类定义了常量成员函数,则该函数的this指针将自动成为指向常量的指针。这意味着该指针指向一个常对象,因为常对象的成员函数只能访问对象的常量数据成员。
例如,如果我们有以下类定义:
```
class MyClass {
int x;
public:
void foo() const { /*...*/ }
};
```
在foo()函数中,this指针将被自动识别为指向常量的指针。因此,我们可以在foo()函数中访问对象的成员数据,但不能修改它们。
如果我们有一个常对象,我们可以调用它的常量成员函数:
```
const MyClass obj;
obj.foo(); // 合法调用
```
但是,如果我们尝试调用一个非常量成员函数:
```
const MyClass obj;
obj.bar(); // 错误:obj是一个常量对象
```
编译器将会报错,因为我们试图通过一个常对象来调用一个非常量成员函数。
相关推荐
![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)