2016-08-08 61 views
0

我在一塊C++代碼,其中A是一個指針遇到這種指令a =和* A在C++中的含義是什麼(其中A是指針)?

a=&*A; 

。任何人都可以解釋它的語義以及它與a=A不同嗎?

+7

C或C++?這裏非常重要的區別! (除非這裏的所有內容都是內置類型,如果是這種情況,請說明) –

+5

什麼是'A'?... –

+1

請記住,C++有運算符重載,所以不可能在不知道「A」是什麼的情況下回答,什麼運營商爲它重載。 –

回答

9

如果A是一個迭代器,那麼*A會爲您提供迭代器「指向」的值。然後將&運算符應用於該值以獲取該值的地址。除非&運算符超載。

簡單的,有點笨例如:

struct Foo 
{ 
    // Some data... 
}; 

std::vector<Foo> vector_of_foo; 

// Code to populate vector_of_foo 

for (auto A = vector_of_foo.begin(); A != vector_of_foo.end(); ++A) 
{ 
    Foo* a = &*A; 
    // Do something that requires a pointer to Foo... 
} 
+0

該示例超過10000字:)謝謝。 – zell

2

假設A是一種對象,那麼可能*是一個運算符。

如果A是迭代器,那麼a可能是迭代器指向的當前元素的地址。

3

運算符*可能被重載,並且它通常會爲迭代器和智能指針重載。

如果A是類似指針語義的類和你想獲得原始指針珍惜它指向,那麼你必須申請符*(訪問值),然後運營商&(檢索地址) 。

這是最有可能的用例,當你看到這樣的構造。在不知道A和相關類別是什麼的情況下不可能知道更多:*可以被重載以執行其他操作並且&也可以被重載。

-1

這是我在大學裏學的解釋。 & = 「在數值」

& * A =從左至右 「在A處的,值地址」

  • = 「的地址」。

相關問題