Ich habe ein wenig Mühe herauszufinden, genau wie const in einem bestimmten Fall gilt. Hier ist der Code, den ich habe:Const Struct &
struct Widget
{
Widget():x(0), y(0), z(0){}
int x, y, z;
};
struct WidgetHolder //Just a simple struct to hold four Widgets.
{
WidgetHolder(Widget a, Widget b, Widget c, Widget d): A(a), B(b), C(c), D(d){}
Widget& A;
Widget& B;
Widget& C;
Widget& D;
};
class Test //This class uses four widgets internally, and must provide access to them externally.
{
public:
const WidgetHolder AccessWidgets() const
{
//This should return our four widgets, but I don't want anyone messing with them.
return WidgetHolder(A, B, C, D);
}
WidgetHolder AccessWidgets()
{
//This should return our four widgets, I don't care if they get changed.
return WidgetHolder(A, B, C, D);
}
private:
Widget A, B, C, D;
};
int main()
{
const Test unchangeable;
unchangeable.AccessWidgets().A.x = 1; //Why does this compile, shouldn't the Widget& be const?
}
Grundsätzlich habe ich eine Klasse namens Test. Es verwendet intern vier Widgets, und ich brauche es, um diese zurückzugeben, aber wenn Test const deklariert wurde, möchte ich, dass die Widgets auch const zurückgegeben werden.
Kann mir jemand erklären, warum der Code in main() kompiliert?
Vielen Dank.
Neue Widgets werden nicht in WidgetHolder erstellt werden; Die Member sind Referenzen, aber die Konstruktorargumente sind Kopien. –
Patrick du irrst dich. Der Konstruktor erstellt neue Widgets, und die Referenzen sind Verweise auf diese neuen Widgets. Er erhält keine Referenzen zu seinen Original-Widgets. –