2016-11-03 2 views
0

この問題は、「make_plural(§6.3.2、p。224)の2番目のパラメータに 's'のデフォルト引数を与えることです。単語の成功と失敗 " ここはmake_pluralです。C++のプライマー第5回funcパラメータについて

string make_plural(size_t ctr, const string& word, const string& ending) 
{ 
    return (ctr > 1) ? word + ending : word; 
} 

それはそれはそれではない、第三のパラメータは「終了」が、エンディングを変更するということですか? この質問は私をたくさん心配しています! よろしく!

+1

[正誤表](http://ptgmedia.pearsoncmg.com/images/9780321714114/errata/9780321714114_errata_10-31-12.html)には言及されていませんが(古いですが、最近更新されたものではありません)第三の議論であるというあなたの前提が正しいはずです。 –

+1

2つの完全に非センスのコメントを書いた後、私はあなたの質問を最終的に理解しました;)。もちろん、それは第3パラメータを意味します。それはあなたが通常複数を作る方法です: "s"を追加します。また、第2パラメータのデフォルトを提供するが、第3パラメータのためのデフォルトを提供することは不可能である。 – user463035818

+0

あなたが文字列を渡す限り、別のパラメーターでそのサイズを渡す理由 – Raindrop7

答えて

1

これはタイプミスである必要があります。

コードを見てみると:

string make_plural(size_t ctr, const string& word, const string& ending) 
{ 
    return (ctr > 1) ? word + ending : word; 
} 

これは、あなたが(常にではないが、「蜂で、デフォルトでは複数形を作る方法であるとして、最も合理的な事は、endingのデフォルトとして「s」を持っているだろう" - >"蜂 "など)。

C + +では、(n + 1)番目にデフォルトがない場合、n番目のパラメータのデフォルト引数を持つことはできません(魔法の回避策(*)が見つからない限り)引数:

foo(int first = 0,int second) // not possible !! 

この例では、なぜこれが許可されていないのかはっきりしないかもしれませんが、複数のデフォルト値を持つことを検討してください。あなたが書くでしょう言うことができます:

foo(int first = 0,int second,int third = 0); // actually still not allowed 

その後

foo(1,2); 

を解決するには

foo(0,1,2); 

または

foo(1,2,0); 

を呼び出すことになっているかどうかを知る方法はありませんこのあいまいさはいくつかのルールが発明されなければならなかったC++では、デフォルトの引数を右から左に渡す必要があるというルールがあります。

(*)機能を変更して余分なコードを書きたい場合は、回避策を取るのはやや簡単です。あなたは、あなたが好きなデフォルトの任意の組み合わせでパラメータの作成を提供する構造体の中のすべてのパラメータをカプセル化するだけです。

関連する問題