以前、私はPythonを使っていました。Pythonでは関数呼び出しに名前付きパラメータ(キーワード引数)を使っていました。名前付きパラメータC++ ではこの機能はサポートされていないとのことです。
C++ はなぜ名前付きパラメータをサポートしないのでしょうか? C++ 標準の将来のバージョンではサポートされる予定ですか?
ベストアンサー1
C++ は名前付きパラメータをサポートしていますか?
いいえ、この機能は標準に導入されていないためです。この機能は、C++ が元々ベースとしていた C にも存在しませんでした (現在も存在しません)。
C++ 標準の将来のバージョンでサポートされる予定ですか?
提案N4172: 名前付き引数そのために書かれたが却下された。最近では、P1229: ラベル付きパラメータこの機能を提案しましたが、まだ拒否も承認もされていません。
C++ の基本的な問題は、関数宣言内のパラメータの名前が重要ではないことですが、次のプログラムは適切に定義されています。
void foo(int x, int y);
void foo(int y, int x); // re-declaration of the same function
void foo(int, int); // parameter names are optional
void foo(int a, int b) {} // definition of the same function
名前付きパラメータが言語に導入された場合、ここではどのようなパラメータが渡されるのでしょうか?
foo(x=42, b=42);
名前付きパラメータには、大きく異なる、下位互換性のないパラメータ受け渡しシステムが必要です。
クラス型の単一のパラメータを使用して、名前付きパラメータをエミュレートできます。
struct args {
int a = 42;
float b = 3.14;
};
void foo(args);
// usage
args a{};
a.b = 10.1;
foo(a);
// or in C++20
foo({.b = 10.1});