2010-12-18 28 views

回答

3

它總是C++(和C)中的函數聲明,除非它作爲參數聲明出現,在這種情況下它聲明瞭函數指針。

逆無法雖然說明:

是 「T變種;」總是在C++中的對象聲明?

不,它是沒有,因爲T可以是一個功能類型,在這種情況下var將被宣佈爲一個功能,當它顯示爲一個參數聲明,如上面除外。

+0

'T var(1);'? – lex 2010-12-18 02:57:23

+0

對不起,你的更新似乎沒有迴應我的評論? – lex 2010-12-18 03:10:23

+0

@lex:當括號不爲空時,它顯然取決於它們中的內容。 '1'看起來不像參數聲明,但像T構造函數的int參數。 – 2010-12-18 03:24:04

0

「T var();」總是在C++中的函數聲明?

取決於上下文。

背景1:

template<typename T> 
void func() 
{ 
    T var(); // function declaration 
} 

背景2:

template<typename T> 
void func(T var()) // equivalent to `template<typename T> void func (T()) { } ` 
{ 
} 

在這種情況下返回func空隙並需要作爲一個參數的指針的函數返回T。省略var是可選的。


什麼T var(1);,是實例還是一樣T var = T(1);

T var(1)直接初始化T var = T(1)拷貝初始化。在這兩種情況下,對象var都被初始化爲T(1)。

如果T是用戶定義的類型,後一種情況下需要可訪問的複製構造函數,而前者不需要。

+0

'T var(1);',它是實例化還是與'T var = T(1);'相同? – lex 2010-12-18 03:17:19

+0

@lex:查看編輯。 – 2010-12-18 03:29:40

+0

那麼爲什麼'var var()'不能被視爲直接初始化? – lex 2010-12-18 03:37:40