|
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クラスの+演算子を呼び出すことができます。
|