C++ 正确定义并从C++;

C++ 正确定义并从C++;,c++,arrays,function,c++11,return,C++,Arrays,Function,C++11,Return,如果我有以下计划: #include <iostream> // being lazy and using all std just for example. using namespace std; int (*some_func())[10] { int arr[10]= {0,1,2,3,4,5,6,7,8,9}; return arr; } int main() { int arr2[10] = some_func(); for(aut

如果我有以下计划:

#include <iostream>

// being lazy and using all std just for example.
using namespace std;

int (*some_func())[10]
{
    int arr[10]= {0,1,2,3,4,5,6,7,8,9};

    return arr;
}

int main()
{
    int arr2[10] = some_func();
    for(auto i : arr2)
        cout << i << endl;

    return 0;
}
#包括
//例如,懒惰和使用所有std。
使用名称空间std;
int(*some_func())[10]
{
int-arr[10]={0,1,2,3,4,5,6,7,8,9};
返回arr;
}
int main()
{
int arr2[10]=某些函数();
用于(自动i:arr2)

在C++11中,您应该使用容器

  • std::array
    像其他容器一样提供了许多有用的成员函数,例如-
    std::array::at(pos)

    intmain()
    {
    std::阵列arr;
    在(42)处到达=42;
    }
    
    如果
    pos>=arr.size()
    ,它将抛出异常


  • 你是被迫使用数组还是可以返回一个std::vector?你真的试过编译代码吗?我的大脑编译器说你会在
    int arr2[10]=some_func()上出错;
    行。在
    返回arr;
    行上,还有一条关于优秀编译器的警告。如果您使用传统意义上的“array”,就像在C中使用的那样,则没有从函数返回数组的正确方法。至少不能直接返回。您可以返回指向数组的指针或指向数组第一个元素的指针。或者您可以返回一个包含数组作为成员的类。但您不能返回数组,因为这要求数组是可复制的,而事实并非如此。这本质上是对内置数组类型的一个实验,以了解是否有什么方法可以返回它们。作为对Micha的回复,我不是被迫返回的,更具体地说,我希望k现在,如果有一种方法可以做到这一点,我知道使用std::array或std::vector会很好。值得注意的是,您的
    返回
    行不仅需要
    std::array
    ,而且还需要统一的初始化,这是一些编译器(即MSVC)所需要的现在还不支持。我知道基本上没有真正的方法返回内置类型数组而不进行真正的修改,这是一个遗憾,但如果这样做对我来说没问题。:@BenCrazedUpEuden,我已经用一些信息更新了帖子,为什么
    std::array
    更可取。
    #include <iostream>
    #include <array>
    
    std::array<int, 10> get_array()
    {
        return {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    }
    
    int main()
    {
        auto arr = get_array();
        for(const auto& elem: arr)
            std::cout << elem << std::endl;
    }
    
    int* array()
    {
        // int arr[10]; // <-- DO NOT USE IT!
        int* arr = new int[10]; // Better, but still ugly
        return arr;
    }
    
    int main()
    {
        auto arr = array();
    }
    
    std::unique_ptr<int[]> array()
    {
        std::unique_ptr<int[]> arr(new int[10]);
        return arr;
    }
    
    int main()
    {
        std::array<int, 10> arr1{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}};
        std::array<int, 10> arr2;
    
        arr2 = arr1;
    
        arr1.at(4) = 42;
    
        // arr1: {1, 2, 3, 4, 42, 6, 7, 8, 9, 10}
        // arr2: {1, 2, 3, 4, 5,  6, 7, 8, 9, 10}
    }
    
    int main()
    {
        std::array<int, 10> arr;
        arr.at(42) = 42;
    }