如何使用未知大小数组的引用来调用函数?

2024-01-10

考虑一个有效的代码:

template<size_t size>
void by_numbered_reference(int (&array)[size]);

该函数接受一个数组作为参数,编译器可以使用模板参数推导来推导它的大小。

现在定义这样的函数是有效的(在 Apple clang 版本 3.0 上测试):

void by_reference(int (&array)[], int size);

它(应该)接受对未知大小数组的引用作为参数。注意到int[] and int[n]是不同的类型并且通常是不兼容的。

我发现如何调用此函数的唯一方法是:

int * array;
by_reference(reinterpret_cast<int(&)[]>(*array), array_size);
  1. 为什么该语言接受对未知大小数组的引用作为有效的函数参数,而没有直接的方法来定义此类变量?
  2. 是否有任何已知的用例需要此语法?
  3. Why void by_reference(int (*&array), int size) should not可以用来代替吗?

您的假设是错误的,该程序格式不正确。请参阅 C++11 标准 8.3.5/8:

如果参数的类型包括“指向 T 未知边界的数组的指针”或“引用”形式的类型 到 T 的未知边界的数组”,该程序格式错误。

clang 允许将其作为编译器扩展。例如,g++ 不会接受它。

但是,您可以使用模板来推断传递的数组的大小:

template <std::size_t N>
void by_reference(int (&)[N])
{
    // whatever
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用未知大小数组的引用来调用函数? 的相关文章

  • 内存不足异常

    我正在使用 C 和 asp net 开发一个网络应用程序 我一直收到内存不足的异常 该应用程序的作用是从数据源读取一堆记录 产品 可能是数百 数千 通过向导中的设置处理这些记录 然后使用处理的产品信息更新不同的数据源 虽然有多个 DB 类
  • 剥离 OLE 标头信息 (MS Access / SQL Server)

    我有一个 C 应用程序需要支持二进制数据库内容 图像等 当使用 MS Access 或 MS SQL Server 时 此数据被包装在 OLE 对象内 如何去除此 OLE 标头信息 请注意 我不能只查找特定标签的开头 因为内容可以是 png
  • 除法时的小数舍入误差 (C#)

    我基本上有四个数字 比如 100 200 300 400 我需要计算概率为 100 100 200 300 400 200 100 200 300 400 等等在 当我使用小数数据类型来存储这些概率时 由于舍入问题 它们不会达到 1 在不使
  • 链接错误:xxx 已在 *****.LIB 中定义:: 究竟出了什么问题?

    Problem 我正在尝试使用一个名为DCMTK http dicom offis de dcmtk它使用了一些其他外部库 zlib libtiff libpng libxml2 libiconv 我已经从同一网站下载了这些外部库 LIB
  • 在 JavaScript/CoffeeScript 中确定一个数组是否包含另一个数组的内容

    在 JavaScript 中 如何测试一个数组是否包含另一个数组的元素 arr1 1 2 3 4 5 8 1 10 2 3 4 5 9 function name arr1 gt true 没有 set 函数可以执行此操作 但您可以简单地执
  • Subsonic 3 ActiveRecord 嵌套选择导致 NotIn 错误?

    我有以下 Subsonic 3 0 查询 其中包含嵌套的 NotIn 查询 public List
  • 将 R 值传递给采用 L 值的函数时出现过载歧义

    我有 2 个重载函数 一个采用 L 值 另一个采用 R 值 目的是让该函数可以像这样调用 Obj obj foo obj OR foo Obj 所以 我写了2个重载函数 template
  • 64 位随机生成器种子

    我目前正在运行一个具有 8 个以上管道 线程 的多线程模拟应用程序 这些管道运行非常复杂的代码 该代码取决于种子生成的随机序列 然后该序列被归结为单个 0 1 我希望在将种子从主线程传递到处理管道后 这种 随机处理 具有 100 的确定性
  • RC4 实现与 openssl 输出不匹配

    我的目标是在 C C 中实现 RC4 流密码 并确保它产生与使用时相同的输出openssl命令 按照伪代码维基百科 https en wikipedia org wiki RC4 该实现似乎有效 因为它可以加密和解密内容 但是 加密的输出与
  • 从亚马逊 s3 流式传输文件

    我在尝试从 amazon s3 流式传输文件时遇到问题 基本上 我的文件存储在 amazom s3 上 我无法提供对这些文件的直接访问 因为用户需要进行身份验证 我正在尝试找到一种流式传输文件的方法 而无需将每个文件从亚马逊下载到我的服务器
  • SQL Server 存储过程更新不适用于 ASP.Net C# GridView RowUpdating

    我遇到了问题 但没有抛出任何错误 发生的情况是 我有一个存储过程正在驱动我的更新 但我无法更新 gridview 我击中了Update链接按钮 但它实际上并没有更新记录 这是我的存储过程 ALTER PROCEDURE dbo CompDe
  • 对 boost::python::detail::init_module 和朋友的未定义引用

    我正在尝试使用官方网站上的示例来测试 boost python 但它会产生很多错误 以下是我所做的和错误 下载Boost1 55与this http choorucode com 2013 12 27 how to upgrade the
  • 监控 C# 中的特定击键

    I need to write a Windows application which monitors keystrokes regardless of focus When it detects a particular keystro
  • 无法构建 lldb - 找不到“原子”文件

    我正在尝试建立lldb这是 Clang LLVM 3 4 2 下载的一部分LLVM 下载页面 http llvm org releases download html 我可以构建 LLVM Clang Compiler RT 和 Extra
  • 如何用C++读取UTF-8文件数据?

    我有一个清单IPA https en wikipedia org wiki International Phonetic Alphabet名为 ipa txt 的文本文件中的 UTF 8 符号并为其分配了数字 如何将它与源文件交叉引用 该源
  • unique_ptr编译错误

    如果我告诉你我无法编译它 我想这会很尴尬 请你帮我一下好吗 include
  • 在数组中查找对象,并使用子数组检查属性

    我有下面的数组 每个元素都有另一个名为 FunctionityChildren 的数组 我需要找到包含该属性的唯一对象行动全面等于变量 例如 budget allocation 或 budget let bigArray Functiona
  • 如何在 C# 中创建唯一的随机字符序列?

    我正在我的应用程序中实现 URL 缩短功能 以便为我的用户提供可在 Twitter 中使用的更短的替代 URL 关键是要独立于提供相同服务的缩短服务 并将其作为我的网络应用程序的一项功能 创建约 6 个字符的独特随机字符序列的最佳方法是什么
  • 代码分析警告 CA2213 - 在 IDisposable 支持字段上调用 ​​Dispose()

    想要发布这个 尽管我在写问题时就弄清楚了 下面将发布答案 使用 VS Code Analysis 收到以下警告 警告 CA2213 DBConn 包含 IDisposable 类型的字段 DBConn k BackingField SqlC
  • DockPanel Suite - DockContent 可见性

    表单包含一个带有 DockContent 实例的 DockPanel 该实例具有 DockState DockState DockBottomAutoHide 并且它充当记录器视图 就像 Visual Studio 的错误列表面板 因此 当

随机推荐