3

virtual将关键字放在返回值类型之前或之后的函数声明中是否有任何区别?

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

在重构一些遗留代码时发现了void virtual语法,并且想知道它是否正在编译......

4

4 回答 4

5

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

virtual是一个可选关键字(虽然它是 pure 所必需的virtual)。然而返回类型(这里void)是一个强制关键字,它始终是必需的。所以人们保持virtual在最左边,return类型更接近函数签名。

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

const int i = 0;  // 1
int const i = 0;  // 2
于 2012-03-07T09:23:27.943 回答
3

两者没有区别,C++语法允许virtual关键字在返回类型前后都出现。将它放在声明的首位只是一种常见的做法。

于 2012-03-07T09:22:34.843 回答
1

两种格式都有效,但标准指定了第一种格式。

参考:
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
于 2012-03-07T09:37:43.157 回答
-1

刚刚测试:

编译两种方式。

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

在这里阅读更多:http: //msdn.microsoft.com/en-us/library/0y01k918%28v=vs.80%29.aspx

于 2012-03-07T09:15:45.440 回答