解析数组 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;
}
大家好,我如何在 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;
}