Od początku czasów (odnosząc się do pierwszego C standardzie ++) można zadeklarować takie „dziwne” typy funkcyjne jak np
typedef int F() const;
Pomimo faktu, że powyższa deklaracja natychmiast nie pociąga za sobą żadnych zajęć , w tym przypadku końcowy const
może służyć tylko jako const-kwalifikacja niestatycznej funkcji składowej klasy. Ogranicza to użycie powyższej nazwy do deklaracji członków klasy. Na przykład, można go używać w następujący sposób
struct S {
F foo; // Declares an `int S::foo() const` member function
};
int S::foo() const { // Defines it
return 42;
}
F S::*p = &S::foo; // Declares 'p' as `int (S::*)() const` pointer
zauważyć, że jednak niejasne, jest to „klasyczny” C++ funkcja, która już w języku przez długi czas.
To, co masz w swoim przykładzie, to faktycznie to samo, ale z C++ 11 ref-qualifier zamiast kwalifikatora const
.
Chciałbym zamieścić link do ładnego podsumowania w [P0172R0] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0172r0.html). –
@ T.C. Dzięki, dodał wzmiankę. – hvd
Wierzę, że można również "przy użyciu A = int (int) &; struct Bob {Foo; }; '. – Yakk