为什么在void/int声明后使用const

Why const after void/int declaration?

本文关键字:const 声明 int void 为什么      更新时间:2023-10-16

可能重复:
const(c++(是可选的吗
常数成员函数

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

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

这确实会有所不同。将A视为具有print()方法的类。然后这个:

const A a;
a.print();

仅编译CCD_ 9被定义为CCD_。

当然,主要原因是为了防止对类中的对象进行任何更改。

我们可以在函数上方写一条注释,并告诉编码器不要在函数中对类本身进行任何更改

只是一厢情愿。这并没有真正发生。因此,如果有人没有阅读评论(或者阅读并忽略了它(,您将收到编译器错误。

优化还有一个好处——编译器可以更好地并行化const对象上的任务,因为它可以假设它们在操作之间不会发生变化。

使用const函数有三个基本原因:

1( C++只允许常量引用可以绑定到临时库。但是,如果您没有有用的const函数,那么const引用是无用的。

2( 一些库,如C++标准库,提供了仅适用于const函数的特定语义保证。例如,在标准集合上保证可以同时从多个线程访问集合的常量函数。

3( 它允许编译器发现容易犯的错误。例如,如果您打算依赖C++标准容器保证,如果您使用const对象,则只能调用const函数。因此,一个错误,比如有人在修改代码时忘记了并发问题,会在编译时被发现。(而不是当有人依靠你的程序来完成真正的工作时。(

声明成员函数const的好处是,如果修改对象,编译器将发出错误。因此,即使您不小心修改了对象,编译器也会发现您的错误。