次の 2 つのクラス定義があるとします (アクセス指定子のみbar()
が異なり、他のすべては同じです)。
class MyClass {
public:
void foo();
void bar(); // bar() is public
private:
int member;
};
と
class MyClass {
public:
void foo();
private:
void bar(); // bar() is private
int member;
};
コンパイラは、コンパイラが生成するコードに関してクラスが「異なる」と見なしますか? (つまり、コンパイラは、アクセス許可のチェックとは別に、別の方法で処理しますか?)
これは次の質問と同じです: 次のコードはundefined behaviorのような問題を引き起こしますか? (ただし、X が定義されているかどうかに関係なく、異なるユニットでコンパイルされ、後で相互にリンクされます。)
class MyClass {
public:
void foo();
#ifdef X
private:
#endif
void bar();
private:
int member;
};
コンパイラに依存しない回答と、GCC 固有の回答に興味があります (これが私の主要なターゲット コンパイラであるため)。
package private
「パッケージ」内で特定のマクロを定義することにより、C++ で Java の世界のようなものを「シミュレート」したい場合、これは興味深いものになります。