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

时间:2012-03-07 09:10:47

标签: c++ virtual keyword function-declaration

在返回值类型之前或之后是否将virtual关键字放在函数声明中会有什么不同吗?

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

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

4 个答案:

答案 0 :(得分:5)

这两个陈述都是等同的 但第一个更传统。因为,通常必填字段与任何语法(即示例中的函数原型)保持最接近

virtual是一个可选关键字(纯virtual需要它)。但是返回类型(此处为void)是必需的关键字,始终是必需的。因此,人们将virtual保留在最左侧,return类型更接近功能签名。

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

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

答案 1 :(得分:3)

两者之间没有区别,C++ grammar允许虚拟关键字在返回类型之前和之后出现。通常的做法是将它放在声明中。

答案 2 :(得分: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

答案 3 :(得分:-1)

刚刚测试过:

编译两种方式。

通常在返回类型之前放置虚拟。

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