【发布时间】:2017-05-13 20:26:03
【问题描述】:
计算机如何确保不使用该结构的对象就不能访问该结构的成员? 也许这措辞不好,所以这里有一个例子: 我们有这个结构:
struct products
{
int a;
int b;
} apples;
这只能通过结构的对象访问,在本例中为apples:
int main ()
{
apples.a = 20; //the member a can be accessed through apples and a would be another variable if accessed through another object, why is that?
return 0;
}
课程也是如此...
那么计算机(不确定是什么在处理这个问题)如何确保products 的成员只能通过该结构或类(类型)的对象进行访问?
谢谢!
【问题讨论】:
-
计算机处理 0 和 1,它们不关心您如何访问内容。这是编译器的工作。如果您以“错误”的方式(违反语言的规则)执行此操作,编译器会警告您或向您抛出错误
-
嗯,当然 apples.a 表示苹果的 a,而 pears.a 表示别的意思,因此它不会访问苹果的 a...怎么可能不清楚呢? ...如果您的意思是在运行时,则计算机无法确定。在代码中没有“apples.a”的情况下访问 a 是完全可能的,并且是一个有效的用例。
-
所有花哨的
struct products {} apples;对计算机来说只是“meh”,因为它不理解它。它只为你,一个人类,使用。所有这些对象的概念,structs、类、整数、doubles 等等 - 所有这些仅供您理解和使用,计算机并不关心。 -
@deviantfan 说,操作系统的 vmm 应该防止您在运行时发生严重的违规行为,让您尝试访问映射到您的进程的地址。
标签: c++