を行くとき、私はこれで行くとき:異なるサイズ二つの異なる方法で
string s="hello";
cout<<sizeof(s);
そして、それが答えとして4を示しているが、私はいくつかの個々の値のために行くとき:
string s="hello";
cout<<sizeof(s[2]);
出力として1を示します。この出力を見ると、文字列に5文字があるので、1の答えは5でなければなりません。どこが間違っていますか? (私はこれをIdeoneで実行しました)。
を行くとき、私はこれで行くとき:異なるサイズ二つの異なる方法で
string s="hello";
cout<<sizeof(s);
そして、それが答えとして4を示しているが、私はいくつかの個々の値のために行くとき:
string s="hello";
cout<<sizeof(s[2]);
出力として1を示します。この出力を見ると、文字列に5文字があるので、1の答えは5でなければなりません。どこが間違っていますか? (私はこれをIdeoneで実行しました)。
指定されたパラメータのタイプのコンパイル時バイトサイズを返しsizeof()
。
s
変数はstd::string
クラスのインスタンスであるため、sizeof(s)
std::string
クラスが含まれているため、32ビットの実行可能ファイル(64ビット実行8)で4 std::string
クラス自体のバイトサイズを返します割り当てられた文字データへのポインタである単一のデータメンバランタイムの文字列に割り当てられている文字の数を知りたい場合は、代わりにstd::string::size()
メソッドを使用してください。それはあなたが探している5を返します。
s[2]
のでsizeof(s[2])
1.
sizeof
operatorは、指定された型または式によって占められるメモリ(バイト単位)を返します。プリミティブ型の場合、これは簡単です。クラス/構造体の場合は、構造体自体のフィールドによって占められたバイト数を返します。必ずしもそのデータを指す必要はありません。そのタイプのすべてのインスタンスで同じになります。
this answerも参照してください。
例:
sizeof(char) // 1
sizeof(9001) // sizeof(int), usually 4
struct mystring {
const char* data;
};
mystring foo = {"foo"};
sizeof(mystring) // probably sizeof(const char*), depending on packing; let's say 4
sizeof(foo) // will always be same as above; 4
foo.data = "cornbread is tasty";
sizeof(foo) // the struct itself still takes up the same amount of space; 4
[ 'はsizeof operator'(http://en.cppreference.com/w/cpp/を参照され
char
型のバイトサイズを返し、char
を返しますlanguage/sizeof) – qxz'std :: string'の' sizeof() 'は文字列中の文字数ではありません。これは 'std :: string'クラスのサイズ(バイト単位)です。 'std :: string'が空であるか、何千もの文字を持つかどうかにかかわらず、サイズは同じです。 –