某些语言使您可以像正常函数一样声明一个函数,该函数返回一个数组,例如Java:public String[] funcarray() { String[] test = new String[]{"hi", "hello"}; return test;}为什么C ++不支持类似的东西int[] funcarray(){}?您可以返回一个数组,但是创建这样的函数确实很麻烦。而且,我在某处听说字符串只是char的数组。因此,如果可以用C ++返回字符串,为什么不使用数组呢?
3 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
C中的数组(以及C ++中的向后兼容性)具有与其余类型不同的特殊语义。特别是,对于其余类型,C仅具有按值传递语义,对于数组,按值传递语法的效果以一种奇怪的方式模拟了按引用传递:
在函数签名中,类型为T的N个元素的类型数组的参数转换为指向T的指针。在函数调用中,将数组作为参数传递给函数将使数组衰减为指向第一个元素的指针,并且该指针将被复制到函数中。
由于对数组进行了特殊处理-它们不能按值传递-因此也不能按值返回它们。在C中,您可以返回一个指针,在C ++中,您也可以返回一个引用,但是数组本身不能在堆栈中分配。
如果考虑到这一点,这与您在问题中使用的语言没有什么不同,因为该数组是动态分配的,并且您仅返回指向它的指针/引用。
另一方面,C ++语言为该特定问题提供了不同的解决方案,例如std::vector
在当前标准中使用(内容是动态分配的)或std::array
在即将到来的标准中使用(内容可以在堆栈中分配的,但是这样做可能会增加成本) ,因为在编译器无法删除副本的情况下,必须复制每个元素)。实际上,您可以通过使用现有的库(如)与当前标准使用相同类型的方法boost::array
。
添加回答
举报
0/150
提交
取消