使用 const char*[] 作为 main 的第二个参数的类型是否有效

Is it valid to use const char*[] as the type of second parameter of main

我正在学习 C++ 并且 以下给出的声明是等效的:

int main (int argc, char *argv[]); //first declaration
int main (int argc, char **argv);  //RE-DECLARATION. Equivalent to the above declaration

我的问题是,如果我将声明更改为:

//note the added const
int main (int argc,const char *argv[]); //IS THIS VALID? 

上面我添加了const的声明是否有效?也就是说,C++ 标准是否允许这个修改后的声明加上 const.

根据cppreference.com (main_function),main 应具有以下形式之一:

int main () { body }    (1)     
int main (int argc, char *argv[]) { body }  (2)     
/* another implementation-defined form, with int as return type */  (3)

使用 int main (int argc,const char *argv[])(您建议的变体)例如在 MSVC 中有效。本案属于上述第(3)项。

但是因为它是 implementation-defined 最好避免(即使在您当前的环境中工作)。

添加 const 更改函数的类型。这不是同一函数的声明。

是否对 main 有效取决于语言实现:

[basic.start.main]

An implementation shall not predefine the main function. Its type shall have C++ language linkage and it shall have a declared return type of type int, but otherwise its type is implementation-defined. An implementation shall allow both

  • a function of () returning int and
  • a function of (int, pointer to pointer to char) returning int

as the type of main ([dcl.fct]).

它在理论上可能在某些实现中有效,但它不能移植到所有系统。