在函数上使用typedef

use*_*214 4 c++

在下面,我如何使用typedef语法定义我的函数?

typedef void F();

//declare my function
F f;

//error
F f { }
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 6

函数的定义遵循通常的语法:

//declare my function
F f; //it is exactly equivalent to : void f();

//definition
void f() { cout << "hello world"; }
Run Code Online (Sandbox Code Playgroud)

要测试的定义确实是定义这是以前functon的声明,调用函数f()只是声明和之前定义(阅读评论main()):

//declaration
F f;  

int main() 
{
    f(); //at compile-time, it compiles because of *declaration*
} 

//definition
void f() { std::cout << "hello world" << std::endl; }
Run Code Online (Sandbox Code Playgroud)

演示:http://ideone.com/B4d95


至于为什么F f{}不起作用,因为它被语言规范明确禁止.§8.3.5(C++ 03)说

函数类型的typedef可用于声明函数,但不能用于定义函数(8.4).

[Example:
Run Code Online (Sandbox Code Playgroud)
   typedef void F();
   F fv; // OK: equivalent to void fv();
   F fv { } // ill-formed
   void fv() { } // OK: definition of fv

—end example]
Run Code Online (Sandbox Code Playgroud)

重点:

  • 函数的typedef可用于声明函数
  • 函数的typedef不能用于定义函数