const virtual 和 virtual const 有什么区别?

What is the difference between const virtual and virtual const?

我看到 C++ 中的某些函数被声明为

virtual const int getNumber();

但是函数声明如下有什么区别呢?

const virtual int getNumber();

这两者有什么区别?

没有区别。声明的说明符通常可以按任何顺序书写。

没有区别。您可以按照自己喜欢的顺序应用修饰符。

如前所述,没有区别。但是,请注意这两个 do 不同:

virtual const int getNumber();
virtual       int getNumber() const;

第一种方法中,const指的是int类型的返回值。

在第二种方法中,const指的是调用该方法的对象;也就是说,this 将在此方法中具有类型 T const *,- 您将只能调用 const 方法,只能修改 mutable 字段等。

没有区别。如果我们查看 decl-specifier-seq 的语法摘要,我们可以看到它是以递归方式定义的:

decl-specifier:
     type-specifier

decl-specifier-seq:
     decl-specifier decl-specifier-seq

唯一的限制是 constvolatile 可以与除它们之外的任何类型说明符组合(没有 const constvolatile volatile 等),没有规定您使用它们的顺序。