使用 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]).
它在理论上可能在某些实现中有效,但它不能移植到所有系统。
我正在学习 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]).
它在理论上可能在某些实现中有效,但它不能移植到所有系统。