首页 > 代码库 > [ C++ ] 理解const
[ C++ ] 理解const
一直不理解C++中的const的写法的区别, 和应该如何记忆, 如
?
1 2 3 | int * const a; //a作为指针本身为常量, 不允许改变指向, 定义时需要被赋值 int const * a; //a指向内容为常量 const int * a; //a指向内容为常量 |
如此繁琐, 该如何记忆? 又该习惯于何种写法?
<<C++ Templates>>第一章轻描淡写地提出: "恒定不变的部分"指的是const限定符前面的部分".
并推荐采用 int const *a 的写法, 而非 const int *a的写法.
经过反复思考, 应这样理解:
指针解释:
?
1 2 | int * const a; //const 修饰 int* , 即 a (指针)本身恒定 int const * a; //const 修饰 int , 即 *a (指向的内容) 恒定 |
而第三种写法 const前面没有任何东西, 虽然是正确的, 但不符合这种规则, 故不推荐使用.
引用解释:
基于这样的规则, 考虑如下代码:
?
1 2 | void foo ( int const & a) void foo ( const int & a) |
对于以上代码都是正确的, 但第二种不合法规则, 故不推荐使用.
方法解释:
?
1 | class A{...};<br> int A::top() const ; // const修饰 top() , 常量方法, 不允许该方法修改成员变量 |
其他推荐:
书中同样指出: "对于间隔符, 我们决定在& 符合和参数名至今留出一个空格"
?
1 | void foo ( int const & x) |
借助这种方法, 我们同样强调: 参数类型和参数名称是分离的.
故推荐如下写法:
?
1 | int * a; |
而非
?
1 | int *a; |
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。