返回信息流#ifdef __cplusplus
#define _ADDRESSOF(v) ( &reinterpret_cast<const char &>(v) )
#else
#define _ADDRESSOF(v) ( &(v) )
#endif
不明白这两个_ADDRESSOF有什么区别,请举个例子吧
这是一条镜像帖。来源:北邮人论坛 / cpp / #37356同步于 2010/4/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请问一段宏的含义
disk
2010/4/1镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
那他定义第一个_ADDRESSOF干嘛,直接用第二个不就可以了吗?(代码来自VC的某个头文件)
【 在 ericyosho 的大作中提到: 】
: 没觉得有啥区别。只是reinterpret_cast只有C++才有的。
意思就是,当使用C++的时候
_ADDRESSOF(v) 就相当于 ( &reinterpret_cast<const char &>(v) )
否则_ADDRESSOF(v)就相当于 ( &(v) )
...,麻烦你看懂我的问题再回答好吗?
【 在 eastdell 的大作中提到: 】
: 意思就是,当使用C++的时候
: _ADDRESSOF(v) 就相当于 ( &reinterpret_cast<const char &>(v) )
: 否则_ADDRESSOF(v)就相当于 ( &(v) )
条件编译,在使用c++的时候用第一个函数。
当然lz可能是问为什么c++中得用reinterpret_cast
主要是因为c++中引入了操作符重载,于是乎,就存在了重载operator&的可能e.g
class codebreaker {
public:
int operator&() const {
return 13;
}
};
那么你如果想取这个类的某个实例的地址时,简单的用&就无法取得其地址,所以需要利用c++版本的这个函数来获取一个变量的真实地址。
我是这么认为的,个人能力有限如果有误,请勿跨省......
有道理,谢谢
【 在 plmssc 的大作中提到: 】
: 条件编译,在使用c++的时候用第一个函数。
: 当然lz可能是问为什么c++中得用reinterpret_cast
: 主要是因为c++中引入了操作符重载,于是乎,就存在了重载operator&的可能e.g
: ...................
赞下,说得太对了
【 在 plmssc 的大作中提到: 】
: 条件编译,在使用c++的时候用第一个函数。
: 当然lz可能是问为什么c++中得用reinterpret_cast
: 主要是因为c++中引入了操作符重载,于是乎,就存在了重载operator&的可能e.g
: ...................