关于函数指针转换的澄清

2024-03-30

函数类型(左值)可以转换为函数指针(右值)。

int func();
int (*func_ptr)() = func;

但从 (4.1/1)

非函数、非数组类型 T 的左值 (3.10) 可以转换 到一个右值。

这是否意味着函数上未完成左值到右值的转换?另外,当数组衰减为指针时,它不会返回一个作为指针的右值吗?


函数是左值。指向函数(数据类型)的指针可以是 任何一个;如果你给它一个名字,它就是一个左值;否则,它不是 (大致说来)。指向函数的指针遵循所有常见的左值 到右值转换规则。对于简单类型,例如基本类型或 指针,左值到右值的转换基本上意味着读取 多变的。

void func();            //  Declares func
(*(&func))();           //  The expression &func is an rvalue
void (*pf)() = &func;   //  pf is an lvalue
(*pf)();                //  In the expression *pf, pf undergoes an
                        //  lvalue to rvalue conversion

请注意,存在函数到指针的隐式转换 函数,并且()运算符适用于函数和 指向函数的指针,因此最后两行可以写成:

void (*pf)() = func;
pf();

与往常一样,转换的结果是一个右值(除非 转换为引用类型)。当数组 隐式转换为指针;数组和函数都只能 作为左值存在,but它们都隐式转换为指针, 这是一个右值。但该指针可用于初始化 适当指针类型的变量;这些变量是左值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于函数指针转换的澄清 的相关文章

  • C# 打印问题(RichTextBox)

    我想打印我的 RichTextBox eintragRichTextBox 的内容 我现在有这个代码 private void druckenPictureBox Click object sender EventArgs e PrintD
  • 使用 CLion 进行 OpenCV Windows 设置

    我想在 Windows 上为 CLion IDE 设置 OpenCV 我尝试使用 OpenCV 3 1 和 2 4 得到相同的结果 我有 Windows 10 64 位 CLion 使用 cygwin 环境 到目前为止我做了什么 1 从Op
  • 添加 Nullable int 时保持 null?

    我想添加可为空的int 并保留null当所有值都是null 我想要这个结果 1 2 3 1 null 1 null null null O null 0 问题是 如果我将一个值与 null 相加 结果为 null int i1 1 int
  • 将 new 与 decltype 一起使用

    T t T is an implementation detail t new T want to avoid naming T to allow for flexibility t new decltype t error cannot
  • 您可以从基本 Win32 控制台模板应用程序中的 C#/Winrt 组件调用(不是 WinForm/abstractions/wrappers 或使用 C++/Winrt 模板)吗?)

    我有一个现有的程序 win32 x86 控制台应用程序 需要调用托管代码 来自 Net 的 C dll The dll不暴露给 COM 但可以从 C WinRT 组件调用并由 C WinRT 控制台模板应用引用 BUT即使安装了 C Win
  • Poco c++Net:Http 从响应中获取标头

    我使用 POCO C Net 库进行 http 我想尝试制定持久缓存策略 首先 我认为我需要从缓存标头中获取过期时间 并与缓存值进行交叉检查 如果我错了 请告诉我 那么我如何从中提取缓存头httpResponse 我已经看到你可以用 Jav
  • 在 OnModelCreating 期间设置列名称

    Issue 我目前正在尝试通过设置的属性为我的表及其列添加前缀 我正在使用实体框架核心 我已经正确地为表名添加了前缀 但我似乎无法弄清楚列的前缀 我有一种感觉 我需要使用反射 我已经留下了我的 可能很糟糕的 反思尝试 有人有办法在实体中设置
  • 在现代 C++ 中,临时生命周期延长何时有用?

    在 C 中 您可以将函数的返回值 返回值 而不是引用 绑定到 const 引用 并且代码仍然有效 因为该临时对象的生命周期将延长到作用域末尾 例如 std string get string return abc void f const
  • 在 C# 中调用 C++ 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有很多用 C 编写的库 我想从 C 调用这些库 但是 我遇到了很多问题 我想知道是否有书籍或指南告诉我如何做到这一点 Dll导入 htt
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 如何在三个 IEnumerable 上使用 Zip [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Linq 从 3 个集合创建项目 https stackoverflow com questions 5284315 create items from 3 collections using
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • 使用 jQuery 从 ASP.Net JSON 服务获取数据

    我正在尝试调用 Google 地图地理编码 API 从纬度 经度对中获取格式化的地址 然后将其记录到控制台 我正在尝试获取为给定位置返回的第一个 formatted address 项目 我很简单无法从 JSON 中提取该项目 我不知道为什
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您

随机推荐

  • 为什么 Asp.net 计时器/更新面板会在 Chrome 中泄漏内存?可以修复/解决吗?

    我为我们公司建立了一套内部网站来管理我们的一些流程 我注意到这些页面存在大量内存泄漏 导致页面使用超过 150mb 的内存 这对于由单个表单和 GridView 组成的网页来说是荒谬的 该 GridView 在同一时间显示 7 10 行数据
  • 如何在 Java 中按下按钮来创建自定义按键绑定?

    正如您可能已经从标题中读到的 我正在尝试用 Java 制作一个自定义按键绑定系统 基本上 我有一个按钮 JButton 我想要发生的是当用户单击该按钮时 它将等待用户的输入 以便将其设置为将来使用的按键绑定 但我不知道如何做这个 我浏览了互
  • Android EditText 错误消息弹出文本未显示

    我的应用程序遇到问题 EditTexts 上显示错误弹出窗口 但文本不可见 它看起来像这样 所有的情况都会发生这种情况EditText在我的应用程序中 这是布局 XML 的示例 Layout
  • 未捕获的引用错误:_gaq 未定义(Google Analytics)

    在 chrome 调试日志中查看站点页面时 会出现以下消息 未捕获的引用错误 gaq 未定义 页面本身应该使用以下方式跟踪对象onload事件处理程序并触发 trackEvent用于谷歌分析 我最好的猜测是也许ga js文件没有及时加载 因
  • 如何在VBA中释放对象并清除内存

    这是我第一次发帖 而且我是一名业余程序员 所以如果您需要任何其他信息 请告诉我 我有以下问题 使用 excel VBA 我连接到另一个程序 即 Aspen EDR 为此 我安装了一个相应的插件 要访问 Aspen EDR 我需要添加一个对象
  • 使用 Castle Windsor 解析具有泛型类型约束的接口

    给定 FooRequest 和 FooResponse 是抽象的接口 public interface IFooHandler
  • Cordova after_prepare hook 在 Android 中成功,但在 iOS 中失败

    我为我的 Cordova 构建编写了一个 after prepare 钩子 它从最终构建中删除了 node modules 文件夹 usr bin env node The node modules we want to remove fr
  • 通知中的 PendingIntent

    我想显示一个显示进度的通知 正在进行的操作 这对我来说效果很好 但同时远程视图应包含取消按钮以停止正在进行的操作 通常的内容意图仍然应该做其他事情 即不取消正在进行的操作 看来我只能有一个意图 我必须指定单击时启动的 contentInte
  • 使用 SVG 和 d3.js 创建滚动条

    现在我已经使用 d3 创建了几个 盒子 它们只是带有文本的 SVG 矩形 var canvas d3 select body append svg attr width 800 attr height 500 specifies drawi
  • 绘制到 UIImage 中

    如何使用 monotouch 绘制现有的 UIImage 我加载图像 UIImage FromFile MyImage png 然后我想在这个图像中绘制一条字符串和一些线条 有人有代码示例吗 Thx 这是一个执行此操作的方法 private
  • 使用 importlib 选择模块并在多处理函数中使用

    我想在我的主函数中根据传递给 Python 脚本的参数选择要导入的模块 所以 我正在使用其中之一 blah importlib import module blah1 blah importlib import module blah2 其
  • C++ 的 putenv 警告

    我正在尝试使用putenv stdlib我正在编译的程序中的函数g 包括标志和警告 std c 11 and Wall Wextra 该程序可以简单如下 include
  • 用于托管服务器的 Web Deploy 3.6 的 PowerShell 安装

    我需要为托管服务器安装 Web Deploy 3 6 通常您会使用 Web 平台安装程序 但我需要使用 PowerShell 来部署它 我找到了 Web Deploy 3 6 的下载 并且可以使用 PowerShell 安装该文件的 MSI
  • 如何在PyQt5中横向打印?

    如何修改此代码以自动打印或将默认设置设置为横向 我是 PyQt5 的新手 尝试制作一个具有打印功能的应用程序 我从互联网上复制并粘贴了此代码 但它的默认设置是纵向 自动横向打印非常重要 from PyQt5 import QtWidgets
  • 错误:没有名为“fcntl”的模块

    我收到以下错误 Traceback most recent call last File C Users aaaa Desktop ttttttt py line 5 in
  • Rockscroll 之类的记事本++ 插件?

    有没有像 Rockscoll for VisualStudio for notepad 这样的插件 至少有接近它的东西吗 Thanks 它是内置的 View gt Document Map
  • Rails link_销毁嵌套资源?

    我有一个嵌套的资源附件 我想创建一个link to销毁 删除附件 这是我所拥有的 但它是作为 GET 与 PUT 发布的 有想法吗 谢谢 Try link to Delete Attachment a
  • 瑞典 BankID 使用 hmac 生成 Python 动画 QR 代码

    我正在开发一个 Django 项目 它将使用 BankID 进行授权和数字签名 我在用pybankid https github com hbldh pybankid 关于这个项目 我除了好话之外没有什么可说的 我的问题在于尝试使用bank
  • 为什么可为 null 的 int 不能隐式转换为 int ?技术原因还是设计选择?

    在 C 中 没有从int 键入int type 我定义了以下隐式运算符 namespace System public partial struct Int32 public static implicit operator Int32 i
  • 关于函数指针转换的澄清

    函数类型 左值 可以转换为函数指针 右值 int func int func ptr func 但从 4 1 1 非函数 非数组类型 T 的左值 3 10 可以转换 到一个右值 这是否意味着函数上未完成左值到右值的转换 另外 当数组衰减为指