C++11 const && 的绑定规则

2024-02-07

很多人不知道const右值引用是 C++11 语言的一部分。This http://www.codesynthesis.com/~boris/blog/2012/07/24/const-rvalue-references/博客文章讨论了它们,但在约束规则方面似乎是错误的。引用博客:

struct s {};

void f (      s&);  // #1
void f (const s&);  // #2
void f (      s&&); // #3
void f (const s&&); // #4

const s g ();
s x;
const s cx;

f (s ()); // rvalue        #3, #4, #2
f (g ()); // const rvalue  #4, #2
f (x);    // lvalue        #1, #2
f (cx);   // const lvalue  #2

请注意不对称性:虽然 const 左值引用可以绑定到右值, const 右值引用无法绑定到左值。在 特别是,这使得 const 左值引用能够执行所有操作 const 右值引用可以进行更多操作(即绑定到左值)。

示例代码上的注释似乎检查了我安装的 GCC 4.9(设置了 -std=c++14 标志)。那么,与博客文字相反,这是真的吗?const &&应该绑定到const & and const && and const &只绑定到const &?如果不是,实际规则是什么?


这是一个演示const &&绑定到const&在海湾合作委员会 4.9 中:http://coliru.stacked-crooked.com/a/794bbb911d00596e http://coliru.stacked-crooked.com/a/794bbb911d00596e


在这种情况下,“绑定”意味着将引用绑定到特定对象。

int a;

int &b = a; // the reference is 'bound' to the object 'a'

void foo(int &c);

foo(a); // the reference parameter is bound to the object 'a'
        // for this particular execution of foo.

http://coliru.stacked-crooked.com/a/5e081b59b5e76e03 http://coliru.stacked-crooked.com/a/5e081b59b5e76e03

然后阅读引用:

请注意不对称性:虽然 const 左值引用可以绑定到右值,

void foo(int const &);

foo(1); // the const lvalue reference parameter is bound to
        // the rvalue resulting from the expression '1'

http://coliru.stacked-crooked.com/a/12722f2b38c74c75 http://coliru.stacked-crooked.com/a/12722f2b38c74c75

const 右值引用无法绑定到左值。

void foo(int const &&);

int a;

foo(a); // error, the expression 'a' is an lvalue; rvalue
        //references cannot bind to lvalues

http://coliru.stacked-crooked.com/a/ccadc5307135c8e8 http://coliru.stacked-crooked.com/a/ccadc5307135c8e8

特别是,这使得 const 左值引用能够执行 const 右值引用可以执行的所有操作,甚至更多(即绑定到左值)。

void foo(int const &);

foo(1); // const lvalue reference can bind to rvalue

int a;
foo(a); // and lvalue

http://coliru.stacked-crooked.com/a/d5553c99e182c89b http://coliru.stacked-crooked.com/a/d5553c99e182c89b

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

