C++編 目次

 コンストラクタ
  /デストラクタ

 


・メンバイニシャライザでの初期化順序

・オブジェクトを作った後に初期化する
・明示的なブロック化

 演算子

 

・代入演算子のオーバーロード

 文字列操作

 

・stringの多重連結を使用した代入

 

 


トップページへ戻る

stringの多重連結を使用した代入

 stringクラスは、+演算子が自分自身を返すので、次のように、stringやCリテラル文字列を次々に連結させていくことができます。

char    cmd[] = "cp ";
char    opt[] = "-p ";
string  src("src.dat ");
string  dst("dst.dat ");
string  cmdLine;

cmdLine = "";
cmdLine = cmdLine +cmd +opt +src +dst;

 この場合は、cmdLineの後ろに文字列を追加しています。では、追加ではなく、代入したい場合はどうでしょうか。次のように書くと、コンパイルエラーになります。これは、cmdとoptのどちらもstringクラスのオブジェクトではないので、stringクラスの+演算子が呼び出されないためです。

char    cmd[] = "cp ";
char    opt[] = "-p ";
string  src("src.dat ");
string  dst("dst.dat ");
string  cmdLine;

cmdLine = cmd +opt +src +dst;  // エラー

 この場合は次のように、2行に分けて書く必要があります。

char    cmd[] = "cp ";
char    opt[] = "-p ";
string  src("src.dat ");
string  dst("dst.dat ");
string  cmdLine;

cmdLine = cmd;  // 代入
cmdLine = cmdLine +opt +src +dst;  // 追加

 でも、単に文字列の連結を代入したいだけなのに、2行も使うのはもったいないですよね。1行で書く方法はないでしょうか?これは、いろいろと方法はありますが、次のようにerase()関数と組み合わせると、1行で代入できます。

char    cmd[] = "cp ";
char    opt[] = "-p ";
string  src("src.dat ");
string  dst("dst.dat ");
string  cmdLine;

cmdLine = cmdLine.erase() +cmd +opt +src +dst;  // 代入

 erase()は、文字列を消去し、自分自身を返します。この戻り値を使うと、stringクラスの+演算子を呼び出すことができます。