C++ は名前付きパラメータをサポートしていますか? 質問する

C++ は名前付きパラメータをサポートしていますか? 質問する

以前、私は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});

おすすめ記事