返回对特定大小的数组的引用,而不显式声明返回类型的大小

led*_*ter 15 c++ return-type c++11 c++14

我有以下功能:

... getX()
{
    static int x[] = {1, 2, 3};
    return x;
}
Run Code Online (Sandbox Code Playgroud)

我想要它的返回类型,int(&)[3]但不要明确指定大小(3).

我怎么做?

(请不要问我为什么要那样.)

UPD

嗯,好的,我需要将结果传递给模板函数int(&x)[N]作为参数(我不想将大小明确地传递给该模板函数),所以我看不到返回一对的解决方案如何工作...

Vit*_*meo 18

在C++ 14中:

auto& getX()
{
    static int x[] = {1, 2, 3};
    return x;
}
Run Code Online (Sandbox Code Playgroud)

另外,考虑使用std::array而不是C风格的数组.


我目前无法想到任何符合标准的C++ 11解决方案.这里有一个使用复合文字,假设你的目标是不重复元素并推导出一个引用数组:

#include <type_traits>

#define ITEMS 1, 2, 3
auto getX() -> decltype((int[]){ITEMS})
{
    static int x[] = {ITEMS};
    return x;
}
#undef ITEMS

int main()
{
    static_assert(std::is_same<decltype(getX()), int(&)[3]>{});
}
Run Code Online (Sandbox Code Playgroud)