Sehr einfache Frage. Ist das C++ 11 gültig?Nicht-statische Mitglied Initialisierung von einem anderen nicht-statischen
struct Foo {
int bar = 1;
int baz = bar;
};
GCC (4.7.2) und Clang (3,1), die beide mit den pedantischen Einstellungen zu übernehmen:
-std=c++11 -Wall -W -pedantic
Intel C++ (13.0.1.117) nicht. Es bellt int baz = bar;
mit:
error: a nonstatic member reference must be relative to a specific object
Wer hat recht?
Falls Sie sich fragen, ich benutze diese für Code wie diesen, wo sie näher zusammen Initialisierungscode bringt, anstatt die letzte Zeile in den Konstruktor zu bewegen:
uint8_t colorR = -1;
uint8_t colorG = -1;
uint8_t colorB = -1;
uint8_t colorA = -1;
GLubyte RGBAVec[4] = {colorR, colorG, colorB, colorA};
Dank. Das sieht definitiv aus. Was ist mit "oder einer Klasse, die von dieser Klasse abgeleitet ist" gemeint? Wie ist es möglich, ein Mitglied mit einem Mitglied einer abgeleiteten Klasse zu initialisieren? Die abgeleitete Klasse wurde noch nicht deklariert, daher ist es nicht möglich, darauf zuzugreifen. –
@Nikos C. "oder einer von dieser Klasse abgeleiteten Klasse" bezieht sich auf "eine Klammer-oder-gleich-Initialisierung", was bedeutet, dass der Initialisierer derjenige ist, der in der derivierten Klasse ist. Grundsätzlich denke ich, dass es bedeutet, dass Sie nicht statische Datenelemente mit nicht statischen Datenelementen Ihrer übergeordneten Klassen initialisieren können. Es ist anders herum, als du es verstanden hast, was viel sinnvoller ist :) – Drax