main()中的无名参数是否严格遵从?
Are nameless parameters in main() strictly conforming?
c++允许以下两种main定义:
int main() { }
int main(int argc, char* argv[]) { }
它还允许char*[]
为char**
, argc
和argv
以程序员希望的任何名称命名。但是,它是否也允许:
int main(int, char*[]) { }
这与上面的例子相同吗?它是否严格符合规定?注意,我不关心它是否在你最喜欢的编译器中编译,我只询问标准。
是的,正如@Captain Obvlious所说,c++只关心参数的类型。c++标准委员会的文件在此公开供您参考。
3.6.1 Main函数
- 实现不能预先定义main函数。这函数不应过载。它的返回类型应为typeInt,但它的类型是由实现定义的。所有实现应该同时允许
—返回int和
的函数—函数(int,指向char的指针)返回int
对,很有道理。
首先,C++11 3.6.1 /2
声明main()
的允许形式,包括两种规范形式:
实现不能预先定义main函数。此函数不得重载。它的返回类型为int,否则它的类型是实现定义的。所有实现应允许以下两个main定义:
int main() { /* ... */ }
andint main(int argc, char* argv[]) { /* ... */ }
然后,在C++11 8.3.5 Functions /11
中,它声明函数定义实际上不需要参数名:
标识符可选地作为参数名提供;如果在函数定义(8.4)中出现,则命名一个形参(有时称为"形式实参")。
然而,由于缺少名称意味着您不能访问变量,因此使用不包含它们的规范形式可能是更好的主意:
int main() { ... }
相关文章:
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 是否可以对零模板参数进行模板专门化
- 函数作为模板参数,是否对返回类型强制约束
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- 函数是否可以访问传递给main()的参数
- 在C++中,使用带有 std::optional 参数的函数<T>来表示可选参数是否有意义?
- 如何检查给定的参数是否为 cv::noArray()?
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 如果返回 -1,时间() 的参数是否被修改?
- 用于检查值是否为其任何参数的帮助程序函数
- 将类型声明为类型模板参数的模板参数的一部分是否合法?
- 模板化检查是否存在带有参数列表的类成员函数?
- 我如何知道作为参数的size_t在函数中是否有效?
- 是否可以在C++中有一个"generic"模板参数,该参数可以是非类型模板参数或类型?
- 是否可以就地构造一个固定大小的数组作为函数参数?
- C++方法是否可以根据传递给构造函数的参数具有不同的返回类型?
- 是否可以在运行时强制转换模板参数?
- 是否可以在不填充自己的参数的情况下将模板函数作为参数传递?
- 编译器是否强制根据模板参数计算表达式?
- C++中大多数/所有 setter 函数的参数是否应该写为常量引用?