0

ここで、Student_info はクラスです。異なる長さの文字列で初期化しようとしていますが、入力文字列の長さに依存するはずの場合、常に同じサイズのオブジェクトが得られます。助言がありますか?(Name と Company は、char 配列ではなく、文字列変数として定義されます)

Structure of class Student_info
{ string name, company;
  int yr, age;
}


      Student_info *s[5];
      s[0]= new Student_info("Aakash Goyal","form MNNIT Allahabad",2,57);       
      cout<<endl<<s[0]->getCompany()<<" is the company"<<endl;
      cout<<endl<<s[0]->getName()<<" is the name and the size is: "<<sizeof(*s[0]);


      s[1]= new Student_info("Hare Krishna","Hare Krsna Hare Rama",1,34);
      cout<<endl<<s[1]->getCompany()<<" is the company"<<endl;
      cout<<endl<<s[1]->getName()<<" is the name and the size is: "<<sizeof(*s[1]);
4

2 に答える 2

3

の結果はsizeof、文字列を集約する独自の型を含む、特定の型に対して常に一定です。これは帰納法によって簡単に確認できます。すべての型はプリミティブ (数値型、ポインターなど) を集約することによって構築され、すべてのプリミティブは固定サイズであるため、それらから作成できる型も固定サイズになります。std::stringStudent_info

などの可変量のデータを格納する型やstd::string、その他の型は、データが格納されているメモリ領域へのポインターstd::vectorを集約することによってこれを行います。その領域のサイズは一定ではありませんが、ポインター (およびそれを含むクラス) のサイズは一定です。

于 2013-08-07T08:36:08.243 に答える
2

sizeof()コンパイル時の演算子です。実行時には、特定のオブジェクトに対して常に同じ定数値が返されます。

オブジェクトに a を含め、std::stringそれに異なる値を割り当てたとしてもsizeof()、文字列を保持するデータ バッファーはstd::string(本質的にポインターを介して)内部で処理されるため、 によって計算される囲んでいるオブジェクトのサイズは同じままです。指すデータに関係なく一定のサイズ)。

文字列の実行時の長さを取得したい場合は、そのlength()メソッドを使用してください。

于 2013-08-07T08:37:40.290 に答える