#include <functional>
struct A
{
A() = default;
A(const A&) = delete;
A& operator =(const A&) = delete;
void foo() const
{}
};
int main()
{
A a;
std::bind(&A::foo, &a); // ok
std::bind(&A::foo, a); // error
return 0;
}
пример, кажется, говорит:Всегда предпочитаете [std :: bind (& A :: mem_fn, & obj)] to [std :: bind (& A :: mem_fn, obj)]?
Вы должны всегда предпочитаютstd::bind(&A::foo, &a);
вstd::bind(&A::foo, a);
.
Серьезно, если копирование объекта A
является дорогостоящим, его следует избегать.
Я не могу придумать ни одного случая, чтобы последнее было лучше. Итак, я просто задаюсь вопросом:
Почему стандарт C++ не запрещает последнее?
Вы всегда должны выбирать '[&]() {a-> foo();}' to 'std :: bind()'. –
Это зависит от того, что должна делать функция, должна ли она взять копию 'a' или просто ссылку? Если вы хотите передать функцию из области «a» и выполнить эту функцию, вам необходимо передать копию «a». – Mine
+1 @Mine, это ответ. Спасибо и, пожалуйста, включите его в официальный ответ, я возьму его и надеюсь, что он поможет большему количеству людей. – xmllmx