我从 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(使用前将#替换为@)