为什么C ++不支持函数返回数组?

某些语言使您可以像正常函数一样声明一个函数,该函数返回一个数组,例如Java:


public String[] funcarray() {

   String[] test = new String[]{"hi", "hello"};

   return test;

}

为什么C ++不支持类似的东西int[] funcarray(){}?您可以返回一个数组,但是创建这样的函数确实很麻烦。而且,我在某处听说字符串只是char的数组。因此,如果可以用C ++返回字符串,为什么不使用数组呢?


饮歌长啸
浏览 720回答 3
3回答

一只名叫tom的猫

C中的数组(以及C ++中的向后兼容性)具有与其余类型不同的特殊语义。特别是,对于其余类型,C仅具有按值传递语义,对于数组,按值传递语法的效果以一种奇怪的方式模拟了按引用传递:在函数签名中,类型为T的N个元素的类型数组的参数转换为指向T的指针。在函数调用中,将数组作为参数传递给函数将使数组衰减为指向第一个元素的指针,并且该指针将被复制到函数中。由于对数组进行了特殊处理-它们不能按值传递-因此也不能按值返回它们。在C中,您可以返回一个指针,在C ++中,您也可以返回一个引用,但是数组本身不能在堆栈中分配。如果考虑到这一点,这与您在问题中使用的语言没有什么不同,因为该数组是动态分配的,并且您仅返回指向它的指针/引用。另一方面,C ++语言为该特定问题提供了不同的解决方案,例如std::vector在当前标准中使用(内容是动态分配的)或std::array在即将到来的标准中使用(内容可以在堆栈中分配的,但是这样做可能会增加成本) ,因为在编译器无法删除副本的情况下,必须复制每个元素)。实际上,您可以通过使用现有的库(如)与当前标准使用相同类型的方法boost::array。
打开App,查看更多内容
随时随地看视频慕课网APP