小编Twa*_*kar的帖子

在C ++中按值传递指针吗?

请考虑以下函数定义:

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)

我需要帮助来清除我的一些困惑。

  1. 当控件在里面时foo(),是a == *ptr && a == 1吗?
  2. 当控件在里面时bar(),是b == ptr吗?
  3. 当控件在里面时bar(),是&b == &ptr吗?
  4. 如果您对Q.3的回答是否定的,那么C ++中甚至有什么可以作为按引用调用的?看起来指针仍按值传递,但现在我们将存储的内容(到的内存地址new int(1)ptr存储在另一个变量中。这是因为在这种情况下复制了ptr,就像在Q.1中那样,但是整数值恰好是一个内存地址?

c++ pointers pass-by-value

4
推荐指数
2
解决办法
163
查看次数

在C++中设计消息传递系统时使用void指针有多"安全"?

我正在尝试在我的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 *真的是一种不安全的方法来实现这样的功能吗?有没有更好的方法来实现这种松散的类型检查?

c++ messaging void-pointers

1
推荐指数
1
解决办法
177
查看次数

标签 统计

c++ ×2

messaging ×1

pass-by-value ×1

pointers ×1

void-pointers ×1