2

入力の長さに関係なく、sizeof関数が8を返すのはなぜだろうか。

int main(){
   string input;
   getline(cin,input);
   cout << "size of input is  " << sizeof(input) << endl; //I am guessing 
//it returns the size of a pointer because my OS is 64 bits.
   return 0;
}

だから私の質問は、暗黙の変換がどこで起こったのかということです。これがgetlineの宣言です、

istream& getline ( istream& is, string& str );

また、この種の変換は常に発生します。つまり、あらゆるものからポインタ型への変換ですが、その一般的なケースはありますか?ありがとうございました。

4

2 に答える 2

13

sizeofサイズをバイト単位で示します。std::string実際のデータへのポインタが含まれています。単一のポインタのサイズは、それが指しているもののサイズに関係なく同じままです。これを他の要素と組み合わせると、合計サイズは8になります。

文字列の実際の長さのいずれstd::string::sizeかを探しています。std::string::lengthnullで終了するC文字列のサイズを取得する関数を探している場合は、を使用しますstrlen()

于 2012-05-25T23:29:05.460 に答える
3

ここでは変換は行われていませんsizeof。オブジェクトの実際のバイトサイズが返されるだけです。明らかに、std :: stringはヒープに割り当てられたメモリを使用して実際のコンテンツを格納するため、特定の文字列に使用されている合計バイト数を正確に知る方法はありません。

于 2012-05-25T23:28:22.670 に答える