(转载)sizeof和sizeof(string)的问题

(转载)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确实是咋编译器起作用的。

原文地址:https://www.cnblogs.com/Robotke1/p/3072483.html