3

文字列は動的であるため、明確なサイズはありません。したがって、s[0]の前にs[1]を取得すると、C++はそのオフセットアドレスをどのように計算しますか。

たとえば、int a [2]

0000:1000    a[0]
0000:1004    a[1]

プログラム:

#include<iostream>
#include<vector>
using namespace std;

int main()
{
    string s[2];

    cin>>s[1];
    cout<<s[1]<<endl;

    cin>>s[0];
    cout<<s[0]<<endl;
}
4

2 に答える 2

7

文字列の配列は文字列オブジェクトの配列であり、固定サイズであり、文字列が実際に存在する他の場所にポインタが効果的に含まれています。

于 2012-11-08T10:50:03.023 に答える
6

std::stringそのメモリレイアウトには実際にはその文字が含まれていません。動的に割り当てられたメモリへのポインタが含まれているだけで、そのサイズを追跡します。std::vector実際にその要素をそのメンバー内に格納しないのと同じように。代わりに、「ヒープ上」にある実際の要素へのポインターがあります。S

したがって、文字列の文字数に関係なく、そのサイズ(意味sizeof (std::string))はコンパイル時定数です。

于 2012-11-08T10:50:33.637 に答える