为什么const在void / int声明之后?

时间:2013-01-14 13:54:26

标签: c++ function const

  

可能重复:
  is const (c++) optional?
  Constant Member Functions

我看到有关int a() const的不同帖子。我的问题是我们为什么要将const关键字放在那里?我知道它阻止我们对函数所在类的成员进行更改,但那又是什么?

我们可以在函数上面写一条注释,并告诉编码器不要在函数内部对类本身进行任何更改,但为什么在const声明之后我们真的关心void ?在哪些情况下可能有更好的方法来使用例如int a() const而不仅仅是int a()并且编译后的代码是否会发生变化?

3 个答案:

答案 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的好处是,如果修改对象,编译器将发出错误。因此,即使您不小心修改了对象,编译器也会抓住您的错误。