相変わらず「酒を飲みながらグダグダ書いてる」
わけなんですが(うわー、マジメなみなさんゴメンナサイ!!!ダメ人間なんです>< 2回目)
「上流(←なんかこの言葉嫌い)仕事よりも・・・コーディングしたいな!!!というか書かせて!」
という思いのはけ口なんですよ・・・大変お目汚しで失礼しています。。。
そういえば、気楽にコメントしていただいてOKですよ・・・当方「雑談系」なので。。。
「 (´A`)イタダケナイ 」
「 (;´Д`)<ハァ?」
「 (*´д`*) ハァハァ」
全て真摯に受け止めますので是非お気楽に。。。
「わんくま内で・・・こんなんでいいんだろうか・・・」
と日々ビクビクしてます (´Д⊂
今回のお題は「Literals」@C++の中から「文字列リテラル」についてです。
教科書は同じく「ISO/IEC 14882:2003(E)」です。
ではさっそく。
---------------------------------------------------------------
string-literal:
"s-char-sequenceopt"
L"s-char-sequenceopt"
s-char-sequence:
s-char
s-char-sequence s-char
s-char:
any member of the source character set except
the double-quote ", backslash \, or new-line character
escape-sequence
universal-character-name
---------------------------------------------------------------
毎度の事ながらいっこずつ見て行きましょう。
---------------------------------------------------------------
string-literal:
"s-char-sequence(opt)"
L"s-char-sequence(opt)"
---------------------------------------------------------------
さっそくですが・・・
string-literal:
"s-char-sequence(opt)"
L"s-char-sequence(opt)"
string-literal(文字リテラル)というのは・・・
"s-char-sequence(opt)":ダブルクォーテーションで囲まれたs-char-sequence(オプション)
L"s-char-sequence(opt)":こちらはLがついたいわゆる「ワイド文字」バージョンですね
当たり前といえば当たり前ですが、s-char-sequenceはオプションなので""もあり、ってなわけですね。
---------------------------------------------------------------
s-char-sequence:
s-char
s-char-sequence s-char
---------------------------------------------------------------
で、そのs-char-sequenceとはなんぞやというと・・・
s-char
s-char-sequence s-char
s-charが1個以上連続しているもの・・・となります。
---------------------------------------------------------------
s-char:
any member of the source character set except
the double-quote ", backslash \, or new-line character
escape-sequence
universal-character-name
---------------------------------------------------------------
ではそのs-charがなんぞや・・・という話になりますが、
「ダブルクォート["]」「バックスラッシュ[\](日本語環境なので\ですが・・・)」
「改行文字」を除いた・・・
エスケープシーケンスとuniversal-character-name
(文字リテラルの回参照)
になります。
ちょっと短めなので、少し文章を見ていきましょう。
---------------------------------------------------------------
A string literal is a sequence of characters (as defined in 2.13.2) surrounded by double quotes, optionally beginning with the letter L
---------------------------------------------------------------
「文字列リテラル」といのはダブルクォートに囲まれた(オプションでワイド文字指定のLあり)文字の連続ですよ、というわけです。
---------------------------------------------------------------
An ordinary string literal has type “array of n const char” and static storage duration (3.7),
---------------------------------------------------------------
「文字列リテラル」というはの"const charの配列"なわけですね。
ってこの辺は実践を積んでる方にはものすごく当たり前ですね・・・
そして、「static storage duration 」ストレージ(メモリでもディスクでもいいですが。。。)
「静的[static]」「連続[duration]」が保障されてるんですね。(コンパイラが準拠してれば。。。
---------------------------------------------------------------
’\0’ is appended to every string literal so that programs that scan a string can find its end
---------------------------------------------------------------
文字列の終端を判別できるように、終端に'\0'をつけなさいよー、と言ってます。
普段プログラムを書いていると当たり前になっていますが、
こんなとこで定義してあるんですねー。
「programs that scan a string can find its end」(プログラムが終端を判別できるように)
文章に義務って程の強さは無いような・・・事実上の義務ですよね。
ん、でも「every string」って言ってんだから義務か・・・やっぱり。。。
次回、「リテラル編」最終回、「真理値リテラル」です!