当前位置: 首页 > 知识库问答 >
问题:

“C编程语言〔第四版〕-Bjarne Stroustrup中的绑定错误”

陶刚豪
2023-03-14

这段代码的问题是变量i不停留在2,它递增到3。您可以在此处查看:https://wandbox.org/permlink/p5JC1nOA4pIpsgXb

我们不必使用<code>std::ref()</code>来增加这个变量。这是书中的一个错误,还是自C 11以来发生了一些变化?

共有1个答案

能正青
2023-03-14

示例不正确,bind确实会复制其参数,除非您将其包装在std::reference_wrapper中,正如文本正确所说,但示例显示的并非如此。在示例中,参数i传递给bind返回的仿函数,而不是bind本身。如果示例如下所示,i的值将保持2

auto inc = bind(incr, i);   // a copy of i is made
inc(); // i stays 2; inc(i) incremented a local copy of i

在书中所示的示例中,参数< code>i将被转发给< code>incr,这将导致对原始< code>i的左值引用被传递给函数,并且原始< code>i将被递增。

对于相关的标准报价,从 23.14.11.3 [func.bind.bind]/10

绑定参数的值v1v2,...,vN及其相应的类型V1V2,...,VN取决于从调用bind派生的类型TDi和调用包装器g的cv限定符cv如下:
...
-如果is_的值jplaceholder_v

 类似资料:
  • 第19.3节介绍了一章中的字符串表示法,其主要重点是运算符重载,特别是特殊运算符

  • 在Bjarne Stroustrup的C编程语言第4版部分类似STL的操作中,以下代码被用作链接的示例: 断言在(实时查看)和(实时查看)中失败,但在使用Clang(实时查看)时不会失败。 为什么我得到了不同的结果?这些编译器中是否有任何一个错误地计算了链接表达式,或者这段代码是否表现出某种形式的未指定或未定义的行为?

  • 第12章 汇编语言和C语言 C/C++语言是一个被广泛使用的程序设计语言,它不仅具有良好的高级语言特征,而且还具有一些低级语言的特点,如:寄存器变量、位操作等。所以,C语言的程序与汇编语言程序之间能很平滑地衔接。另外,目前主要的C语言程序开发环境,如:Turbo C/C++、Borland C/C++等,也都提供了很好的混合编程手段。 本章主要介绍汇编语言和C语言的混合编程和调用方法。虽然其它高级

  • C类语言破解 1、bp MessageBoxA(W)(断对话框)—Ctrl+N 2、Point-H法 3、bp GetDlgItem/GetWindowTextA(W)/GetWindowTextLengthA(W) (断输入框) 4、字符串法—插件/搜索所有参考文本

  • 本文向大家介绍SQLite教程(十四):C语言编程实例代码(2),包括了SQLite教程(十四):C语言编程实例代码(2)的使用技巧和注意事项,需要的朋友参考一下 三、高效的批量数据插入:     在给出操作步骤之前先简单说明一下批量插入的概念,以帮助大家阅读其后的示例代码。事实上,批量插入并不是什么新的概念,在其它关系型数据库的C接口API中都提供了一定的支持,只是接口的实现方式不同而已。纵观众

  • 本书与《深入淺出 Hello World》有着类似的心路历程,旨在以实验的方式去探究类似 Hello World 这样的小程序在开发与执行过程中的微妙变化,一层层揭开 C 语言程序开发过程的神秘面纱,透视背后的秘密,不断享受醍醐灌顶的美妙。 背景 笔者 2007 年开始系统地学习 Shell 编程,并在兰大开源社区写了序列文章。 在编写《Shell 编程范例》文章的《进程操作》一章时,为了全面了解