2011-11-29 20 views

回答

6

的功能定義將按照通常的語法:

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

//definition 
void f() { cout << "hello world"; } 

要測試的定義確實是以前聲明的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; } 

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


至於爲什麼F f{}不起作用,因爲它是專門由語言規範禁止的。 §8.3.5(C++ 03)說

功能類型的類型定義可以用於聲明函數但不得被用來定義一個函數(8.4)

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

—end example] 

要點:

  • functon的類型定義可以用來聲明函數
  • functon的typedef的不能用於限定的函數
+0

如果我在函數定義中使用F,會發生什麼情況?爲什麼是錯誤? – user103214

+0

@ user974191:這不是語言如何指定它的。 – Nawaz

+0

我明白了,這是因爲定義必須在鏈接時解決,而F在當時是未知的,對吧? – user103214