用C ++思考,内联函数功能?

时间:2013-04-07 20:55:49

标签: c++ inline

以下代码来自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];
  }
};

1 个答案:

答案 0 :(得分:1)

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

至于从发货代码中删除require,您需要在当前实施中手动执行此操作。您还可以使用conditional compilation删除生产代码中的边界检查。