解析数组 C++

Parsing array C++

大家好,我如何在 C++ (98) 上执行此操作。 它在 visual studio 或其他东西上运行良好,但在我想使用它的地方不起作用。

https://image.prntscr.com/image/loIxb-YRRiGh9XAFmZ_0dA.png

我正在尝试发送数组中包含其他值的多个函数,例如:

Print(xx, parse_array()); // No elements in parsearray all will be 0
Print(xx, parse_array(25)); // First element [0] will be 25, rest of them 0.



int * parse_array(int val1 = 0, int val2 = 0, int val3 = 0, int val4 = 0)
{
    int m_pDataArray[4] = {
        val1, val2, val3, val4
    };

    return m_pDataArray;
}

void Print(bool notImportant, int m_pDataArray[4])
{
    printf("m_pDataArray 0: %d", m_pDataArray[0]);
    printf("m_pDataArray 1: %d", m_pDataArray[1]);
    printf("m_pDataArray 2: %d", m_pDataArray[2]);
    printf("m_pDataArray 3: %d", m_pDataArray[3]);
}

Print(true, parse_array(10, 20, 30);
Print(true, parse_array(10);
Print(true, parse_array());

您正在 return 获取 parse_array 中局部变量的地址。这是未定义的行为,对象 int m_pDataArray[4] 在您 return 从函数中编辑后不再存在,您 return 的指针立即失效。未定义的行为可以做任何事情,包括有时在某些计算机上工作但在另一台计算机上不能工作,就像您所描述的那样。

int [] 没有值语义,你不能轻易 return 它。请改用 std::array

#include <array>

std::array<int, 4> parse_array(int val1 = 0, int val2 = 0, int val3 = 0, int val4 = 0)
{
    std::array<int, 4> m_pDataArray = {
        val1, val2, val3, val4
    };

    return m_pDataArray;
}

否则,您将需要return 动态分配缓冲区,然后记得删除它们。最简单的方法是使用 std::unique_ptr 但 C++98 中不存在这些方法。

编辑:我似乎忘记了在 C++ 11 中添加了 std::array。您可以使用 std::vector 获得相同的结果。

#include <vector>

std::vector<int> parse_array(int val1 = 0, int val2 = 0, int val3 = 0, int val4 = 0)
{
    std::vector<int> m_pDataArray;
    m_pDataArray.push_back(val1);
    m_pDataArray.push_back(val2);
    m_pDataArray.push_back(val3);
    m_pDataArray.push_back(val4);

    return m_pDataArray;
}