首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

询问:在需要返回“数组”引用时怎么确保越界异常被及时发出

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

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


#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检查或者异常均可。但绝不应该返回一个所谓的错误码,将正常值与错误码通过同一个出口返回其实属于一种反模式行为,会妨碍函数的正常使用,应该尽量避免,除非无任何其它选择。

热点排行