以下代码:
struct X
{
void f() {}
void g()
{
auto h = &f;
}
};
Run Code Online (Sandbox Code Playgroud)
结果是:
error: ISO C++ forbids taking the address of an unqualified
or parenthesized non-static member function to form a pointer
to member function. Say ‘&X::f’
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么标准不允许和禁止这样做?作为用户,将它称为不合格会更方便,所以我假设有一些其他的理由(安全性?模糊性?编译器实现的简易性?)?
指向成员的指针非常罕见,可以进行特殊处理,而不一定是最经济的处理.决定唯一接受的形式是错误消息中引用的形式.在任何情况下,这种形式都不会与其他任何形式发生冲突.并且可以防止更多松散形式的歧义.
实践表明对PTMF的认识很少,而且它们与功能根本不同.f或&f可能是正常功能的请求.一个不能为非静态成员服务的人.那些真正意味着PTMF的人说是这样添加&X :: part.
| 归档时间: |
|
| 查看次数: |
2738 次 |
| 最近记录: |