数组不能被拷贝,所以返回值不能是数组类型。
但是我们可以使用返回指针的方式来实现返回数组的目的
声明一个返回数组指针的函数
int (*fun(int i))[10]; // func(int i) 表示调用func函数时需要一个int类型的实参 // (*func(int i)) 意味着我们可以对函数调用的结果执行解引用操作 // (*func(int i))[10] 表示解引用func的返回值将得到大小是10的数组 // int (*func(int i))[10] 表示数组中的元素是int类型
返回值是int类型的数组的指针,数组的大小是10
使用尾置返回值类型 C++11
对复杂的返回值类型比较有用。
开头auto的意义就在于表示该函数应该有一个后置返回值类型
auto func(int i) -> int(*)[10];
使用decltype
int odd[] = {1,3,5,7,9}; int even[] = {0,2,4,6,8}; decltype(odd) *arrPtr(int i) { return (i % 2) ? &odd : &even; }
decltype的含义就在于反解出表达式的类型,并将之作为一个类型声明来使用