1. ホーム
  2. c++

[解決済み] なぜargcは定数でないのですか?

2022-10-21 08:39:56

質問

int main( const int argc , const char[] const argv)

として 有効なC++言語 Item#3 に "Use const whenever possible" とあるように、これらのパラメータを "constant" にしてはどうだろうかと考え始めました。 const というのはどうでしょう?

の値が、"quote "であるようなシナリオはありますか? argc の値がプログラム内で変更されるようなシナリオはありますか?

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

この場合、歴史が要因になります。 C ではこれらの入力を "not constant" として定義し、既存の C コードとの (かなりの部分の) 互換性は、C++ の初期の目標でした。

いくつかの UNIX API、たとえば getopt のように、実際に argv[] であるため const にもできません。

(余談) 面白いことに getopt のプロトタイプは、それが argv[] を修正しませんが、指された文字列を修正する可能性があることを示唆しています。 getopt はその引数を並べ替え、そして は自分たちがいたずら好きであることを知っているようです。 . Open Group の man ページには、この並べ替えについては書かれていません)。

置くこと constargcargv を使ってもあまり意味がありませんし、以下のような昔ながらのプログラミングのやり方も無効になってしまいます。

// print out all the arguments:
while (--argc)
    std::cout << *++argv << std::endl;

私はC言語でこのようなプログラムを書いたことがあります。 から例をコピーしました。 どこか .