これはすでにここで回答されていると確信していますが、検索では PHP、C#、および Java が返され続けます。特にC++について質問しています。
5 つの引数を取り、すべてにデフォルト値がある関数があり、3 番目の引数に値を指定して明示的に呼び出したい場合、1 番目と 2 番目の引数に何を渡せばよいでしょうか? (うまくいかないことはわかっfunc(,,"Third")
ていますが、どちらもうまくいきませんfunc(thirdArg:"Third")
)
これはすでにここで回答されていると確信していますが、検索では PHP、C#、および Java が返され続けます。特にC++について質問しています。
5 つの引数を取り、すべてにデフォルト値がある関数があり、3 番目の引数に値を指定して明示的に呼び出したい場合、1 番目と 2 番目の引数に何を渡せばよいでしょうか? (うまくいかないことはわかっfunc(,,"Third")
ていますが、どちらもうまくいきませんfunc(thirdArg:"Third")
)
C++ では、デフォルトまでのすべてのパラメーターを指定する必要があるため、func("First","Second","Third")
.
C++ では、パラメーター リストの「最後」にデフォルトを設定する必要もあるため、次のようなことはできません。func(defaulted, not-defaulted)
これらの規則は両方とも、C++ オーバーロードの解決規則に関連付けられています。
Javaコンストラクターのデフォルトパラメーターのソリューションで同様のものを作成できます。
しかし、C++、特に関数の場合、それは良い習慣ではないと思います。なぜなら、上記で述べたように、デフォルト以外のパラメーターの後に一般的に受け入れられるデフォルトパラメーターの位置だからです。
関数のオーバーロードを使用して達成されるソリューション:
void Foo(int default, int nodefault){
...
}
void Foo(int nodefault){
Foo(10, nodefault); //10 - is default option
}
int main(){
Foo(3); //calls Foo(10, 3);
}
この言語には直接的なサポートはありません。ただし、C++ プログラマーがbash のような位置パラメーターの欠如を置き換えるためによく使用するイディオムは、名前付きパラメーター イディオムです。.
関数がクラスのメンバー メソッドであると仮定すると、このイディオムを簡単に適用できます。
基本的に、オブジェクトの状態を変更するためのメソッド (おそらくアクセサー) があります。各メソッドは への非 const 参照を返し、this
メソッド チェーンを可能にします。
例:
class Person{
public:
Person& setAge(int agep) { age = agep ; return *this; }
Person& setWeight(double weightp) { weight = weightp ; return *this; }
Person& setName(const std::string& namep) { name = namep ; return *this; }
private:
int age = 0;
double weight = 0.0;
std::string name;
};
int main(){
Person p;
p.setAge(42).setName("Kurt"); // set age and name, but not weight
}