int main(int,char const * const *)是否形成良好?

时间:2012-06-26 21:25:15

标签: c++ c++11

根据C ++ 11标准,以下程序是否是格式良好且可移植的C ++?

int main(int argc, char const* const* argv) {}

2 个答案:

答案 0 :(得分:12)

没有。在纯可移植C ++程序中,argv参数(如果存在)没有const修饰符。

编辑:请参阅C ++ 11草案标准的第3.6.1.2节,该标准(在我之前的版本中)声明:

  

实现不应预定义主函数。这个功能   不得超载。它应该具有int类型的返回类型,但是   否则其类型是实现定义的。所有实施   应允许以下两个主要定义:

     

int main(){ /*...*/ }

     

     

int main(int argc, char* argv[]) { /* ... */ }

答案 1 :(得分:3)

取决于便携式的含义。邪恶的C ++实现可以拒绝它,理由是它的签名int(int,char const*const*)与所需的允许签名int()int(int,char**)不同。 (一个邪恶的实施似乎拒绝auto main(int argc,char* argv[]) -> int,或者实际上,main身体不是{ /* ... */ }的任何定义

然而,这不典型。我不知道添加const会导致调用main的问题的任何实现,并且由于C ++ 11添加了关于“相似”类型的位,因此在访问{时不会违反严格别名规则{1}}通过char**变量对象。

因此,虽然符合标准的实现可以在技术上拒绝它,但我认为它可以移植到您可能会使用的任何实现。