C++ const 关键字问题
有一个类 Edge:
class Edge {};
下面代码,我的理解是,有一个指向 b
的地址引用的指针变量 a
。
Edge b;
Edge* const &a = &b;
那么有个疑问,const 的位置能否提前(C++ 中是否存在这种语法),类似:
const Edge* &a = &b; // 这段代码我测试是编译不过的
const Edge* const &a = &b; // 但是如果后面的 const 保留就可以编译过了
我没有搜到相关的资料,希望能够得到各位道友指点解惑。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
从右往左读,*做分割。
int const *
是指向 const int 的指针。int * const
是const 指针指向int。int const * const *
是指向(指向const int 的 const 指针)的指针。const
在*
左边的时候修饰的是左边的类型,const
在*
右边的时候修饰的是指针。特地来回复一下博主,这个问题我也是被困惑已久,但是在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无返回的函数指针。
结尾
这一法则可以用来判断变量的类型,也可以用来分辨函数指针之类的(个人从这里总结出来),博主可以试一下,还是蛮有意思的
《C++ Primer》是本好书,可以仔细读读。
你的问题可以阅读:
讲的都是 const 指针和指向 const 的指针,应该会有所帮助