sizeof std::string is 4, this is to say it has only a member variable i.e, a pointer to content buffer.
}:cat tt.C
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void foo(std::string &str)
{
//printf("%s/n",NULL); // To generate a core file
int * p = (int *)&str;
printf("sizeof(std::string) is %d/n",sizeof(str));
printf("*(p+0)=0x%x/n",(*p));
printf("*(*(p+0))='%s'/n",(char *)((*(p+0))));
//printf("*(p+1)=0x%x/n",(*(p+1)));
//printf("*(*(p+1))=%s/n",(char *)((*(p+1))));
}
int main()
{
std::string ss("12345");
foo(ss);
return 0;
}
It will get following output:
}:./a.out
sizeof(std::string) is 4
*(p+0)=0x40e10
*(*(p+0))='12345'