gcc dokumentacja __attribute__((pure))
stanów:adnotacji const funkcji członka z czystej atrybutu
Wiele funkcji nie mają skutków oprócz wartości zwracanej, a ich wartość powrotu zależy tylko od parametrów i/lub zmiennych globalnych. Taka funkcja może być przedmiotem wspólnej eliminacji wyrażeń i optymalizacji pętli, tak jak byłoby to możliwe w przypadku operatora arytmetycznego. Funkcje te powinny być zadeklarowane z atrybutem
pure
.
Co to znaczy, że zależy tylko od parametrów? Rozważmy:
struct Wrapper {
int i;
int get() const { return i; }
void set(int x) { i = x; }
};
Czy to ważne, aby oznaczyć Wrapper::get()
jako funkcja pure
członkiem? To zależy tylko od niejawnej instancji Wrapper
, ale dane mogą się zmienić.
Ten artykuł może być istotny pod adresem http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0078r0.pdf – Danh
Niejawny obiekt (ten) jest nadal parametrem. Składnia jest nieistotna. Zadzwoń, jeśli foo (x) lub x.foo() lub cokolwiek innego. –
@Danh Z artykułu nie jest całkowicie jasne, jaka jest odpowiedź na to pytanie. Wydaje się nieco niezobowiązujące. – Barry