C++ const 关键字问题

发布于 2022-09-13 01:08:50 字数 434 浏览 22 评论 0

有一个类 Edge:

class Edge {};

下面代码,我的理解是,有一个指向 b 的地址引用的指针变量 a

Edge b;
Edge* const &a = &b;

那么有个疑问,const 的位置能否提前(C++ 中是否存在这种语法),类似:

const Edge* &a = &b;        // 这段代码我测试是编译不过的
const Edge* const &a = &b;  // 但是如果后面的 const 保留就可以编译过了

我没有搜到相关的资料,希望能够得到各位道友指点解惑。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烟沫凡尘 2022-09-20 01:08:50

从右往左读,*做分割。

int const * 是指向 const int 的指针。

int * const 是const 指针指向int。

int const * const * 是指向(指向const int 的 const 指针)的指针。

const* 左边的时候修饰的是左边的类型,const* 右边的时候修饰的是指针。

相思故 2022-09-20 01:08:50

特地来回复一下博主,这个问题我也是被困惑已久,但是在StackOverflow里看到的一篇文章我感觉很不错,在这里分享一下
首先发一下原帖小问题

判断一个变量的类型,可以使用螺旋法则根据下面三个步骤进行

步骤

1.
首先从你要解释的变量开始,顺时针移动
当遇到【x】或者【】时候,解释为有x个元素的数组或者未定义元素个数的数组
当遇到(type1,type2)类型的时候,解释为接收type1和type2参数的且返回…的一个函数
当遇到*时,解释为一个指向…类型的指针
2.
顺时针进行这个步骤直到最后一个判断完成
3.
总是先解决函数中的问题

空说无意义,我们来看一些例子(摘自上面链接里的文章)

例子

例一
先从str入手,顺时针到达【10】,即解释为str是一个有十个元素的数组,这个数组元素是一个指向char类型的指针,因此可以理解为指针数组

例二
先从fp入手,顺时针到达自己的括号,跳过,然后是一个指针,即理解为fp是一个指针,再顺时针转向一个括号(int,float),这个意味着指针指向的元素是一个接收int和float类型的函数,且这个函数返回值是char*类型。
总结一下,fp是一个指向函数指针,指向的函数具有如上的特性。

例三
首先从signal入手,顺时针转到(int,type),表示signal是一个接受两个参数的函数,参数一为int类型,参数二为一个函数指针,这个函数指针接收int类型而且没有返回值(其实重复上述步骤即可得知参数二的类型)。接着回到总函数,这个接受两个参数的signal将会返回一个指针,指针指向一个函数指针,这个函数指针接收int类型,且没有返回值。
综上所述,signal是一个函数,这个函数接受两个参数,一个为int,一个为接收int无返回的函数指针,并且signal的返回值是一个接收int无返回的函数指针。

结尾

这一法则可以用来判断变量的类型,也可以用来分辨函数指针之类的(个人从这里总结出来),博主可以试一下,还是蛮有意思的

得不到的就毁灭 2022-09-20 01:08:50

《C++ Primer》是本好书,可以仔细读读。

你的问题可以阅读:

  • 第 3 版 3.5 const 限定修饰符
  • 第 5 版 7.3.5 指针和 const

讲的都是 const 指针和指向 const 的指针,应该会有所帮助

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文