C++相談室 part45
■ このスレッドは過去ログ倉庫に格納されています
0152デフォルトの名無しさん
2005/12/01(木) 23:08:55>>147のって、生のchar*を使うとすれば
char *s = ...;
while (isspace(*s))
s++;
で、sをずらすだけで済むケースがあるじゃん?
で、同様にstring::c_str()を使ってみると
std::string str = ...;
const char *s = str.c_str();
while (isspace(*s))
s++;
で、ここで、strに戻す(代入しなおす)わけだが、
sはstrの(実体の)内部を指している。
つまり、気楽に str = s; とすると、
実装の仕方によっては不具合が出る可能性がある気がするんだが、
仕様的にはこの辺どうなのか、知ってる人居る?
要は「stringの代入演算子の内部で元の文字列をdeleteするタイミング」
に規定があるのかどうか、って事だけど。
もちろん、char*ではなくiteratorを使っても同じだと思うけど、
・部分文字列を作って
・新規にstringのインスタンスを作り
・それを元のstrに代入する
の3段階の手順を踏むような、例えば
str = string(it, str.end());
みたいな形なら、間違いなく問題は無いはず。
■ このスレッドは過去ログ倉庫に格納されています