读书人

询问:在需要返回“数组”引用时怎么确

发布时间: 2013-08-23 15:57:36 作者: rapoo

询问:在需要返回“数组”引用时如何确保越界错误被及时发出
在需要返回“数组”引用时,哪种返回方式更好呢?或有没有更好的返回方式呢?


#include <iostream>
#include <vector>
#include "assert.h"

using namespace std;

class Arr
{
vector<int> li;

public:
Arr() {};
~Arr() {};

void add(int v)
{
li.push_back(v);
};

const int& get(int idx)
{
if(!(li.size() > (unsigned int)idx))
{
// 此处会CRASH!!!
{
// 方案1
return *(li.end());
}
//{
//// 方案2
//assert(0);
//}
}

return li[idx];
};
};

int main(int argc, char* argv[])
{
Arr arr;

for(int i = 0; 10 > i; ++i)
{
arr.add(i);
}

// 非法操作:取越界的数据。
int temp = arr.get(10);

cout<<temp<<endl;

getchar();

return 0;
}
引用 越界 返回值
[解决办法]
学 vector::at,idx 越界了就扔异常呗。
[解决办法]
不在乎性能的话,可以使用异常机制,一样可以将选择权交给调用者。
[解决办法]
片面代码,没有哪种好与坏!

只是不同的地方,需要运用不同的方式来处理返回,
看代码中具体的需求!
[解决办法]
这种情况下在入口作assert检查或者异常均可。但绝不应该返回一个所谓的错误码,将正常值与错误码通过同一个出口返回其实属于一种反模式行为,会妨碍函数的正常使用,应该尽量避免,除非无任何其它选择。

读书人网 >C++

热点推荐