请考虑以下函数定义:
int foo(int a);
int bar(int *b);
int main()
{
int *ptr = new int(1);
foo(*ptr);
bar(ptr);
}
Run Code Online (Sandbox Code Playgroud)
我需要帮助来清除我的一些困惑。
foo(),是a == *ptr && a == 1吗?bar(),是b == ptr吗?bar(),是&b == &ptr吗?new int(1))ptr存储在另一个变量中。这是因为在这种情况下复制了ptr,就像在Q.1中那样,但是整数值恰好是一个内存地址?我正在尝试在我的C++应用程序中实现通用消息传递系统.
该程序被分为不同的系统,处理渲染,图像加载等不同的事情.我希望它们能够将消息推送到消息堆栈中,并使用某种类型的数据进行传输.
为了实现这一点,我制作了一个允许这样的API:
MessageStack.add(System * sender,
System * receiver,
MessageCodeEnum message_type,
void * data);
Run Code Online (Sandbox Code Playgroud)
该变量message_type是一个枚举,它定义了所有消息命令,并且void * data应该是附加到消息的数据.这些消息以堆栈形式排列,并在每帧结束时进行评估.
假设要加载图像的renderer消息fileLoader.该renderer会添加一条消息,告诉fileLoader加载图像和消息将有一个void *在它里面,它实际上是一个const char *指向包含图像文件的路径为C字符串.
内部在处理该消息的功能的开关壳体块,我已经型铸这是一个消息数据void *到一个const char *使用普通的旧方式:
const char * temp = (const char *) data;
Run Code Online (Sandbox Code Playgroud)
现在这让我想到了这个问题.如果在任何消息事务中,程序知道正在传输什么类型的数据,这就是为什么我在输入类型时感到自信void *,那么使用void *真的是一种不安全的方法来实现这样的功能吗?有没有更好的方法来实现这种松散的类型检查?