プロが教えるわが家の防犯対策術!

VC++2010にて

1.下記コードにおいて、変数iPと変数aの値(アドレス)が同じになると思ったのですが、異なる値になります。なぜでしょうか。

2.「&iPVector.begin()」はiPVectorの先頭の実体を返すので、int*型が返却されると思うのですが、「int* iP = (int*)&iPVector.begin();」というように、(int*)をつけて明示的にキャストしなければビルドが通りません。なぜでしょうか。

よろしくお願いします。

-----------------
std::vector<int*> iPVector;

int* a;
a = new int(2);
iPVector.push_back(a);

int* iP = (int*)&iPVector.begin();

A 回答 (3件)

>(int&)*iPVector.begin()


これはコンパイル出来ましたか?

int* iP = *iPVector.begin();

これで良いと思いますが。
    • good
    • 0
この回答へのお礼

前者はコンパイルできませんでした。
後者で問題ありません。
疑問に思っていたソースコードを貼り付け間違えてたので、変な質問になってしまいました。

お礼日時:2014/03/13 08:42

既に回答があるから蛇足なんだけど,


「そうすると、(int&)*iPVector.begin()について、」
の「そうすると」の意味が全くわからない.

なにがどう「そうすると」なんだろう? そんな書き方, どこで見たんでしょうか?
    • good
    • 0

えぇと.... 少なくとも「&iPVector.begin() が iPVectorの先頭の実体を返す」ようなことはありえないんだけど....



ひょっとして *iPVector.begin() と勘違いしてる?

この回答への補足

ああ…勘違いです。
そうすると、(int&)*iPVector.begin()について、
しかしこのときの『&』の意味がわかりません…

補足日時:2014/03/13 01:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!