假设我有以下两个类定义(只有访问说明符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;
};
编译器是否认为这些类在编译器生成的代码方面是“不同的”?(或者换句话说:除了访问权限检查之外,编译器是否对它进行了不同的处理?)
这与以下问题相同:以下代码会导致诸如未定义行为之类的问题吗?(前提是它在不同的单元中编译,有或没有定义X,然后链接在一起。)
class MyClass {
public:
void foo();
#ifdef X
private:
#endif
void bar();
private:
int member;
};
我对独立于编译器的答案以及特定于 GCC 的答案感兴趣(因为这是我的主要目标编译器)。
package private
如果我们想通过在“包”中定义一个特定的宏来“模拟”诸如 C++ 中的 Java 世界之类的东西,这将变得很有趣。