首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++常量用法说明

C++常量用法说明
EN

Stack Overflow用户
提问于 2011-04-09 01:33:34
回答 12查看 58.1K关注 0票数 105
代码语言:javascript
复制
const int* const Method3(const int* const&) const;

有人能解释一下每个const的用法吗?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2011-04-09 01:36:06

请阅读:https://isocpp.org/wiki/faq/const-correctness

最后的const表示函数Method3不修改其类的不可变成员。

const int* const表示指向常量int的常量指针:即指向不能更改的int的指针: that和const int&之间的唯一区别是它可以为null

const int* const&表示对指向常量int的常量指针的引用。通常指针不是通过引用传递的;const int* &更有意义,因为它意味着指针可以在方法调用期间更改,这将是我看到通过引用传递指针的唯一原因,const int* const&在所有意图和目的上都与const int* const相同,只是它的效率可能较低,因为指针是普通的旧数据类型,通常这些类型应该通过值传递。

票数 81
EN

Stack Overflow用户

发布于 2011-04-09 01:41:24

如果您将其重写为完全等效的,则更容易理解

代码语言:javascript
复制
// v───v───v───v───v───v───v───v───v───v───v───v─┬┐
//                                               ││
//  v──#1    v─#2             v──#3    v─#4      #5
   int const * const Method3(int const * const&) const;

然后从右向左阅读。

#5说明左边的整个函数声明是const,这意味着这必须是一个成员函数,而不是一个自由函数。

#4表示指向左侧的指针为const (不能更改为指向其他地址)。

#3表示左侧的intconst (不能更改为不同的值)。

#2表示指向左侧的指针是const

#1说明左边的intconst

综合起来,您可以将其读作一个名为Method3const成员函数,该函数接受对指向int const (如果愿意,也可以是const int )的const指针的引用,并返回指向int const (const int)的const指针。

(注:#2 is entirely superfluous。)

票数 110
EN

Stack Overflow用户

发布于 2011-04-09 01:39:24

首先,const T等同于T const

因此,const int* const等同于int const * const

当读取包含大量const标记和指针的表达式时,始终尝试从右到左读取它们(在应用上面的转换之后)。因此,在本例中,返回值是指向常量int的常量指针。将指针本身设为const在这里没有任何意义,因为返回值不是可以修改的左值。然而,将指针对象设为const可以保证调用者不能修改Method3返回的int (或int数组)。

const int*const&变为int const*const&,因此它是指向常量int的常量指针的引用。通过引用male传递常量指针也是没有意义的-你不能修改引用的值,因为指针是const的,引用和指针占用相同的存储空间,所以也不会节省任何空间。

最后一个const表示该方法不修改this对象。方法体中的this指针将具有(理论上)声明T const * const this。这意味着const T*对象将能够调用T::Method3()

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5598703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档