You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中int* const类型返回值函数的const作用是什么?

解析int* const X()中const的实际作用

首先得明确C++里指针的const修饰规则:

  • int* const p:指针本身是const的——不能修改p的指向,但可以通过p修改指向的int值;
  • const int* p:指向的内容是const的——可以修改p的指向,但不能通过p修改指向的int值。

回到你的代码,int* const X()里的const,是修饰函数返回的指针本身,也就是返回的是一个int* const类型的临时指针。但在你的测试场景里,这个const没体现出效果,原因有两个:

  1. 你没有尝试修改返回的临时指针
    你只是把返回的指针值赋值给c.i,并没有去修改返回的那个临时指针的指向(比如写c.X() = &x;)。而在C++中,临时右值本身就不允许被赋值——不管有没有const修饰,c.X() = &x;都是非法代码。所以这个const在你的用法里没起到约束作用。

  2. 成员变量i的const属性和函数返回值无关
    你修改c.i的指向(c.i = &x),操作的是类的成员变量i本身——它被声明为int*(非const指针),自然可以随意修改指向。函数X()的返回值只是拷贝了i的地址,和原成员变量的const属性完全无关。

那返回int* const类型的函数到底有什么意义?
只有当函数返回的是左值引用时,这个const才会发挥作用。比如:

class Test
{
public:
    int* i = nullptr;
    int* const& X() // 返回const指针的引用
    {
        return i;
    }
};

这时如果写c.X() = &x;就会编译报错——因为返回的是int* const的引用,不允许修改指针的指向。这种场景下,const才能真正限制调用者修改返回的指针的指向。

另外你提到的“禁止修改i的指向”,确实只能通过把i声明为int* const i实现——这是直接约束成员变量本身的属性,和函数返回值的const无关。

内容的提问来源于stack exchange,提问作者user20295136

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:55:24