C++中如何返回数组本身而非指向数组的指针?
问题描述
我知道如何返回指向数组首元素的指针,但想了解是否可以返回数组本身而非指向它的指针。就像通过引用传递数组的方式:
void print_arr(int (&arr)[3]) { for(size_t i = 0; i < 3; ++i) std::cout << arr[i] << ' '; }
我原本尝试编写如下代码:
int(&)[3] func(int (&arr)[3]) { // some code... return arr; }
但该代码无法运行。
解决方案
你写的返回类型语法有误,C++中返回数组引用的正确语法需要将函数名包含在括号里,避免数组下标运算符的优先级干扰。
写法1:标准语法
int (&func(int (&arr)[3]))[3] { // 这里可以对arr做操作 return arr; }
写法2:用类型别名简化
为了让代码更易读,可以先给数组引用定义别名:
using IntArr3Ref = int(&)[3]; IntArr3Ref func(IntArr3Ref arr) { return arr; }
写法3:使用auto(C++14及以上)
如果编译器支持C++14,还可以用auto结合尾置返回类型:
auto func(int (&arr)[3]) -> int(&)[3] { return arr; }
写法4:用decltype(C++11及以上)
也可以借助decltype推导返回类型:
decltype(auto) func(int (&arr)[3]) { return arr; }
这些写法都能正确返回数组的引用,本质是修正了返回类型的语法结构,让编译器正确识别你要返回的是一个长度为3的int数组的引用。
内容的提问来源于stack exchange,提问作者Kesto2
相关产品推荐
相关产品推荐

