#include <string>
#include <iostream>
#include <vector>
using namespace std;
class Test {
public:
int testing() {
Test t;
return t.x;
}
private:
int x = 0;
};
int main() {
Test a;
cout << a.testing() << endl;
}
我不知道我可以在Test
的类定义中访问t
的私有数据成员x
(Test
的实例不是this
)。为什么我被允许在示例代码中使用t.x
?
通俗地说,c++的private
是" class-private ";而不是"object-private">
作用域与源代码的词法元素相关联,而不是与运行时实体本身相关联。此外,编译后的代码几乎不知道编译源中的逻辑实体。由于这个原因,可访问性仅在词法作用域级别上强制执行。在类的作用域中,类类型的任何对象都可以访问其私有成员。
另外,否则c++将无法作为一个整体工作。如果在每个对象的基础上检查可访问性,则不能编写复制构造函数或赋值操作符。这些操作需要访问源对象的成员,以便初始化/覆盖目标对象。