函数声明中 virtual 关键字的位置重要吗?

问题描述 投票:0回答:4

virtual
关键字放在函数声明中的返回值类型之前或之后有什么区别吗?

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

我在重构一些遗留代码时发现了

void virtual
语法,并且想知道它是否正在编译。

c++ virtual keyword function-declaration
4个回答
5
投票

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

virtual
是一个可选关键字(但纯
virtual
需要它)。然而返回类型(这里
void
)是一个强制关键字,它始终是必需的。因此人们将
virtual
保留在最左侧,并且
return
类型更靠近函数签名。

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

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

3
投票

两者没有区别,C++语法允许virtual关键字出现在返回类型之前和之后。将其放在声明的前面是常见的做法。


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

-1
投票

刚刚测试过:

双向编译。

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

在此处了解更多信息:http://msdn.microsoft.com/en-us/library/0y01k918%28v=vs.80%29.aspx

© www.soinside.com 2019 - 2024. All rights reserved.