(转载)http://www.cnblogs.com/wanghetao/archive/2012/04/04/2431760.html
今天看《程序员面试宝典》一书(为了应付将要到来的微软笔试),看到了sizeof(string)这个问题。在Dev C++上测试的结果是4,很不明白。上网搜了一下,得到如下结果:
string strArr1[]={"Trend", "Micro", "Soft"};
sizeof(strArr1)=12
转自:http://apps.hi.baidu.com/share/detail/30398570
关于sizeof(string),今天看那本面试宝典的时候看到这个表达式,有点吃惊,书上写着sizeof(string)=4;当时很纳闷,难道分配4个字节大小的内存给string吗?查阅了相关资料得出结论:string的实现在各库中可能有所不同,但是在同一库中相同一点是,无论你的string里放多长的字符串,它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配的,与sizeof()无关。
sizeof(string)=4可能是最典型的实现之一,不过也有sizeof()为12、32字节的库实现。 但是VC6.0测试后sizeof(string)=16.还是跟编译器有关。
#include <iostream> #include <bitset> #include <string> using namespace std; int main(int argc, char *argv[]) { string name; cout << sizeof(name) << endl; cout << sizeof(string) << endl; string addr("BeiJing ShangHai"); cout << sizeof(addr) << endl; cout << sizeof(string) << endl; string addrList[] = {"HeiFei", "TianJin", "NanJing"}; cout << sizeof(addrList) << endl; return 0; }
程序输出:
Windows下结果
Linux下输出结果
结论:
(1)string在不同的平台上实现是有所不同的。
(2)sizeof确实是咋编译器起作用的。