我最近遇到了我可以获取标准库中定义的函数的地址吗?,我对答案基本上是不感到震惊。我肯定至少在一些地方写过
&std::someTemplClass<SomeConcreteType>::someMember
,所以我应该复习所有这些,但我该怎么做呢?
来自标准的相关部分,
[…] 除非
被指定为 可寻址函数,否则 C++ 程序的行为是未指定的 […]F
感觉我必须搜索我所应用的所有
std::stuff
的标准并查找单词“可寻址函数”。 但是我如何确定我查看了给定
&
的正确页面?
链接的答案此外,如果 C++ 程序尝试形成对
标准库非静态成员函数std::stuff
的引用,或者尝试形成指定标准库非静态成员函数的指向成员的指针,则它的行为是未指定的(可能是格式错误的) ([member.functions]) 或标准库成员函数模板的实例。
这是否意味着
和标准库成员函数模板的实例化永远不是可寻址函数? 如果是这种情况,我是否正确理解任何出现的
F
甚至只是
&std::someTemplClass<SomeConcreteType>::someNonStaticMemberFunc
都会传递给更高阶的函数,例如在这些情况下,&std::someClass::someMemberFunc
有错吗?
如果它处于未评估的环境中呢,例如
doStuff(someRange | ranges::views::filter(&std::optional<int>::has_value));
std::transform(v.begin(), v.end(),
w.begin(),
boost::bind( &std::string::c_str, boost::placeholders::_1 ) );
?
请不要告诉我答案是端到端”:(