关于C风格字符串和string初始化

#include<string>
#include<iostream>
#include<vector>
//#include<iterator> 
using namespace std;
int main(){
    string s = "lin";
    char s1[] = "lin";
    cout << sizeof(s) << endl;
    cout << sizeof(s1) << endl; 
    cout << s.size() << endl;
    return 0;
} 

为什么输出一个是8,一个是4呢。
还有s的长度不应该是4吗,还有最后一个空字符'\0'?
图片说明

std::string类包含指针和长度等信息,字符串存储在指针所指向的内存中。
sizeof不会计算类指针所指向的内存数据大小。

size_type length() const _NOEXCEPT
{ // return length of sequence
return (this->_Mysize);
}

size_type size() const _NOEXCEPT
    {   // return length of sequence
    return (this->_Mysize);
    }
    size()和length()返回的值相同,返回的都是字符串的长度。

为啥我的string类型大小是24

你这里的string是c++的,,不是c的,c的string的length是4,但这里string s的size大小是3,s1是char数组一共四个字符包含'\0,四个字符四个字节,sizeof是计算字节数的,关于sizeof(s)的大小这个是固定的,不关你s的字符串多少,有string的成员决定,我用vs2013的大小如下图。
图片说明

string的长度包含了字符串本身和长度变量,不同的编译器编译出来又不一样,以你sizeof输出的为准。