- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 C++11 功能,并且刚刚试验了以下代码:
void dump(ostream &os, const MyType &mt)
{
}
void f(const vector<MyType> &mts, ostream &os)
{
for_each(mts.begin(), mts.end(), bind(dump, ref(os), ref(_1));
}
此代码在 clang 处编译错误:
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/stl_algo.h:4417:2: error: no matching function for call to object of type
'std::_Bind<void (*(std::reference_wrapper<std::basic_ostream<char> >, std::reference_wrapper<const std::_Placeholder<1> >))(std::basic_ostream<char>
&, const MyType &)>'
__f(*__first);
如果我从 _1
中删除 ref
,它编译得很好:
for_each(mts.begin(), mts.end(), bind(dump, ref(os), _1);
占位符似乎不符合引用,但只是想确认一下,你能列出为什么不符合的语义定义吗?它实际上已经通过引用传递了吗?
最佳答案
std::ref()
用于通过引用传递值,否则将作为拷贝传递。
在您的代码中,它用于传递 os
,这是一个显然您不想复制的本地名称。
请记住,是对 std::bind()
的调用进行了复制。也就是说,std::bind()
返回的值包含每个传递对象的拷贝。 std::ref()
阻止复制并保留一个引用。
但占位符实际上并不是 std::bind()
返回的对象中的值。相反,它们是指示函数将第 n 个参数转发给包装函数的标记。这里的关键词是转发:因为值是转发的,所以如果您的函数需要引用,它将作为引用传递,如果您的函数需要拷贝,它将作为拷贝传递。
因为 _1
不是要传递给函数的实际值,而是一个库技巧,使用 std::ref() 发出信号从哪里获取该值
没有意义。
关于c++ - 占位符可以与 ref() 一起使用吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23878763/
我的 DateTime 对象使用 DateTime.Now 分配了本地时间。我想知道一旦夏令时开始/结束,这个对象是否会给出正确的当前本地时间。或者我需要解决方法吗? 最佳答案 是的,DateTime
假设我需要“特定类别中可用的项目数量”与“所有项目的数量”的比率。请考虑这样的 MySQL 表: /* mysql> select * from Item; +----+------------+--
我有这张 table http://codepen.io/MetCastle/pen/lxceL我想使用 jQuery 根据 input type="number" 隐藏/显示列。表示整个列: Pro
想要制作一个看起来像这样的网格,其中 div/section 以百分比表示。 margin 在任何地方都是一样的。 http://www.ladda-upp.se/bilder/giefekcmgwm
这将返回 1(又名 TRUE) SELECT DATE_SUB(NOW(), INTERVAL 24*100 HOUR) = DATE_SUB(NOW(), INTERVAL 100 DAY); 10
我一直在尝试在 UIScrollView 中获取 UIView 的转换后的 CGRect。如果我不放大它就可以正常工作,但是一旦我放大,新的 CGRect 就会发生变化。这是让我接近的代码: CGFl
对于家庭作业,我需要在不使用内置模 (%) 运算符的情况下返回 num1 除以 num2 后的余数。我能够通过以下代码让大多数测试通过,但我仍然坚持如何解释给定数字的 -/+ 符号。我需要保留 num
我用 Javascript 创建了一个倒数计时器;它是成功的,期望未完成。事实上,从数学上讲,它是正确的,但是谷歌浏览器的浏览器设置“暂停”(因为没有更好的术语)SetInterval/Timeout
我有两个 的,每个都设置为其容器宽度的 45%。有没有办法使 居中?使得它们在容器的左右两侧有相同的空间,并且它们之间也有空间。 一开始我只是做了每个 50% 并且有 padding: 0px 2
我是一名优秀的程序员,十分优秀!