数组和右值(作为参数)

2023-12-26

我想知道是否有任何方法可以区分以下代码中显示的函数调用(以数组作为参数):

#include <cstring>
#include <iostream>

template <size_t Size>
void foo_array( const char (&data)[Size] )
{
    std::cout << "named\n";
}

template <size_t Size>
void foo_array( char (&&data)[Size] )  //rvalue of arrays?
{
    std::cout << "temporary\n";
}


struct A {};

void foo( const A& a )
{
    std::cout << "named\n";
}

void foo( A&& a )
{
    std::cout << "temporary\n";
}


int main( /* int argc, char* argv[] */ )
{
    A a;
    const A a2;

    foo(a);
    foo(A());               //Temporary -> OK!
    foo(a2);

    //------------------------------------------------------------

    char arr[] = "hello";
    const char arr2[] = "hello";

    foo_array(arr);
    foo_array("hello");     //How I can differentiate this?
    foo_array(arr2);

    return 0;
}

foo“函数族”能够区分临时对象和命名对象。 foo_array 则不然。

在 C++11 中可能吗? 如果没有,你认为可能吗? (显然改变了标准)

问候。 费尔南多.


没有什么问题foo_array。这是不好的测试用例:"hello"是一个左值!想一想。它不是临时的:字符串文字具有静态存储持续时间。

数组右值将是这样的:

template <typename T>
using alias = T;
// you need this thing because char[23]{} is not valid...

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

数组和右值(作为参数) 的相关文章

  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 在 C++11 中省略返回类型

    我最近发现自己在 C 11 模式下的 gcc 4 5 中使用了以下宏 define RETURN x gt decltype x return x 并编写这样的函数 template
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • std::bind 重载解析

    下面的代码工作正常 include
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • Silverlight Datagrid:在对列进行排序时突出显示整个列

    我的 Silverlight 应用程序中有一个 DataGrid 我想在对该列进行排序时突出显示整个列 它在概念上与上一个问题类似 Silverlight DataGrid 突出显示整列 https stackoverflow com qu
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • WPF/数据集:如何通过 XAML 将相关表中的数据绑定到数据网格列中?

    我正在使用 WPF DataSet 连接到 SQL Server Express XAML 和 C Visual Studio 2013 Express 我从名为 BankNoteBook 的现有 SQL Server Express 数据