C++11 const && 的绑定规则 的相关文章

  • 异步提交或回滚事务范围

    正如许多人所知 TransactionScope当async await Net 中引入了模式 如果我们尝试使用一些它们就会损坏await在事务范围内调用 现在这个问题已经解决了 感谢范围构造函数选项 a 17527759 1178314
  • WebBrowser Control 导致整个应用程序变得无响应

    我有一个带有嵌入式 Web 浏览器的 C NET 3 5 应用程序 浏览器被设计为指向远程站点 而不是本地站点 一切工作正常 但是当页面响应缓慢时 这会导致我的整个应用程序变得无响应 直到加载页面 我不介意浏览器在执行任务时没有响应 但应用
  • 隐式将 string 转换为 string_view

    void Foo1 string view view string str one two three Foo1 one two three Implicitly convert char to string view Foo1 str I
  • C++ - 错误 C3646:未知的覆盖说明符

    我修改了我的项目 编译后弹出一些奇怪的错误 ifndef BART RAY TRACER MESH H define BART RAY TRACER MESH H include
  • 为什么这些冲突出现在以下 XML 的 yacc 语法中

    我有以下 XML 语法 效果很好 program lt ID attribute list gt root root lt ID attribute list gt node list lt ID gt node list node s n
  • 通过指向基址的指针删除对象而不使用虚拟析构函数

    我有代码 class A1 public A1 cout lt lt A1 virtual A1 cout lt lt A1 class A2 public A2 cout lt lt A2 A2 cout lt lt A2 class B
  • Java 相当于 C# 的 async/await?

    我是一名普通的 C 开发人员 但偶尔也会使用 Java 开发应用程序 我想知道 Java 中是否有相当于 C async await 的东西 简单来说 java 相当于 async Task
  • 是否可以将 long long 返回值分配给 int64_t 而不会丢失 64 位机器中的精度?

    我已经实现了以下代码 include
  • tmpnam 的 C/C++ 线程安全性?

    我需要使用tmpnamC 中的函数 但我需要了解它的线程安全性 也就是说 如果我有多个线程 每个线程都需要为临时文件获取不同的名称 我是否可以保证每个线程都会收到具有不同名称的文件 tmpnam 仅保证该文件当时不存在 但它可能会在您自己创
  • 如果将其名称作为参数传递,如何在方法中打开表单

    我正在尝试创建一个标准方法来根据传递给它的参数打开表单 基本上 要完成此任务 using Quotes newQte new Quotes newQte ShowDialog 通过替换 Quotes with a passed parame
  • MPI_Gather 分段错误

    我有这个并行高斯消除代码 调用以下任一方法时会发生分段错误MPI Gather函数调用 我知道如果没有为任一缓冲区正确分配内存 可能会出现此类错误 但我看不出内存管理代码有什么问题 有人可以帮忙吗 Thanks Notes 该程序从一个 t
  • 如何使用 Unity 动态注册通用类?

    我有一个包含很多类 300 和 BaseClass 的程序集 我想用接口注册一个泛型类 统一后 您必须在 Name如果你想解析接口的对象数组 我想要一个对象数组主视图模型自动地 有没有办法通过反射来自动执行此操作 有什么建议么 示例 伪 p
  • 是否可以将 CMFCToolBar 添加到对话框中?

    我刚刚尝试了将 CToolbar 添加到新 CMFCToolBar 上的对话框的标准方法 但这不起作用 在我深入研究新的实现之前 我想知道它是否真的可行 我不确定你所说的 标准方式 是什么意思 但你当然可以以编程方式做到这一点 In MyD
  • 使用 C# 从文本中删除数字

    我有一个要处理的文本文件 其中有一些数字 我只想要其中的文字 而不是其他任何东西 我成功删除了标点符号 但是如何删除数字呢 我想要使 用 C 代码 另外 我想删除长度大于 10 的单词 如何使用 Reg 表达式来做到这一点 您可以使用正则表
  • try-catch 块是否会降低性能[重复]

    这个问题在这里已经有答案了 This link http www cplusplus com doc tutorial exceptions states 为了捕获异常 我们必须将一部分代码放在异常下 检查 这是通过将这部分代码包含在 tr
  • if(pointerVar) 与 if(pointerVar!=NULL) 相同吗?

    简单的问题 Is if pointerVar 与if pointerVar NULL 也是if pointerVar 与if pointerVar NULL 给我你在技术上最正确 迂腐的答案 这两种说法看起来和操作起来都是一样的 前者有什么
  • 如何收集和存储tellp()、tellg()返回类型?

    我正在编写一个在文件中维护 linked list 的程序 因此 我通过使用tellp tellg 遍历文件并将其添加到特定的长整数 可以视为偏移量 以到达新位置 一个简单的例子是 long next offset sizeof long
  • MSVC如何在编译期间输出一些内容到“输出”窗口

    有时我看到某些项目在编译期间向输出写入一些内容 在MSVC 中如何实现 thanks use pragma message e g define MESSAGE t message FILE STRINGXXX LINE t define
  • timeval_subtract 解释

    使用 timeval subtract 函数来查找两个 struct timeval 类型之间经过的时间 有人可以解释一下用于 通过更新 y 执行后续减法的进位 和其他部分的目的和逐步数学吗 我了解该函数的目的以及如何在程序中实现它 但我想
  • 我的 Visual Studio 2008 模板有什么问题?

    我正在尝试为 Visual Studio 创建自己的类模板 称为 公共类 我跟着有关如何手动创建项目模板的官方 MSDN 说明 http msdn microsoft com en us library ms247113 aspx几乎一字不

