为了账号安全,请及时绑定邮箱和手机立即绑定

c++中const是怎么使用的?

c++中const是怎么使用的?

C++
Cats萌萌 2019-03-10 08:08:08
看下代码,为什么这样比较规范呢?什么情况下使用它比较好,我想养成一个良好的编程习惯
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

首先是const的用处,它可以用来修饰一个变量或者类的成员函数, 修饰变量时表示变量是不可修改的,修饰类的成员函数时,表示调用这个函数,不会修改类的内部成员


指针和 const 指针的功能区别: const指针表示指针指向的对象是不可修改的, 而普通指针可以,

另外,普通的指针可以当做const指针的来用,如下:

假设现在有两个指针 Tdate *p1,  const Tdata *p2

第一个函数定义为 someFunc(T *) , 那么 someFunc(p1)是可以的,someFunc(p2)是不行的,因为const指针不能转换成非const指针

第二个函数定义为someFunc(const T *) 那么someFunc(p1)和someFunc(p2)都是可以的,p1可以当做const T *来用


someFunc2的解释

假设现有对象 Tdata t;

someFunc2(Tdata re),形参是一个对象,由于c/c++是传值调用,所以每次调用这个someFunc2(t)时,都会构造一个新的Tdata形参re,并把t的内容复制到re中去,这样是一种效率的浪费,解决办法就是改成指针someFunc2(Tdata *re) 或者引用 someFunc2(Tdata &re)


不使用普通引用而是是用const引用的好处在于:

  1. const引用使用要求比较低,  如前面所述, 普通引用和const引用都可以调用这个函数

  2. const明确告诉使用者,该函数不会修改re的内容,也就是t的内容,而使用非const引用会误导使用者以为该函数要修改t的内容



查看完整回答
反对 回复 2019-03-20
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

你好,首先你应当明白引用时C++区别于C的一点。但是在Lippleman的<深度探索C++的对象模型>中曾经指出,引用的实现说到底还是采用指针实现的,但是它比指针有自己的优势。然后再Lippleman的<C++primer>中他指出现代C++程序偏向于使用引用,而不是指针,但是并不是说指针不再使用。
C++中的const关键字是指出对象时一个常量,是不允许变动它在内存当中的值的。但是还有很多点是需要注意的。
1.指向const对象的指针 const double *ptr表明ptr指向一个double类型的对象,你可以赋值给ptr一个常量或者不是常量。比如:
double temp = 3.0;const double *ptr = &temp; //此时你不能通过ptr来更改temp的值,也就是说下面的语句是错误的:*ptr = 4.0;但是temp本身并不是const变量,下面的语句就是对的:temp = 4.0; //注意const对象一定要在对象的初始化时赋值.就是说下面的语句是错误的:
double temp = 3.0;const double* ptr; ptr = &temp; //error

2.const指针 ,和一般的const对象一样,说明指针本身是const,是不允许指向其他的对象的;比如下面的语句就是错的:
double temp = 3.0;double* const ptr = &temp; double err = 4.0;ptr = &err; //注意const对象的初始化时一定需要赋值.
但是你可以使用ptr来更改temp的值,就是说下面的语句是对的:*ptr = 10.0;

对于你上面的例子中,首先你应该知道C++的标识符的命名本身就应该包含足够的信息,而不是随便的a,b,等没有用的名字。函数print()就是说该函数是用来打印的,并不会更改对象的内容,所以你将函数的形参设为const,是为了当你在函数的实现中一不小心更改了对象的内容,编译器会及时的报错,从而能避免以后不需要的麻烦。
在标准的C中,函数形参的const说明是会被编译器直接忽略的就是说你写成const,但是你还是可以在函数的实现中更改对象的内容,但是你的const说明符告诉函数的使用者该专递给函数一个const对象,但是编译器并不负责对你的更改操作给出error提示的.在C++中,确实会给出提示的。
所以当你的函数并不会改变对象的内容时,将其定义为const对象回事很好的编程习惯的。

查看完整回答
反对 回复 2019-03-20
  • 3 回答
  • 0 关注
  • 1018 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信