c++对主形参的引用



我已经阅读了int main (int argc, char *argv[])的libc参考,以及c++ ISO文档中当前工作标准中的3.6.1节"Main function"。我还读了一些关于参考文献的资料。我理解它们不能被重新分配,它们必须只有一层深度,等等。

也就是说,为什么标准int main (int argc, char *argv[])而不是int main (int argc, char * &argv)是一个"数组"/数据块,保存对参数的引用?

我的意思是为什么数组数组(char **argv)不属于程序,可以在运行时更改/移动,而不是内存,根据其定义,如果没有程序的同意和适当的处理(例如通过信号)不能修改?我错过了什么?

首先,考虑char*意味着c_string,那么您需要int main(int argc, c_string argv[])而不是int main(int argc, c_string& argv)的原因就很明显了。毕竟,程序可以接受多个形参。

由于引用数组(如果允许的话)每个索引只能保存一个字符,由于引用不能用于查找下一个字符(如果不接受它的引用,从而将其转换为指针),因此这也没有任何意义。

参数数组不为程序所有的假设为假。1999年和2011年的C标准明确规定:

形参argc和argv,以及argv数组所指向的字符串可被程序修改,并在程序之间保留它们最后存储的值启动和程序终止。

而我的c++标准草案并没有说相反的话。

正如@Red Alert所说,你混淆了"main"的重新声明,但我将回答我认为你问的问题。

程序参数由操作系统提供,因此实际上不属于程序所有。请记住,C/c++旨在实现低层次和高效,因此应该避免额外的参数副本。我还没见过有人在运行的程序中更改它们,但是在Linux中有几种方法可以在程序外检索它们。

还要考虑与C的兼容性,在C中没有这样的"&"操作符,并且"main"声明继承自C。

首先,c++中没有"引用数组"这样的东西。标准明确禁止它(§8.3.2 [dcl.ref]/5):

不能有对引用的引用,不能有对运行时约束的数组的引用,不能有引用的数组,不能有指向引用的指针。

第二,即使有这样的事情,向后兼容性需求也会对这样的更改产生极大的影响,这会毫无理由地破坏大量使用int main(int argc, char *argv[])的现有代码。

相关内容

  • 没有找到相关文章

最新更新