随机推荐

  • 错误“将 varchar 值“July”转换为数据类型 int 时,消息 245,级别 16,状态 1,第 22 行转换失败。”

    SELECT CAST DATEDIFF day 21 JULY 2017 CAST DAY DATEADD mm DATEDIFF mm 1 21 JULY 2017 0 1 LEFT CONVERT VARCHAR DATENAME M
  • 带有 git 子模块的多个 ssh 密钥

    我使用的是企业版 GITHUB 我正在创建一个自动构建服务器来构建我们的项目 这些项目有子模块 由于此构建服务器不是 我 它无法拥有我的用户凭据 因此它需要能够通过 github 部署密钥 功能从 GIT 下载项目 每个项目只读 ssh 密
  • ExceptionFilter 不运行 .NET Core Web Api

    我的操作过滤器有问题 我的过滤器都没有运行 我正在使用 NET Core 2 2 并构建 Web Api 我在控制器中使用 CustomExceptionFilter 注册了它 HttpDelete id CustomExceptionFi
  • NuGet 服务器 - 私有存储库 - 动态更改 nuget 包位置

    我们正在为我们自己的私有 nuget 包使用私有存储库 我们能够为每个客户更改 nuget feed 但 nuget 包位于 Web Config 中指定的位置 是否可以通过路由 URL 动态更改位置 我已经提到了这个博客http blog
  • 如何在Javascript中使用jade Mixin?

    在翡翠中 我正在做测试混合 mixin test testName test span Test String 但我想在javascript中使用它 这是在jade文件中声明的 script type text javascript doc
  • Keras CNN:将文本作为除图像之外的附加输入添加到 CNN

    我正在尝试训练 CNN 进行对象分类 因此 除了图像之外 我还想输入一些文本特征 我在这里找到了一个这样做的例子http cbonnett github io Insight html http cbonnett github io Ins
  • XNA DrawString() 仅绘制部分字符串

    我有一个问题DrawString in XNA 我使用多个SpriteBatches对于几个逻辑层 例如 背景 对象 菜单等 在我的菜单批处理中 我绘制了一个菜单 背景中的大灰色框 按钮 菜单上较小的灰色框 以及按钮的字符串 问题 http
  • 为什么即使在“git checkout --”之后,Git 仍坚持认为文件已被修改?

    我在本地更改了几个文件 而不承诺它们 git status shows gt gt git status On branch feature ravendb Your branch is ahead of origin feature ra
  • 如何在 Struts 2 中使用注释定义拦截器

    我正在尝试使用struts2 convention plugin它提供了Java注释来定义Struts2组件 With Action到目前为止一切都很好 但是我如何使用注释来定义拦截器 我说的是 InterceptorRefs or Int
  • GNU/Linux 下的 Boost.Log 链接错误

    我想测试 Boost Log 库 不幸的是 我收到链接错误 我使用 Arch Linux 并通过内置包管理器安装了 Boost 标头和库pacman 提升1 54 0 3 升压库 1 54 0 2 编译简单示例时官方网站 http boos
  • 多次捕获组

    最近我一直在玩Java中的正则表达式 我发现自己遇到了一个 理论上 很容易解决的问题 但我在想是否有更简单的方法来做到这一点 是的 是的 我很懒 问题是多次捕获一个组 这是 public static void main String ar
  • Javascript 返回错误的日期值 (NodeJS)

    我正在开发 NodeJS 项目 但得到了错误的日期值 我不明白我做错了什么 var d new Date results 1 timestamp console log results 1 timestamp 2016 05 10T13 2
  • 如何在SQL中计算IPv6 CIDR路由前缀?

    我一直致力于使用在 SQL Server 2012 实例上运行的 T SQL 从 IPv4 和 IPv6 地址范围生成 CIDR 一般来说 我们的应用程序 数据库外部 负责计算 CIDR 但我目前需要在数据库中进行 CIDR 计算 由于 I
  • 在 UITableView 中显示多个自定义单元格?

    我在 SnowLeopard 上使用 Xcode 4 2 我的项目正在使用故事板 我正在尝试实施一个UITableView具有 2 种不同的自定义细胞类型 sessionCelland infoCell 我可以让这两种类型出现在同一个列表中
  • AvalonDock 2 与 Caliburn Micro

    是否有关于将 AvalonDock 与 Caliburn Micro MVVM 结合使用的博客或文章 谷歌搜索时没有找到太多 http avalondock codeplex com http avalondock codeplex com
  • 在 Golang 中测试 HTTP 路由

    我正在使用 Gorilla mux 和 net http 包创建一些路由 如下所示 package routes some imports some stuff func AddQuestionRoutes r mux Router s r
  • 当耗尽 Kubernetes 集群中的节点时会发生什么?

    当您耗尽 Kubernetes 集群中的节点时 我想了解一些有关维护准备的说明 这是我在跑步时所知道的kubectl drain MY NODE 节点被封锁 Pod 正常关闭 您可以选择忽略 Daemonset pod 因为如果它们被关闭
  • 强大的javascript画布库[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 jQuery 解析不带引号的 JSON 数据

    我正在尝试使用通过 AJAX 从远程服务器获取的 jQuery 解析 JSON JSON 数据如下 identifier ID label LABEL 但无法 显然 字段标识符和标签没有双引号 当在我的本地测试站点上使用双引号进行测试时 它
  • C++11 const && 的绑定规则

    很多人不知道const右值引用是 C 11 语言的一部分 This http www codesynthesis com boris blog 2012 07 24 const rvalue references 博客文章讨论了它们 但在约