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