0

以下代码来自 Thinking in C++。作者提到“由于 operator[] 是内联的,因此您可以使用这种方法来保证不会发生数组边界违规,然后删除运输代码的 require()。” 这里提到了内联函数的什么特性?谢谢!

#include "../require.h"
#include <iostream>
using namespace std;

template<class T>
class Array {
  enum { size = 100 };
  T A[size];
public:
  T& operator[](int index) {
    require(index >= 0 && index < size,
      "Index out of range");
    return A[index];
  }
};
4

1 回答 1

1

作者提到了inline在调用处要扩展的函数的特性,就好像你写了它们的主体来代替调用一样。这保证不会损失效率——即使是与在现代硬件上调用函数相关的微小效率损失。此外,当索引运算符内联扩展时,编译器可能会更好地优化代码,因为优化器会知道函数内部代码的性质。

require从运输代码中删除 而言,您需要在当前实现中手动执行此操作。您还可以使用条件编译来删除生产代码中的边界检查。

于 2013-04-07T21:03:33.227 回答