Mar*_*tin 1 c++ const function
可能重复:
const(c ++)是可选的吗?
常数成员函数
我见过不同的帖子int a() const.我的问题是我们为什么要把const关键字放在那里?我知道它阻止我们对函数所在类的成员进行更改,但那又怎么样?
我们可以只写上面的函数的注释,并告诉编码器不作类本身在函数内部任何变化,但为什么我们真正关心的const后void声明?在哪些情况下可能有更好的方法来使用,例如int a() const而不仅仅是int a(),编译的代码是否会发生变化?
它的确有所作为.考虑A成为一个有print()方法的类.然后这个:
const A a;
a.print();
Run Code Online (Sandbox Code Playgroud)
只有编译print被定义为const.
当然,主要原因是要防止对类内对象的任何更改.该
我们可以在函数上面写一条注释,并告诉编码器不要在函数内部对类本身进行任何更改
只是一厢情愿.这不会发生.因此,如果有人不读取评论(或者忽略它),您将收到编译器错误.
优化还有一个好处 - 编译器可以更好地并行化const对象上的任务,因为它可以假设它们不会在它们之间的操作之间发生变化.
使用const函数有三个基本原因:
1)C++只允许const引用绑定到temporaries.但是如果你没有有用的const函数,那么const引用就没用了.
2)某些库(如C++标准库)提供仅适用于const函数的特定语义保证.例如,您可以在标准集合中保证可以同时从多个线程访问集合的const函数.
3)它允许编译器捕获容易出错的错误.例如,如果您打算依赖C++标准容器保证,如果使用const对象,则只能调用const函数.因此,如果有人修改代码而忘记了并发性问题,则会在编译时遇到错误.(而不是当有人依靠你的程序来做实际工作时.)