const char* myf()
{
return "string";
}
但它不适用于数组。它看起来像特殊丑陋的语言设计限制。
答案 0 :(得分:4)
Litteral字符串是C ++中的特殊动物。它们的行为就像它们指向静态const数组一样。当你声明函数返回const char *
时,你会得到一个完美定义的行为。
但同样可以使用任何其他数组,只要它是静态的:
const int * myintfunc() {
static const int arr[] = { 1, 2, 3};
return arr;
}
将具有相同的定义行为,并在每次调用时返回指向包含整数1,2和3的相同数组的(第一个元素)的指针。
如果它不是const,那么行为也将被完美定义,并且每次调用都会返回指向同一数组的第一个元素的指针。只需修改数组的内容即可。
如果数组有自动存储,该函数仍将返回指向其第一个元素的指针,但是当函数返回并且返回的指针是悬空时,数组将被销毁(指向到达已达到其寿命终点的对象),并使用它是未定义的行为。