以下代码来自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];
}
};
答案 0 :(得分:1)
作者引用了要在调用站点扩展的inline
函数的功能,就像您编写了它们的主体来代替调用一样。这样可以保证不会降低效率 - 即使是与在现代硬件上调用功能相关的微小功能也是如此。此外,当索引运算符内联扩展时,编译器可能会更好地优化代码,因为优化器可以知道函数内部代码的性质。
至于从发货代码中删除require
,您需要在当前实施中手动执行此操作。您还可以使用conditional compilation删除生产代码中的边界检查。