为什么函数可以返回字符数组,但是不能返回其他类型的数组?

时间:2017-11-17 15:48:25

标签: c++

const char* myf()
 {
  return "string";
 }

但它不适用于数组。它看起来像特殊丑陋的语言设计限制。

1 个答案:

答案 0 :(得分:4)

Litteral字符串是C ++中的特殊动物。它们的行为就像它们指向静态const数组一样。当你声明函数返回const char *时,你会得到一个完美定义的行为。

但同样可以使用任何其他数组,只要它是静态的

const int * myintfunc() {
    static const int arr[] = { 1, 2, 3};
    return arr;
}

将具有相同的定义行为,并在每次调用时返回指向包含整数1,2和3的相同数组的(第一个元素)的指针。

如果它不是const,那么行为也将被完美定义,并且每次调用都会返回指向同一数组的第一个元素的指针。只需修改数组的内容即可。

如果数组有自动存储,该函数仍将返回指向其第一个元素的指针,但是当函数返回并且返回的指针是悬空时,数组将被销毁(指向到达已达到其寿命终点的对象),并使用它是未定义的行为。