2016-07-16 9 views
-7

私は抽象C++の質問を持っていると私はこのことについて誰かと口論抱えている:これらのいずれかが有効な関数の宣言ことができ有効な関数の宣言

:それらの

int f (int i=0, int j); 
int f (int j, void k); 
int f (int i, int u=0); 
int f (int * = 0); 
+2

真剣に? http://coliru.stacked-crooked.com/または独自のコンパイラ。 – LogicStuff

+0

実際には* 2つの*有効な関数宣言がそのリストにあります。 –

+1

最初と2番目が間違っています – DimChtz

答えて

8

スリーをが有効である可能性があります。 3番目と4番目は明らかに大丈夫です。最初広い文脈で有効であることができます

int f(int i, int j = 0); 
int f(int i = 0, int j); 

関数の宣言は、追加のデフォルト引数を追加するために許可されていますが、以前のデフォルトを繰り返すように許可されていません。したがって、2行目(最初の例)はここで大丈夫です。

+2

ブラボー!優れた答えは、見落とされる可能性のある奇妙な奇妙なものの1つを指しています。本当に不幸なことに、それはおそらく失われることになるでしょう。 –

+2

「私の神」と思った。 "この作者は標準の最も暗いコーナーを知っています。"それから私は著者が誰か、オハイオ州のええを見た。彼はやる。 –