虚关键字在函数声明中的位置

position of virtual keyword in function declaration

本文关键字:位置 声明 函数 关键字      更新时间:2023-10-16

在函数声明中将virtual关键字放在返回值类型之前还是之后有区别吗?

virtual void DoSomething() = 0;
void virtual DoSomething() = 0;

在重构一些遗留代码时发现了void virtual语法,并怀疑它是否正在编译。。。

这两个语句是等价的
但第一种更为传统。因为,通常强制字段与任何语法(即示例中的函数原型)保持最接近

virtual是一个可选关键字(不过对于纯virtual来说是必需的)。但是,返回类型(此处为void)是一个强制关键字,它始终是必需的。所以人们把virtual放在最左边,return类型更接近函数签名。

另一个例子:我通常在下面的代码中看到,出于同样的原因,1st语法更受欢迎:

const int i = 0;  // 1
int const i = 0;  // 2

两者没有区别,C++语法允许虚拟关键字出现在返回类型之前和之后。把它放在声明的第一位是常见的做法。

这两种格式都可以使用,但标准指定了第一种格式。

参考:
C++03 7.1规范

可以在声明中使用的说明符是

   decl-specifier:
         storage-class-specifier
         type-specifier
         function-specifier
         friend
         typedef
     decl-specifier-seq:
           decl-specifier-seqopt decl-specifier

在中进一步解释了function-specifier

7.1.2函数说明符

函数说明符只能在函数声明中使用。

 function-specifier:
     inline
     virtual
     explicit

刚刚测试:

双向编译。

通常,virtual放在返回类型之前。

点击此处阅读更多信息:http://msdn.microsoft.com/en-us/library/0y01k918%28v=vs.80%29.aspx