调试版

时间:2016-12-29 12:59:13

标签: c++ c++11

我有以下代码在调试版本中抛出超出范围的异常但在发布版本中正常工作

typedef unsigned int uint;
std::array<uint, 4> expArray = {51,639,398,744};
unsigned dataArraySize = sizeof(expArray) / sizeof(uint) ;
std::vector<uint> expected ;
std::copy(&expArray[0], &expArray[dataArraySize], back_inserter(expected));

3 个答案:

答案 0 :(得分:4)

首先按预期使用标准库:

std::vector<uint> expected(begin(expArray), end(expArray));

令人遗憾的事实是,sizeof(std::array<uint, 4>) == sizeof(uint[4])并非必须坚持。因此,您无法像常规的C风格数组那样计算大小。

如果您希望对代码进行的更改最少,请使用expArray::size()std::tuple_size<decltype(expArray)>::value

答案 1 :(得分:1)

使用begin()end()方法代替原始指针。如果您想获得容器的大小,请使用size()方法。

std::array<uint, 4> expArray = {51,639,398,744};
std::vector<uint> expected;
std::copy(expArray.begin(), expArray.end(), back_inserter(expected));

或更简单的方法(不适合所有情况)

std::vector<uint> expected(std::begin(expArray), std::end(expArray));

答案 2 :(得分:1)

这一行错了:

 unsigned dataArraySize = sizeof(expArray) / sizeof(uint) ;

应该是:

std::size_t dataArraySize = std::tuple_size<decltype(expArray)>::value;