当我今天在Visual Studio 2015中编写界面时,我发现了一些奇怪的行为.在函数标识符之前放置"virtual"关键字通常无关紧要,但如果将其置于指针或引用之后,则会产生抱怨.请参阅以下内容:
class B {};
class A
{
virtual B fun1a(); // OK
B virtual fun1b(); // OK
virtual B& fun2a(); // OK
B& virtual fun2b(); // ERROR, "expected an identifier"
virtual B* fun3a(); // OK
B* virtual fun3b(); // ERROR, "expected an identifier"
virtual std::unique_ptr<B> fun4a(); // OK
std::unique_ptr<B> virtual fun4b(); // OK
};
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
显然我可以通过始终将virtual关键字放在第一位来完全避免错误,但我希望能够通过以下方式编写函数定义:
foo const & // return value and relevant keywords on one line
virtual bar( const baz &a ) const // function identifier, …Run Code Online (Sandbox Code Playgroud)