C++ 中的访问说明符

2023-12-13

我从 BRUCE ECKEL'S THINKING IN C++ 中读到了以下陈述

1.访问说明符是结构的一部分,不影响对象
从“结构”创建

疑问:众所周知,访问块不是连续存储的, 访问说明符不是会改变对象在内存中的布局方式吗

2.所有的访问规范信息在程序运行前消失
(编译期间)。在运行的程序中,对象成为“存储区域”
仅此而已......因此我们可以打破所有规则并直接访问内存
就像你可以在c中一样

疑问:是否意味着可以直接访问私有成员?请帮我理解上面的说法

3.c++的设计是务实的,而不是追求抽象的处理

疑问:什么叫务实?


1)访问说明符是结构的一部分,不影响从“结构”创建的对象

实际上错误的是,同一访问特定中的数据成员的顺序(在布局中)(public, protected or private) 由它们在代码中的顺序决定,但是没有为具有不同说明符的数据成员指定顺序。

class Foo
{
public:
  int a;
  int b;
protected:
  int c;
  int d;
};

我们唯一知道的是a必须先来b and c必须先来d. abcd, acbd, acdb, cabd, cadb and cdab都是有可能的。

2)所有的访问规范信息在程序运行前消失 (编译期间)。在运行的程序中,对象成为“存储区域” 仅此而已..因此我们可以打破所有规则并直接访问内存 就像你可以在c中一样

这些信息仅在编译期间使用,但编译后会生成运行代码。因此编译可确保您不会访问private成员。但是,由于允许直接内存操作,因此您可以有效地访问private如果您愿意,可以更改成员或函数,但尝试手动执行此操作非常容易出错。

3)C++被设计为务实的,而不是渴望抽象真实的

务实意味着它面向实际使用,很少考虑纯粹的理论论证。根据计算机科学理论构建的语言包括 Haskell,它具有非常扎实的数学背景;另一方面,C++ 积累了用户认为有用的功能。

此外,C++ 不会向您隐藏低级细节(例如内存管理)。好的 C++ 代码通常将其留给编译器并使用习惯用法来尝试和抽象它(在某种程度上),但如果有必要,您总是可以更接近金属(甚至直接包括汇编代码)......有时(例如内存管理)你必须注意你正在做的事情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 中的访问说明符 的相关文章

随机推荐