2011-11-13 1 views
4

これは宿題ではなく面接テストの質問です。テストは終了しました。C++のデフォルトの引数にはいくつかの特殊なプロパティがありますか?

C++のデフォルト引数について、次のうちどれが正しいですか?

A. Default Argument cannot be of a user-defined type. 
B. Default Argument can never precede non-default arguments 
C. Default Argument cannot be of pointer type. 
D. Default Argument exist in global heap not function's stack 
E. Default Argument are not considered for generating the function's signature. 

私はBとEを選択しました。これらは正しいですか?私はDについて確信していません、それも正しいですか?

+0

F - 既定の引数を使用しないでください。 –

+0

@JimRhodes:それを説明する気に? –

+0

@ニコルボラス:それは冗談だったけど、私は決して使っていない。私は彼らが間違いにつながるのを見ました。そして、あなたが慣れていないコードを見ていると、関数に渡されるパラメータが増えていることに気づかないかもしれません。 –

答えて

7

Bが真です。 A、C、Dは偽です。

Eには、明確化が必要です。それは、「関数のシグネチャを生成する」という意味に依存します。

コンパイラに関する限り、署名は署名です。デフォルトの引数は、が関数を呼び出す場合にのみ関係します。これはデフォルトが代入される場所です。したがって関数には署名が書き込まれています。

"関数のシグネチャを生成する"が "関数のC++シグネチャが何であるか"を意味する場合、シグネチャは引数がデフォルトであるかどうかは考慮しません。しかし、「関数のシグネチャを生成する」とは、「どのように呼び出すか」を意味する場合、デフォルトを気にします。

2

A、C、Dはすべて間違いです。 Bは間違いなく真です。私はEについてはあまりよく分からない、いつも忘れている。