我在Bjarne Stroustrup的书中找到了这段代码:

这段代码的问题是变量i不会保持在2,它会增加到3.你可以在这里查看:https://wandbox.org/permlink/p5JC1nOA4pIpsgXb
我们不必使用它std::ref()来增加此变量.这是书中的错误还是自C++ 11以来发生过一些变化?
Pra*_*ian 10
这个例子是不正确的,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
Run Code Online (Sandbox Code Playgroud)
在本书所示的示例中,参数i将被转发到incr,这将导致对i传递给函数的原始的左值引用,并且原始i将递增.
有关标准报价,请参见23.14.11.3 [func.bind.bind]/10
的绑定参数值
v1,v2,...,vN其对应的类型和V1,V2......,VN取决于类型TDi从调用导出bind和CV-预选赛品种的调用包装的g如下:
......
-如果该值j的is_placeholder_v<TDi>不零,参数是std?::?forward<Uj>(uj),它的类型Vi是Uj&&;
| 归档时间: |
|
| 查看次数: |
812 次 |
| 最近记录: |