在返回值类型之前或之后是否将virtual
关键字放在函数声明中会有什么不同吗?
virtual void DoSomething() = 0;
void virtual DoSomething() = 0;
在重构一些遗留代码时发现了void virtual
语法,并且想知道它正在编译......
答案 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