const虚拟和虚拟const有什么区别?

rat*_*zip 12 c++ virtual const

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

virtual const int getNumber();
Run Code Online (Sandbox Code Playgroud)

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

const virtual int getNumber();
Run Code Online (Sandbox Code Playgroud)

这两者有什么区别?

lis*_*rus 23

如前所述,没有区别.但请注意,这两者确实不同:

virtual const int getNumber();
virtual       int getNumber() const;
Run Code Online (Sandbox Code Playgroud)

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

在第二种方法中,const指的是调用方法的对象; 也就是说,thisT const *在此方法中包含类型, - 您将只能调用const方法,仅修改mutable字段等.


Mik*_*our 20

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


小智 9

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

decl-specifier:
     type-specifier

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

唯一的限制是,constvolatile可以与任何类型说明符本身除外(不合并const const,volatile volatile等等),还有在其中使用它们的顺序没有规则.

  • 问题在于语义,而不是语法 (4认同)
  • @anatolyg该问题既不指定语法也不指定语义.它只是要求区别.这个答案首先说没有差别,这是正确的,并通过语法的摘录支持它也是正确的.由于这个答案是错误的,因此有必要假定AST保留了说明符的顺序,然后对不同的顺序作出不同的反应,任何此类声明都需要得到一些实际证据的支持. (2认同)