随机推荐

  • 每月第一天的工作日

    我需要获取该月第一天的工作日 例如 对于当前月份 2013 年 9 月 第一天是星期日 首先 获取当月的第一天 例如 NSDate today NSDate date NSCalendar gregorian NSCalendar allo
  • 尝试更新测试版时 Google Play 出现错误

    当我尝试将新的 apk 上传到我的 beta 频道时 我收到此错误 Errors 在开始推出此版本之前解决这些错误 您无法推出此版本 因为它不允许任何现有用户升级到新添加的 APK 在我的 alpha 频道中 女巫的更新频率要高得多 我可以
  • Matplotlib条形图不绘制边框/边缘

    我的条形图有这个代码 ax1 plt subplot2grid 1 1 0 0 ax1 bar edges2 Nnorm width 0 02 edgecolor green linewidth 20 我认为这应该使我的条形图具有绿色边缘
  • 在酸洗 numpy 数组的子类时保留自定义属性

    我创建了 numpy ndarray 的子类如下numpy 文档 http docs scipy org doc numpy user basics subclassing html 特别是 我有添加了自定义属性 http docs sci
  • 在子组件 React Native 中关闭模式

    我有两个本机组件 我无法从我的子组件中关闭模式 ListTrips 家长 ModalAddTrip 子级 ListTrips js import ModalAddTrip from ModalAddTrip this state isMod
  • Objective C 阻止异步回调和错误访问

    我有一个严重的疑问 假设以下场景 你有一个UIViewController在屏幕上 例如 应用程序使用块作为回调来启动后端调用 您使用 自我 代理来防止保留循环 用户点击 返回 然后UIViewController被释放 迟早 回调块会被执
  • Objective-C enumerateObjectsUsingBlock 与快速枚举?

    以下两种方法的优点和缺点是什么 使用块枚举 https developer apple com documentation foundation nsarray 1415846 enumerateobjectsusingblock lang
  • android错误:删除片段时“提交已调用”

    我想实现一个有片段的活动 当我点击 Fragment1 时 Fragment2 被调用 当我点击 Fragment2 时 Fragment2 应该从屏幕上删除 我通过在 onCreateView 中调用 Fragment2 LinearLa
  • Visual Studio Team Services - 构建失败,定义错误?

    我从事一个项目已经有一段时间了 现在我想使用 Visual Studio Team Services 在本地 Visual Studio 中的构建不会给出错误 并且应用程序按预期工作 我已将此工作代码签入 VSTS 因此它位于存储库中并且可
  • 计数返回空白而不是 0

    今天是个好日子 这是我的代码 SELECT Expired Item DateName mm DATEADD MM 4 AE fld LOAN as Month COUNT PIT fld ID COUNT SUM PIT fld GRAM
  • Android 上的 kivy/Python 缺少 Unicode 编解码器?

    我有一个在 kivy 下运行的程序 它在 Windows 上运行良好 但在 Android 上打开文件失败 两个平台上都是 1 8 0 奇怪的是 当我明确要求 utf 8 时 错误消息表明它正在尝试解码 ASCII 而且该文件中的任何位置都
  • 如何解压和打包pkg文件?

    我有一个由 Install Maker for Mac 创建的 pkg 文件 我想替换 pkg 中的一个文件 但我必须在Linux系统下执行此操作 因为这是下载过程的一部分 当用户开始下载文件时 服务器必须替换 pkg 中的一个文件 我有一
  • 编译 gtkmm 时出现问题

    操作系统 Fedora 14 编译器 g GCC 4 5 1 20100924 红帽 4 5 1 4 我通过 yum 从存储库安装了 gtkmm24 devel 为了确保安装按计划进行 我决定尝试页面上的示例之一 include
  • Oracle 中的动态表分区

    我正在为我的应用程序构建一个数据库存储 该存储由一个具有巨大数据量 数亿条记录 的表组成 我计划在日期字段上建立索引 因为我将不时地对给定时间段内的所有记录进行批量恢复 例如 检索第二天的所有记录 午夜 由于记录数量巨大并且性能是该系统中的
  • 递归地 (?) 将 LINQ 谓词组合成单个谓词

    编辑 我问错了问题 real我遇到的问题已经结束将 LINQ to SQL 谓词组合成单个谓词 https stackoverflow com questions 3782940 compose linq to sql predicates
  • 在 OS X 上以 32 位模式使用 virtualenv 运行非系统 Python

    简短的问题使用 virtualenv virtualenvwrapper 是否可以添加前缀python调用链接到特定的虚拟环境 背景我想使用多个虚拟环境已安装酿造 https github com mxcl homebrewPython 2
  • 如何从 Kotlin DSL build.gradle 中的所有依赖项中排除库?

    我开始迁移build gradle 时髦 到build gradle kts Kotlin DSL 事情是这样的com google common util concurrent ListenableFuture from com goog
  • Netbeans:自动格式 - 防止变量赋值时出现空格格式

    我更喜欢这样的格式化作业 foo bar long foo bar 而不是这个 foo bar long foo bar 然而 Netbeans 在使用自动格式时使用后者 有人知道如何解决这个问题吗 这个问题已经发布三年了 但我认为它非常有
  • 电子邮件主题分隔符间距中的重音单词 - 如何阻止这种情况?

    我们有一个自定义的 php 电子邮件营销应用程序 还有一个有趣的问题 如果邮件的主题行包含带有重音符号的单词 则会 吞掉 该单词与下一个单词之间的空格 示例 短语 安赫尔 里奥斯 埃斯库查 索普伦德 显示 至少通过 gmail 和 Lotu
  • 数组和右值(作为参数)

    我想知道是否有任何方法可以区分以下代码中显示的函数调用 以数组作为参数 include