C++ &引用;没有“;参考成员”;输入C++&引用;,std::bind和boost::bind在同一条船上
引用8.3.3的标准(2003)版本(我认为最近的其他版本也这么说),粗体强调是我的: 指向构件的指针不得指向类别(9.4)的静态构件、具有引用类型的构件或 “cv void。”[注:另见5.3和5.5.“指向成员的指针”类型与“指针”类型不同, 也就是说,指向成员的指针仅由指向成员的指针声明器语法声明,而从不由 指针声明符语法。在C++中没有“引用成员”类型。] 但我看到的例子很多C++ &引用;没有“;参考成员”;输入C++&引用;,std::bind和boost::bind在同一条船上,c++,reference,standards,member-function-pointers,member-functions,C++,Reference,Standards,Member Function Pointers,Member Functions,引用8.3.3的标准(2003)版本(我认为最近的其他版本也这么说),粗体强调是我的: 指向构件的指针不得指向类别(9.4)的静态构件、具有引用类型的构件或 “cv void。”[注:另见5.3和5.5.“指向成员的指针”类型与“指针”类型不同, 也就是说,指向成员的指针仅由指向成员的指针声明器语法声明,而从不由 指针声明符语法。在C++中没有“引用成员”类型。] 但我看到的例子很多 boost::bind(&SomeClass::SomeMemberFunction, this, _1
boost::bind(&SomeClass::SomeMemberFunction, this, _1)
以及
std::bind(&SomeClass::SomeMemberFunction, this, std::placeholders::_1)
etc工作起来很有魅力,包括&SomeClass::SomeMemberFunction
,它们似乎是对成员函数的引用
例如,标准是否简单地说
int (SomeClass::&RefOnSomeMemberFunction) (int) = SomeClass::SomeMemberFunction
不是该语言中的有效断言,或者还有其他断言吗?C++类的成员函数隐式使用
this
作为第一个参数。
因此,std::bind(&SomeClass::SomeMemberFunction,这个std::占位符::_1)
可以解释为:
SomeClass::SomeMemberFunction
的函数指针地址李>
this
作为函数的第一个参数,这里this
是对象的地址李>
std::placeholders::_1
作为第二个参数然后你会得到一个
functor
,它将调用带有占位符\u 1
的对象的SomeMemberFunction
,你对这个词的理解是正确的。以下内容格式不正确:
int (SomeClass::&RefOnSomeMemberFunction) (int) = SomeClass::SomeMemberFunction;
事实上,如果你看看语法规则,只有
嵌套名称说明符*属性说明符seqopt cv限定符seqoptD1
您对所提到的调用boost::bind
和std::bind
中发生的事情的理解是有缺陷的。在此上下文中,是addressof运算符,它生成指向成员(函数)的指针。这个指针是在你引用的段落中定义的。&
是addressof操作符。所以标准简单地说,例如,int(SomeClass::&RefOnSomeMemberFunction)(int)=SomeClass::SomeMemberFunction
在语言中不是有效的断言?据我所知,是的。好的,感谢您的澄清这是如何回答标准是否允许引用成员的问题的?我想@user10000100\u您不明白std::bind
是如何工作的,我试图解释它是如何工作的。再次感谢您的澄清!