Редактировать: Я только что понял гораздо более простой способ задать этот вопрос:
Учитывая следующие две структуры:
class Thing {public: int a; public: int b; public: int c;}
class Thing {public: int a, private: int b; public: int c;}
Являются ли участникиa
, b
и c
гарантированно находятся в одном и том же порядке в памяти для обоих этих определений?
Старый вопрос
Допустим, мыиметь этот код C ++ в fileA.cpp
:
class Thing
{
public:
int a;
double num;
Thing()
{
b = 10;
}
float getB()
{
return b;
}
private:
float b;
Thing * other;
}
void doSomething(Thing thing);
int main()
{
Thing thing;
doSomething(thing);
std::cout << thing.b;
}
И скажем, у нас есть этот код в fileB.cpp
:
class Thing
{
public:
int a;
double num;
Thing()
{
b = 10;
}
float getB()
{
return b;
}
float b;
private:
Thing * other;
}
void doSomething(Thing thing)
{
thing.b = 30;
}
Предполагая, что компилятор не будет жаловаться, будет ли этот кодработать как положено?То есть, является ли расположение данных структуры независимым от того, являются ли определенные компоненты общедоступными, частными или защищенными?
Редактировать: Чтобы сделать это более очевидным, единственная разница междуДва определения Thing
означают, что float b;
является частным в fileA.cpp
, но общедоступным в fileB.cpp
.