C ++引用主要参数

时间:2014-05-05 22:06:07

标签: c++ parameter-passing main

我已为int main (int argc, char *argv[])阅读the libc reference,以及第3.6.1节"主要功能"在current working standard of the C++ ISO documentation。我还读了很多关于参考文献的内容。我知道他们不能被重新分配,他们必须只有一层深,等等。

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

我的意思是为什么有一个数组(char ** argv)不是程序所有并且可以在运行时更改/移动COULD而不是内存,如果没有程序&而无法修改它的定义#39;同意和正确处理(例如通过信令)?我错过了什么?

3 个答案:

答案 0 :(得分:3)

首先,考虑char*表示c_string,并且很明显为什么您需要int main(int argc, c_string argv[])int main(int argc, c_string& argv)。毕竟,程序可以使用多个参数。

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

假设参数数组不属于程序,这种假设完全是假的。 1999年和2011年的C标准明确指出:

  

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

我的C ++ 1y标准草案副本没有任何相反的说法。

答案 1 :(得分:2)

正如@Red Alert所说,你已经混淆了" main"的重新声明。但我会回答我的想法。

程序参数由操作系统提供,因此实际上并非由程序拥有。请记住,C / C ++旨在降低级别和效率,因此应避免使用额外的参数副本。我还没有看到有人在正在运行的程序中实际更改它们,但有几种方法可以用于Linux在程序之外检索它们。

还要考虑与C的兼容性,你还没有得到"&"以这种方式在C和" main"声明继承自C.

答案 2 :(得分:1)

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

  

不应引用引用,不引用运行时绑定数组,没有引用数组,也没有引用指针。

其次,即使存在这样的事情,向后兼容性要求也会对这种变化产生极大的影响,这会在没有充分理由的情况下使用int main(int argc, char *argv[])破坏大量现有代码。