私が最初に紹介された言語にはrepeat()
、文字列を取り、それを何n
度も繰り返す関数 がありました。たとえば、repeat ("hi", 3)
の結果が得られ"hihihi"
ます。
私はこの関数をかなりの回数使用しましたが、残念なことに、C++ で同様のものを見つけたことがありません。はい、簡単に独自のものを作成したり、使いやすくしたりできますが、まだ含まれていないことにちょっと驚いています。
それが本当にうまく収まる場所の1つは次のstd::string
とおりです。
std::string operator* (const std::string &text, int repeatCount);
std::string operator* (int repeatCount, const std::string &text);
これにより、次のような構文が可能になります。
cout << "Repeating \"Hi\" three times gives us \"" << std::string("Hi") * 3 << "\"."
それ自体はまだそれほど素晴らしいものではありませんが、もっと良くなる可能性があります。
などの文字列演算子を使用するときはいつでも、operator+
1 つの引数が実際に文字列であることを確認する必要があります。のようなリテラルを定義しなかったのはなぜ""s
ですか? アンダースコアで始まらないリテラル サフィックスは実装用に予約されているため、誰かが実際に独自のサフィックスを作成し始める前に追加された可能性があるため、競合することはありません。
繰り返しの例に戻ると、構文は次のようになります。
cout << "123"s * 3 + "456"s;
これにより、次が生成されます。
123123123456
その際、キャラクター用のものも含めることができます。cout << '1's + '2's;
これら 2 つの機能が含まれていないのはなぜですか? それらには明確な意味があり、標準ライブラリを使用しながらコーディングを容易にします。