- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过在其文档的帮助下创建小程序来学习 libuv。请注意,我将通过 c++
语言而不是 c
使用它。这是我开始的 -
#include <iostream>
#include <uv.h>
int main() {
uv_loop_t *loop = malloc(sizeof(uv_loop_t));
uv_loop_init(loop);
std::cout << "Running loop" << std::endl;
uv_run(loop, UV_RUN_DEFAULT);
uv_loop_close(loop);
free(loop);
return 0;
}
并用 - g++ -std=c++14 -luv main.cpp
编译它,它应该将 a.out
作为输出文件,但它失败了错误-
invalid conversion from ‘void*’ to ‘uv_loop_t* {aka uv_loop_s*}
指向 malloc 的使用。我通过用旧的 libuv 方式替换这些行来确认它 -
uv_loop_t* loop = uv_loop_new();
...
uv_loop_delete(loop);
这不应该工作,但令人惊讶的是,在这里工作并编译得很好。
但我认为与其回避这个问题,不如用 c++ 的好方法来解决这个问题。所以在这里,我要求在 C++ 中找到一个好的替代方案(可能没有 malloc/手动内存管理),以便我可以进一步进行。
最佳答案
在 C 中,void*
,malloc
的返回类型,隐式转换为任何其他数据指针类型。
在 C++ 中它没有。
C 也有隐含的 int
,这意味着使用 malloc
的最佳实践因语言而异。在 C 中,不应转换结果,因为如果缺少 #include
,这可能会隐式声明 malloc
和 int
结果。但是,在 C++ 中,如果结果用作 void*
以外的任何内容,则必须强制转换结果。
你的代码
#include <iostream>
#include <uv.h>
int main() {
uv_loop_t *loop = malloc(sizeof(uv_loop_t));
uv_loop_init(loop);
std::cout << "Running loop" << std::endl;
uv_run(loop, UV_RUN_DEFAULT);
uv_loop_close(loop);
free(loop);
return 0;
}
...更好地表达为
#include <iostream>
#include <uv.h>
int main() {
uv_loop_t loop;
uv_loop_init(&loop);
std::cout << "Running loop" << std::endl;
uv_run(&loop, UV_RUN_DEFAULT);
uv_loop_close(&loop);
}
关于c++ - 在 C++ : invalid conversion from ‘void*’ to ‘uv_loop_t* 中避免 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39934158/
在libuv的uv_loop_t中,有一个私有(private)的uint64字段叫做“time”。 它代表什么? 最佳答案 libuv 在事件循环节拍开始时缓存当前时间,以减少与时间相关的系统调用次
我正在尝试通过在其文档的帮助下创建小程序来学习 libuv。请注意,我将通过 c++ 语言而不是 c 使用它。这是我开始的 - #include #include int main() {
我是一名优秀的程序员,十分优秀!