2010-12-18 5 views

答えて

3

これは、C++(およびC)では常に関数宣言です。ただし、パラメータ宣言として表示される場合を除き、関数ポインタが宣言されます。

逆にいえ明記することはできません。

は "TのVAR;"常にC++のオブジェクト宣言ですか?

いいえTvarそれは上記のように、パラメータ宣言として現れる場合を除いて、関数として宣言される場合、関数型とすることができるので、それはありません。

+0

'T var(1);'についてはどうですか? – lex

+0

申し訳ありませんが、あなたのアップデートが私のコメントに答えなかったようですか? – lex

+0

@lex:カッコが空でない場合は、明らかに何が入っているかによって異なります。 '1'はパラメータ宣言のようには見えませんが、Tのコンストラクタのint引数のようです。 –

0

“T var();”は、常にC++の関数宣言ですか?

コンテキストによって異なります。

コンテキスト1:

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

はコンテキスト2:ボイド戻り、引数としてTを返す関数へのポインタを取りfuncこの場合

template<typename T> 
void func(T var()) // equivalent to `template<typename T> void 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

+0

@lex:編集内容を確認してください。 –

+0

なぜ 'T var()'は直接初期化と見なすことができないのですか? – lex

関連する問題