1. ホーム
  2. c++

[解決済み] C++で引数の数が可変?

2022-03-15 09:43:19

質問

可変個数の引数を受け取る関数を書くにはどうしたらよいですか?可能ですか、どうですか?

どのように解決するのですか?

おそらく、そうすべきではないでしょうし、あなたがやりたいことは、より安全でシンプルな方法でできるはずです。 技術的には、C言語で可変長の引数を使用するには、stdarg.hをインクルードします。 そこから va_list という型と、それを操作する3つの関数があります。 va_start() , va_arg()va_end() .

#include<stdarg.h>

int maxof(int n_args, ...)
{
    va_list ap;
    va_start(ap, n_args);
    int max = va_arg(ap, int);
    for(int i = 2; i <= n_args; i++) {
        int a = va_arg(ap, int);
        if(a > max) max = a;
    }
    va_end(ap);
    return max;
}

私に言わせれば、これは滅茶苦茶です。 見た目は悪いし、安全ではないし、コンセプト的に達成しようとしていることとは関係のない技術的な詳細でいっぱいだ。 それよりも、オーバーロードや継承・ポリモーフィズム、ビルダーパターン(例えば operator<<() のストリーム)やデフォルトの引数などです。 これらはすべて安全です。コンパイラはあなたがやろうとしていることをより多く知ることができるので、あなたの足が吹き飛ぶ前に止められる機会が多くなるのです。