std::bind 绑定"by value",这是真的吗?
std::bind binds "by value", is that true?
我只是想知道下面的类是否可以正常工作。我有点害怕的是,在构造函数中,在标记的行上,我绑定到的值只是(临时)参数。问题是:std::bind
是否按值取参数?对我来说,这在我阅读的文档中并不清楚。
class BoundFct {
public:
BoundFct(function<void(int, int)> fct, int v){
boundFct = bind(fct, v, _1); // ** PROBLEM HERE ? **
}
void call(int i){
boundFct(i);
}
private:
function<void(int)> boundFct;
};
根据我的测试,按预期工作。但这是一种在任何情况下都能正常工作的安全方法吗?
From std::bind
:
要绑定的参数是复制或移动,并且永远不会通过引用传递,除非在
std::ref
或std::cref
中包装。
你的代码没有任何不安全的地方。尽管最好在BoundFct
构造函数中使用任何函数,而不是在std::function<>
构造函数中使用。
相关文章:
- 如何在 std::vector 中找到<bool>哪些索引是真的?
- int8_t和uint8_t真的是整数吗?它们有什么用?
- 你如何理解"std: :forward is just syntactic sugar"?这是真的吗?
- 指向数组unique_ptr在调用 release() 后会自动释放动态内存,这是真的吗?
- 列表的向量真的是向量吗?
- 一个C++编译器是为不同的平台(Linux,Windows等)多次编写的,这是真的吗?
- array::operator[] 真的是 noexexcept 吗?
- 数组的维度是在创建数组的那一刻确定的,以后不能更改的,这是真的吗?
- SSE42 & STTNI - PcmpEstrM比PcmpIstrM慢两倍,是真的吗?
- 当内存被分配到Windows中的进程中时,它总是会触发页面错误,这是真的吗
- 即使有C++11/14,给出的答案仍然是"Why switch statement cannot be applied on strings?"真的吗?
- 是的,构造函数返回是当前实例,但我们不能使用返回类型.是真的吗
- Pthread条件变量是连续轮询的替代品,是真的吗
- 在编译时计算C字符串的长度.这真的是constexpr吗
- int**= int*[] 对于数组来说,这是真的吗?
- O'Reilly "Objective-C Pocket Reference"声称C++不支持动态调度,这是真的吗?
- 当类的指针实例超出范围时不调用析构函数是真的吗?
- std::bind 绑定"by value",这是真的吗?
- 为iOS和Android编译c++代码(Xcode).这是真的吗?
- 表达"(ptr == 0) != (ptr == (void*)0)"真的是真的吗?