今天看《程序员面试宝典》一书(为了应付将要到来的微软笔试),看到了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确实是咋编译器起作用的。