2015-10-27 31 views
-3

線148source code link here'typename List :: node_type&t elem_node = elem - > * list.node''的語法含義是什麼?</p> <pre><code>typename List::node_type& elem_node = elem->*list.node; </code></pre> <p>它是如此奇怪:<code>->*</code>

我來到這裏感到困惑讀取mysql源代碼代碼。 什麼是語法意義?

+2

您是否嘗試過自己搜索它?像使用谷歌搜索「C++操作符」並閱讀幾個最重要的結果?那告訴你什麼,以及你不明白的是什麼? – Angew

+0

@Angew,我真的不容易搜索運算符' - > *'。 – Al2O3

+1

「指向成員的指針」是此運算符的名稱:http://en.cppreference.com/w/cpp/language/operator_member_access#Built-in_pointer-to-member_access_operators – mch

回答

2

->*表示法是需要的,因爲list是指向成員的指針。這裏有一個簡單的例子:

#include <iostream> 

struct S { 
    int a; 
    int b; 
}; 

int main() 
{ 
    // 'ptr' now points to the 'b' member of some 'S' value. 
    int (S::*ptr) = &S::b; 

    S *x = new S; 
    x->*ptr = 5; 

    std::cout << x->b << '\n'; 
} 

這個程序打印'5'。使ptr指針的類型爲int (S::*),即指向S結構的某個int成員的指針。它已初始化爲指向b成員。

當然,實際一些理智的對待它,你需要指定S結構要修改的。這是通過

x->*ptr 

這可以解讀爲「這是由ptr指針取消引用的x值的成員」來完成。

相關問題