#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];
}
};
int main() {
Array<int> ia;
Array<float> fa;
for(int i = 0; i < 20; i++) {
ia[i] = i * i;
fa[i] = float(i) * 1.414;
}
for(int j = 0; j < 20; j++)
cout << j << ": " << ia[j]
<< ", " << fa[j] << endl;
} ///:~
Z thinking in C++
Zwróć uwagę, że w przypadku gdy indeks jest niepoprawny do wydrukowania komunikatu jest używana funkcja require(). Ponieważ operator jest funkcja inline można używać takie sposobu w celu upewnienia się, że nie następuje naruszenie granic, a z gotowego kodu usunąć funkcję require()
a)Dlaczego ten operator jest inline, a inne nie są, jaki jest tego powód?
b) w sumie, wyszło też drugie pytanie, niektóre spośród operatorów muszą być definiowane w klasie, a niektóre poza nią. Dlaczego? Czy ma to związek z tą inlinowosćią, np. opertora [].
2) Do cytatu:
Dlaczego inlinowość funkcji nam to umożliwia. Czegoś nie wiem? Ja na funkcje inline patrzę tak:
Jeżeli funkcje są małe i nie ma sensu skakać w inne miejsce w pamięci to użyj inline. To myślenie ma jakieś defekty?