c语言如何实现变量,C中如何实现私有变量的访问?

如果你的意思是实例的私有成员,那么在运行时没有任何保护.所有的保护都是在编译时进行的,如果你知道如何布置在内存中,你可以随时获得一个类的私人成员.这需要平台和编译器的知识,并且在某些情况下甚至可能依赖于编译器设置,如优化级别.

例如,在我的Linux / x86-64 w / GCC 4.6中,以下程序打印出您期望的内容.这绝对不是便携式的,并且可能会在异乎寻常的编译器上打印意外的事情,但即使是那些编译器也会有自己的具体方式来访问私人成员.

#include

class FourChars {

private:

char a, b, c, d;

public:

FourChars(char a_, char b_, char c_, char d_)

: a(a_), b(b_), c(c_), d(d_)

{

}

};

int main()

{

FourChars fc('h', 'a', 'c', 'k');

char const *p = static_cast(static_cast(&fc));

std::cout << p[0] << p[1] << p[2] << p[3] << std::endl;

}

(复杂的演员在那里,因为void *是任何指针可以被转换的唯一类型,然后可以将void *转换为char *而不调用strict aliasing rule.在实践中也可能使用单个reinterpret_cast我从来不玩这种肮脏的技巧,所以我不太熟悉如何以最快的方式做到这一点:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值