gpt4 book ai didi

rust - 为什么使用指针格式化程序打印函数会警告 "taking a reference to a function item does not give a function pointer"?

转载 作者:行者123 更新时间:2023-12-05 03:24:50 24 4
gpt4 key购买 nike

我想使用引用运算符创建一个函数指针:

fn main() {
let fcn_ptr = &add;

println!("{:p}", fcn_ptr);
println!("{}", fcn_ptr(10, 10));
}

fn add(x: i32, y: i32) -> i32 {
x + y
}

编译器输出:

warning: taking a reference to a function item does not give a function pointer
--> src/main.rs:4:22
|
4 | println!("{:p}", fcn_ptr);
| ^^^^^^^ help: cast `add` to obtain a function pointer: `add as fn(_, _) -> _`
|
= note: `#[warn(function_item_references)]` on by default

执行输出:

0x55c0890fa000
20

警告背后的原因是什么?

最佳答案

fcn_ptr 包含对 function item 的引用, 不是 function pointer .

任何对函数项的引用有意义的事情都可以用函数项本身来完成。所以,(除了一些通用代码,这里不是这种情况)没有合理的理由引用函数项,最明智的解释是你想要一个函数指针。警告是提醒您注意这个错误(hkBst 的 answer 显示它 是一个错误)。

如果您想要函数指针,您需要将函数项转换为函数指针,正如编译器建议的那样:

fn main() {
let fcn_ptr = add as fn(_, _) -> _;

println!("{:p}", fcn_ptr);
println!("{}", fcn_ptr(10, 10));
}

fn add(x: i32, y: i32) -> i32 {
x + y
}

关于rust - 为什么使用指针格式化程序打印函数会警告 "taking a reference to a function item does not give a function pointer"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72189369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com