[*] Kann Speicherspezifizierer nicht verwenden (
Code: Select all
static
Wenn in einer Klasse verwendet wird, wenn die Datenelemente privat sind, sollten Strukturbindungen, die in Methoden oder Freunden verwendet werden, nicht funktionieren.
Code: Select all
#include
struct Point {
int x, y;
};
class AClass {
private:
std::string mString;
int mId;
public:
void aMethod(const AClass& p) {
auto s = p.mString;
auto [str, id] = p; // this should not work, because we're
// accessing private memebers
}
friend void aFriendFunction(const AClass& p) {
auto s = p.mString;
auto [str, id] = p; // Likewise as aMethod
}
};
int main() {
Point p{3, 5};
// This shouldn't work in C++17
static auto [u, v] = p; // This gives a warning, compilation depends
return 0;
}
g++ main.cpp -o out -std=c++17
< /code>
gibt mir eine Ausgabe, die gültig und ohne Probleme erscheint. Warum funktioniert das? Vermisse ich etwas? < /P>
Ich bemerke auch das in GCC 7.1. Dies gibt tatsächlich den erwarteten Fehler (mit einem Online -Compiler). Aber wenn ich zu meiner Version von GCC (13.3.0) wechsle, bekomme ich die oben genannte Warnung. Dies wirft für mich die Frage auf, wie sich die strukturierte Bindung in derselben C ++ - Version verändert hat.