C++ 检查函数的两个版本

标签 c++ arrays function pointers point

我正在用 C++ 编写练习,并且编写了一段在我看来有效的代码,但我不确定,因为我仍然是初学者,有人可以检查一下并告诉我是否它们是否相同。

解决方案代码:

Point *PointArray::get( const int pos) {
    return pos >= 0 && pos < size ? points + pos : NULL;
}

我的代码是:

Point* PointArray::get (const int position) {
    return &(data[position]);
}

我意识到在我的代码中我必须检查条件来检查是否返回空指针,但除此之外,我的版本是否与points + pos相同

pointsdata 是 Point 类的数组,我将其命名为“我的数据”,解决方案将其命名为“点”。

编辑:

我添加条件后的代码:

Point* PointArray::get (const int position) {
    return ((position >= 0 && position < size) ? &(data[position]) : NULL);
}

最佳答案

简而言之,他们做同样的事情。但还是有一些区别:

1) 解决方案代码检查数组边界。您的解决方案没有。

2) 该解决方案使用指针算术并避免额外的取消引用/寻址操作(大多数编译器会为您优化此操作)。 请参阅Efficiency: arrays vs pointers .

关于C++ 检查函数的两个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10266300/

相关文章:

c++ - 如何在两点之间强制执行约束

php - 以查询形式回显数组值

c - 移动数组的列

c++ - C++ 中优雅的函数定义

function - elisp:测试一个对象是一个函数

c++ - std::atomic 变量应该使用 "normal"语法还是 "load"和 "store"?

c++ - 为什么 CPP Check 没有显示任何错误?

C++:opencv 上的 libpng 冲突

c# - 当可能为空字符串值时,将字符串数组值转换为 int

c++ - 两个数组是否相等函数c++