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没体现出效果,原因有两个:
你没有尝试修改返回的临时指针
你只是把返回的指针值赋值给c.i,并没有去修改返回的那个临时指针的指向(比如写c.X() = &x;)。而在C++中,临时右值本身就不允许被赋值——不管有没有const修饰,c.X() = &x;都是非法代码。所以这个const在你的用法里没起到约束作用。成员变量
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
相关产品推荐
相关产品推荐

