C++11
標準では、実装では、提示された2つだけの署名が必要な任意の署名を受け入れることができます。戻り値の型はint
でなければなりません。
3.6.1主な機能 [basic.start.main]
実装が主な機能をあらかじめ定義してはなりません。この関数はオーバーロードしてはならない。これはint型の戻り値型を持ちますが、それ以外の型は実装定義です。
は、我々はCV-修飾子を追加することができます。
int main() { /* ...
*/ }
と
int main(int argc, char* argv[]) { /* ...
*/ }
だから、メインの質問に対処するために:すべての実装が メインの次の定義の両方ができるようにするものメインの議論に?
我々はできる実装がそれをサポートしていますが、私たちがしなければ、コードがポータブルになりにくいの場合。
コードはそれだけではなく、その種類の尖った-にパラメータ変数自体へCV予選(最大で)追加した場合、完全に移植可能になります:CとC++は2異なることを覚えておいてください
// still portable, same signature as int main(int, char**)
int main(int, char** const argv);
// not portable
int main(int, char* const* argv);
// not portable
int main(int, const char** argv);
追加できます。 – STF
@STF私はそれを参照してください、しかし、いくつかの標準的な参照がありますか?私が覚えている限り、私は今、私の目の前に標準を持っていません。署名は 'int main()'や 'int main(int、char **)'、 'int main(int、char * [])'です。 – vsoftco
@Galikなぜですか?ポインタは暗黙的に変換可能ではなく、標準的な配列間の崩壊ではありません。したがって、CV-qualsは署名の一部でなければなりません。多分私はここで何かを逃しているでしょう。 – vsoftco