tag:blogger.com,1999:blog-3636872937372639901.post5358880161237883791..comments2024-03-27T21:24:43.584+09:00Comments on 本の虫: Raw String Literalとプリプロセッサ江添亮http://www.blogger.com/profile/13387122818743087721noreply@blogger.comBlogger6125tag:blogger.com,1999:blog-3636872937372639901.post-58330505481940303592010-04-01T10:16:55.901+09:002010-04-01T10:16:55.901+09:00うへ、これ、ill-formedです。
つまり、
「) d-char-sequence_opt &q...うへ、これ、ill-formedです。<br />つまり、<br />「) d-char-sequence_opt "」に「バックスラッシュ改行」を有限個挿入したものも出現してはならない<br />というのは、正しいようです。<br />気がつかなかった。江添亮https://www.blogger.com/profile/13387122818743087721noreply@blogger.comtag:blogger.com,1999:blog-3636872937372639901.post-32464670637815177342010-04-01T09:39:48.023+09:002010-04-01T09:39:48.023+09:00ああ、思い出した。この問題は、今まさに、議論されていたのでした。ああ、思い出した。この問題は、今まさに、議論されていたのでした。江添亮https://www.blogger.com/profile/13387122818743087721noreply@blogger.comtag:blogger.com,1999:blog-3636872937372639901.post-55359141277840386132010-04-01T09:38:08.887+09:002010-04-01T09:38:08.887+09:00ん? こういうことですか?
R"delimiter( )deli\
miter )de...ん? こういうことですか?<br /><br />R"delimiter( )deli\<br />miter )delimiter" ;<br /><br />これは、")delimiter"として、認識されると思いますが。<br />あ、でもどうでしょう。ちょっとこれは、調べます。江添亮https://www.blogger.com/profile/13387122818743087721noreply@blogger.comtag:blogger.com,1999:blog-3636872937372639901.post-50630500983492803242010-04-01T09:32:47.165+09:002010-04-01T09:32:47.165+09:00ありがとうございます。すると、
・ r-char-sequence の中に delimiter と...ありがとうございます。すると、<br /><br />・ r-char-sequence の中に delimiter として使われている「) d-char-sequence_opt "」が出現してはならない<br /><br />という規則は正確には<br /><br />・phase 1, 2 の後、 phase 3 の逆変換が行われる前の状態 (r-char-sequense の中も「バックスラッシュ改行」が除去されている状態) で上の規則が成立する<br /><br />つまり、生のソースコードで言うと、出現してはならないのは「) d-char-sequence_opt "」だけに限らず、<br />「) d-char-sequence_opt "」に「バックスラッシュ改行」を有限個挿入したものも出現してはならないということになるわけですね。Tsuda_TKYhttps://www.blogger.com/profile/06614291723073871640noreply@blogger.comtag:blogger.com,1999:blog-3636872937372639901.post-42075994529500298002010-04-01T02:04:03.602+09:002010-04-01T02:04:03.602+09:00phase 3で、逆変換が起こるのは、r-char-sequenceの中だけです。
raw-str...phase 3で、逆変換が起こるのは、r-char-sequenceの中だけです。<br /><br />raw-string:<br />" d-char-sequence opt ( r-char-sequence opt ) d-char-sequence opt "<br /><br />つまり、d-char-sequenceには、相変わらず、phase 1, 2は適用されます。<br /><br />また、一行コメントの文末にバックスラッシュは、もちろん、改行の除去の対象です。<br /><br />つまり、<br /><br />char const *str = R"XY(test)X\<br />Y";//)X\<br />Y";<br /><br />は、phase 3を終えた後には、<br /><br />char const *str = R"XY(test)XY";//)XY";<br /><br />という形に変換されているので、strは、"test"になります。江添亮https://www.blogger.com/profile/13387122818743087721noreply@blogger.comtag:blogger.com,1999:blog-3636872937372639901.post-33530743968512309492010-03-31T23:56:35.342+09:002010-03-31T23:56:35.342+09:00char const *str = R"XY(test)X\
Y";//)X\
...char const *str = R"XY(test)X\<br />Y";//)X\<br />Y";<br /><br />が str = "test"; になるのか str = "test)X\\\nY\";//"; になるのかちょっと判断つかないのですがどうなんでしょうTsuda_TKYhttps://www.blogger.com/profile/06614291723073871640noreply@blogger.com