Rokiのチラ裏

学生による学習のログ

Quoted Strings Library Proposal

知らなかったので自分用メモ。

#include<sstream>
#include<string>
#include<iomanip>
#include<cassert>

int main()
{
    using namespace std::string_literals;
    std::stringstream ss;
    std::string original="foolish me";

    {
        std::string round_trip;
        ss<<std::quoted(original);
        ss>>std::quoted(round_trip);
        assert(original==round_trip); // assert will not fire
    }
    {
        ss.str("");
        ss.clear(std::stringstream::goodbit);
        original="\"She said \\\"Hi!\\\"\"";
        ss<<std::quoted("She said \"Hi!\"");
        assert(original==ss.str());
    }
}

スペース、バックスラッシュ、ダブルクオートなどを入力する場合、文字列が区切られてしまったり、バックスラッシュで文字である事を示さなければならなかったが、quotedマニピュレータによって上記のように書く事ができるようになる。
C++14時点でiomanipに定義されていたが、C++1zではiostreamにも入るとのこと。

参照

N3654