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
唯一的限制是 const
和 volatile
可以与除它们之外的任何类型说明符组合(没有 const const
、volatile volatile
等),没有规定您使用它们的顺序。
我看到 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
唯一的限制是 const
和 volatile
可以与除它们之外的任何类型说明符组合(没有 const const
、volatile volatile
等),没有规定您使用它们的顺序。