2017-09-22 6 views
0

このようなクラスがあると仮定し、 の容量を持つ文字列を作成したいとします。私は次のことを試みたが、うまくいかなかった。 提案がありますか?私はコンストラクタでそれを行うことができることは知っていますが、可能であれば宣言の際にそれをやりたいと思います。宣言中に文字列サイズを初期化する

class foo 
{ 
std::string bar = std::string().resize(45); 
} 

私はエラー

main.cppを取得:機能に ')(INTメイン': main.cppに:8:46:エラー:非スカラ型に '無効' からの変換」をstd :: __ cxx11 :: string {別名std :: __ cxx11 :: basic_string} 'が要求されました std :: string test = std :: string()。resize(45);

答えて

0

C++では、おそらく必要ないでしょう以前のメソッドが正しい戻り値の型を持たない限り、 "連鎖"メソッドに変換します。

@James Maaが示唆しているように、単にコンストラクタを使用できます。

0

C++ 11で、我々は新しい機能を持っているので

string str = string(); 

は、余分な時間が発生することはありませんmove constructorと呼ばれます。

http://en.cppreference.com/w/cpp/language/move_constructor

は移動コンストラクタで、プログラムは直接コピーを行うことなく、=記号の後、一時的に構築文字列のアドレスを使用します。

問題は、実際にvoid


basic_string(size_type count, 
       CharT ch, 
       const Allocator& alloc = Allocator()); 

を返すC++でresize()機能はこのコンストラクタはあなたが直接興味を持っている何かであるかもしれないということである。

あなたは

std::string str(45, ' '); 
で何かを行うことができます
+0

参照するコンストラクタは単なる割り当て以上のことを行う必要があります。 (確かにサイズ変更されます。) – tweej

関連する問題