簡體   English   中英

為什么不能從C ++ 11中的非限定成員函數名稱獲取指向成員的指針?

[英]Why can't you get pointer-to-member from unqualified member function name in C++11?

以下代碼:

struct X
{
    void f() {}

    void g()
    {
        auto h = &f;
    }
};

結果是:

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’

我的問題是, 為什么標准不允許和禁止這樣做? 作為用戶,將它稱為不合格會更方便,所以我假設有一些其他的理由(安全性?模糊性?編譯器實現的簡易性?)?

指向成員的指針非常罕見,可以進行特殊處理,而不一定是最經濟的處理。 決定唯一接受的形式是錯誤消息中引用的形式。 在任何情況下,這種形式都不會與其他任何形式發生沖突。 並且可以防止更多松散形式的歧義。

實踐表明對PTMF的認識很少,而且它們與功能根本不同。 f或&f可能是正常功能的請求。 一個不能為非靜態成員服務的人。 那些真正意味着PTMF的人說是這樣添加&X :: part。

您正在獲取成員函數的地址,而不是函數,這意味着您也必須以不同的方式調用它。

struct X
{
    void f() {}

    void g()
    {
        auto h = &X::f;
        h();
    }
};

生產:

error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘h (...)’, e.g. ‘(... ->* h) (...)’

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM