int main(int, char const* const*) 格式良好

Is int main(int, char const* const*) well formed?

本文关键字:int const 格式 main char      更新时间:2023-10-16

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

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

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

编辑:见C++11标准草案第3.6.1.2节,其中(在我面前的版本中)指出:

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

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

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

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

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

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