2013-02-03 8 views

答えて

11

はい、合法です。

この組み合わせの機能を具体的に実現するための標準的な用語はありません。単ににはのいずれも許可されていません。

デフォルト引数の構文がパラメータ宣言でパラメータを機能するように適用されます。

[C++11: 8.3.6/1]:初期化子節パラメータ宣言で指定されている場合、この初期化子節です既定の引数として使用されます。デフォルト引数は、後続の引数がないコールで使用されます。

...とパラメータ宣言関数パラメータは名前であってもよい。

[C++11: 8.3.5/11]:[..]識別子は随意パラメータ名として提供することができます。 [..]

(例は規定テキストないので、これは具体的に何を証明するために使用することはできないが)この使用のも一例は、8.3.6/4の下にあります。

11

はい、完全に合法です。

[例:

void point(int = 3, int = 4); 

はゼロ、1つ、または2つの引数を指定して呼び出すことができる関数を宣言する宣言明白な例は、N3485に8.3.6デフォルト引数/4に見出されますint型です。

+2

例は標準ではありません;) –

+0

@LightnessRacesinOrbit、私が探しています:)明示的に "デフォルトの引数は名前を付けることができません"とは言わない。私は、デフォルト以外のパラメータでプロパティを共有するという根拠がなくなったと思います。 – chris

+0

さて、私は混乱している証拠を設定しましたが、Lightはそれよりはるかに優れていましたので、後で来る人々を混乱させる価値はありません:) – chris

1

はい、合法です。
8.3.5/1節の関数パラメータに対して与えられた構文生成では、識別子なしで代入式を持つ(初期化子として)パラメータ宣言が可能です。

-1

これは合法であるだけでなく、実際にはコーディングスタイルによってはかなり役に立ちます。

デフォルトパラメータは、関数宣言でのみ意味があります。

名前付きパラメータは、関数定義でのみ意味があります。

f。H:

void f(void*=nullptr); 

f.ccそれはしかし、私は不自然どのような状況に把握することはできません

void f(void* x) 
{ 
... 
} 
+2

_ "名前付きパラメータは関数定義でのみ意味があります" _ lolwut私はあなたがここで言おうとしていることを理解していますが、それはやや馬鹿げています。 –

関連する問題