读书人

为何不能将数组的值作为参数

发布时间: 2013-07-08 14:13:00 作者: rapoo

为什么不能将数组的值作为参数?
为什么只能传递数组的首地址?
[解决办法]
数组除了初始化之外不能整体操作

sizeof等编译期行为会把数组名作为数组本身来理解,在运行时,除了初始化之外,数组名被使用时会自动转化为指向首元素的指针
在函数参数压栈之前,就把数组名作为一个指针来看待了
[解决办法]

引用:
string 是可以传值的,我试过了。容器好像也是可以传值的,试没试我忘了。

所以提倡传容器的时候传引用,避免复制导致性能降低
[解决办法]
引用:
Quote: 引用:

数组有可能很大, 传值的话拷贝代价很高.
而且参数要放栈里面, 栈大小有限的, 太大的数组拷贝直接就把栈溢出了.

某些对象也可能很大,为什么对象就可以直接传值呢?

大对象传值一样会有这些问题的.
不过一般来说, 对象的数据如果太大, 都应该从堆中申请内存, 对象本身只保存一个指针, 就不大了.
主要是, 对象可以控制, 你可以重载拷贝构造函数, 重载 operator== 之类的来控制拷贝行为.
数组就没法了, 只能硬拷.
[解决办法]
还有一个原因就是要兼容 C 语言.
C 语言已经这样做了, C++ 只能继承过来.
而对象是 C 里面没有的, C 里面的结构体也不允许传的, C++ 才有机会扩展它.

读书人网 >C++

热点推荐