オブジェクトのアドレスを表示するコードです。
一言で言えば stati_cast で void のポインタにキャストして stream に渡してるということです。
#include <iostream> #include <vector> void showAddress() { std::vector<char> vec(100); //vectorオブジェクトのアドレスを表示 std::cout << "vec = " << static_cast<void *>(&vec) << std::endl; //vector内部で使われているバッファのアドレスを表示 std::cout << "data = " << static_cast<void *>(vec.data()) << std::endl; // new して確保したchar配列のアドレスを表示 char *chars = new char[100]; std::cout << "chars = " << static_cast<void *>(chars) << std::endl; } int main(){ showAddress(); }
出力(Mac上のXcodeでビルドし実行)
$ ./ShowAddress vec = 0x7fff5fbff6e8 data = 0x100400100 chars = 0x100400170
vector オブジェクトはスタック上に、vector内部で確保されるバッファとnewで確保したオブジェクトは別のメモリ領域に確保されている様子がみえます。