トップページ⇒tech
108コメント40KB

C++規格書のココを読め

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
C++の規格について不毛な議論を避けるために「規格書のココを読め」
というリンクを張ろう。テキストはこれ。
http://www.kuzbass.ru/docs/isocpp/
0002とりあえずNGNG
2げとずざ
0003デフォルトの名無しさんNGNG
おれが憶えている範囲で。

・_ で始まる名前はなぜ使っちゃいけない?
17.4.3.1.2 - Global names [lib.global.names]
http://momiji/data/doc/isocpp/lib-intro.html#lib.reserved.names

・宣言と定義の違いは?
3.1 - Declarations and definitions [basic.def]
http://momiji/data/doc/isocpp/basic.html#basic.def

・関数テンプレートではデフォルトのテンプレート引数を使えない
14.1 - Template parameters [temp.param]
-9-
http://momiji/data/doc/isocpp/template.html#temp.param
0004デフォルトの名無しさんNGNG
ページ番号の印刷位置が微妙にずれてる箇所がある。
そこがポイントだ。
00053NGNG
ばかだ。まちがえた。こっち。

・_ で始まる名前はなぜ使っちゃいけない?
17.4.3.1.2 - Global names [lib.global.names]
http://www.kuzbass.ru/docs/isocpp/lib-intro.html#lib.reserved.names

・宣言と定義の違いは?
3.1 - Declarations and definitions [basic.def]
http://www.kuzbass.ru/docs/isocpp/basic.html#basic.def

・関数テンプレートではデフォルトのテンプレート引数を使えない
14.1 - Template parameters [temp.param]
-9-
http://www.kuzbass.ru/docs/isocpp/template.html#temp.param
00063NGNG
ごめん、合ってた。

・_ で始まる名前はなぜ使っちゃいけない?
17.4.3.1.2 - Global names [lib.global.names]
http://momiji/data/doc/isocpp/lib-intro.html#lib.reserved.names

・宣言と定義の違いは?
3.1 - Declarations and definitions [basic.def]
http://momiji/data/doc/isocpp/basic.html#basic.def

・関数テンプレートではデフォルトのテンプレート引数を使えない
14.1 - Template parameters [temp.param]
-9-
http://momiji/data/doc/isocpp/template.html#temp.param
00073NGNG
>>6 名前を騙るな。
で # 以降は ime.nu が切っちゃうね。ttp:// ではじめたほうがいいかな。
0008偽1NGNG
そして最後にはISO/IEC 14882-1998規格完全準拠の処理系を作りに乗り出します
0009デフォルトの名無しさんNGNG
http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
参考書はコレで
0010デフォルトの名無しさんNGNG
>>9
それはさすがにまずかろー。ここで買ってね。18ドル。
http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%2D1998
0011デフォルトの名無しさんNGNG
>>9は何なの?違法コピ?
0012デフォルトの名無しさんNGNG
>>9って違法!?
俺落としちゃったけど削除しとこう・・・
0013デフォルトの名無しさんNGNG
⊂(`Д´⊂ )⊃==領すレGET-
0014デフォルトの名無しさんNGNG
>>12
本当に削除した?
0015デフォルトの名無しさんNGNG
保守
0016lo;こんう&lro;NGNG
 
0017lo;スレジマ&lro;NGNG
           
0018­NGNG


0019デフォルトの名無しさんNGNG
ほっしゅ
0020デフォルトの名無しさんNGNG
CFAQでも読めや>1
ttp://homepage2.nifty.com/rohizuka/ka/pa_003_a.htm
0021デフォルトの名無しさんNGNG
>>20
ハァ?
0022デフォルトの名無しさんNGNG
ニヤリ
0023デフォルトの名無しさんNGNG
C イイ!
0024デフォルトの名無しさんNGNG
ぷぅ
0025デフォルトの名無しさんNGNG
通報しますた
0026デフォルトの名無しさんNGNG
0027デフォルトの名無しさんNGNG
0028デフォルトの名無しさんNGNG
ちゃんと重箱の隅つっついとけ
http://std.dkuug.dk/jtc1/sc22/wg21/
0029デフォルトの名無しさんNGNG
僕の肛門もIP記録実験です
0030デフォルトの名無しさんNGNG
俺は イスラエル---インド---中国---北欧---カナダ---エジプト---自宅

と20もの多弾プロ串を経由しているので追跡は不可能です。
0031デフォルトの名無しさんNGNG
結局自分に都合の悪いレスされると答えないで逃げるかレッテル張りするへたれなわけだが(w>コピペ厨
0032デフォルトの名無しさんNGNG
宮崎はスーパーハカーのお友達がいるからこんなことしなくても関係ないだろ。
0033デフォルトの名無しさんNGNG
2chは普通の無個性な掲示板になりました
0034デフォルトの名無しさんNGNG
記録実験をトップニュースにする程公共性があるのかと小一時間問い詰めたい。
あとニュースなんだからちゃんと「IPアドレス」って書け。
なんか投票までやってるし。
0035デフォルトの名無しさんNGNG
どうでもいいけどね
0036デフォルトの名無しさんNGNG
>>216
(=゚ω゚)ノぃょぅ
0037デフォルトの名無しさんNGNG
>>572
なんで?
IPなんて圧縮しなくても最低4バイトあれば記録できるYO!
0038デフォルトの名無しさんNGNG
>>238
はいはい能書きはいいから
実際問題、仮に削除された奴が
削除されたことに対して文句を言っても無駄でしょ
大袈裟に語らんでよ
0039デフォルトの名無しさんNGNG
>>713
他のサバもバンバンやっちゃって。
0040デフォルトの名無しさんNGNG
Z武とマンコだけは外せないということは言うまでもない
0041デフォルトの名無しさんNGNG
野鳥スレがどうこう言うんだったら、それに反応するのもやめた方が
いいと思いますよ。>運営ボランティアの皆さん。

だれそれの正体とか言う話が出ると、それに呼応するように
トリップの教えあいとかして、テストスレなどに書き込む。
馴れ合いの一種だと思いますが、ちがうでしょうか。。。
0042デフォルトの名無しさんNGNG
ひろゆき後ろを見ろ!
0043デフォルトの名無しさんNGNG
ACCS、任天堂、警察のみなさ〜ん!!
24歳童貞もよ(ニュー速いちのうんこ好き) ◆RKlw/UJGqg
が著作権侵害の犯罪教唆しましたよ〜!!
http://live2.2ch.net/test/read.cgi/news/1041919882/717


717 :24歳童貞もよ(ニュー速いちのうんこ好き) ◆RKlw/UJGqg :03/01/09 00:01 ID:PgSHqi/K
>>699
おまいら買ったらすぐにnyに流せよ。

0044デフォルトの名無しさんNGNG
IP晒されてるのはクソ馬鹿ばっかりだな・・・ こういうのが減るのならいいか・・・
0045デフォルトの名無しさんNGNG
みんな串刺してるのか・・・
俺は生だからうかつな発言はできないなぁ(w
0046デフォルトの名無しさんNGNG
こんにゃく、か、、、
0047デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0048デフォルトの名無しさんNGNG
Σ(´Д゚;≡;゚д`) あばばばばばばばあわわわわわわわ
0049デフォルトの名無しさんNGNG
追跡されないようにしてから書き込めばいいだけのこった。
0050デフォルトの名無しさんNGNG
なにやってんだか・・・
0051デフォルトの名無しさんNGNG
匿名は仮面舞踏会のようなあやしい雰囲気が(略
0052デフォルトの名無しさんNGNG
インポ
0053デフォルトの名無しさんNGNG


<血液型A型の一般的な特徴>(見せかけの優しさ・もっともらしさ(偽善)に騙されるな!)
●とにかく気が小さい(神経質、臆病、二言目には「世間」、了見が狭い)
●他人に異常に干渉する(しかも好戦的・ファイト満々でキモイ)
●自尊心が異常に強く、自分が馬鹿にされると怒るくせに平気で他人を馬鹿にしようとする
(ただし、相手を表面的・形式的にしか判断できず(早合点・誤解の名人)、実際にはたいてい、内面的・実質的に負けている)
●「常識、常識」と口うるさいが、実はA型の常識はピントがズレまくっている(日本の常識は世界の非常識)
●権力、強者(警察、暴走族…etc)に弱く、弱者には威張り散らす(強い者に弱く、弱い者には強い)
●あら探しだけは名人級(例え10の長所があってもほめることをせず、たった1つの短所を見つけてはけなす)
●基本的に悲観主義でマイナス思考に支配されているため、性格がうっとうしい(根暗)
●一人では何もできない(群れでしか行動できないヘタレ)
●少数派の異質、異文化を排斥する(差別主義者、狭量)
●集団によるいじめのパイオニア&天才(陰湿&陰険)
●悪口、陰口が大好き(A型が3人寄れば他人の悪口、裏表が激しい)
●他人からどう見られているか、体裁をいつも気にしている(「世間体命」、「〜みたい」とよく言う)
●自分の感情をうまく表現できず、コミュニケーション能力に乏しい(同じことを何度も言う、知障)
●表面上意気投合しているようでも、腹は各自バラバラで融通が利かず、頑固(本当は個性・アク強い)
●人を信じられず、疑い深い(自分自身裏表が激しいため、他人に対してもそう思う)
●自ら好んでストイックな生活をし、ストレスを溜めておきながら、他人に猛烈に嫉妬する(不合理な馬鹿)
●執念深く、粘着でしつこい(「一生恨みます」タイプ)
●自分に甘く他人に厳しい(自分のことは棚に上げてまず他人を責める。しかも冷酷)
●男は、女々しいあるいは女の腐ったみたいな考えのやつが多い(他人をけなして相対的に自分の立場を引き上げようとする等)


それと、O♀はエコヒイキきつくて、冷酷だからな。

A♂の異質排除×O♀の冷酷=差別・いじめ とあいなる。
0054デフォルトの名無しさんNGNG
たとえばここで唐突に広末をどうしたいと叫んだところで、
その広末がどの広末なのか特定するのは事実上不可能です。
しかし特定の有名人の広末を主題とするスレッドで
類似発言を連呼すればグレーゾーンに入りますね。
「ケース・バイ・ケース」という言い古された言葉を
貴方の鈍いオツムに吹き込んでおくしかありません。

上の最後の一行について名誉毀損で訴えますか?(笑
0055デフォルトの名無しさんNGNG
とにかく2ちゃんは人が減るのを一番恐れている。
0056デフォルトの名無しさんNGNG
裁判で負けたら、手のひらを返したようにルール変更
匿名は弱者保護のためですって言ってのは、やっぱり詭弁だったんだね (´・д・`)
0057デフォルトの名無しさんNGNG
ISP責任法でよろしこ
0058デフォルトの名無しさんNGNG
 厨質問スマソ
hobby 今何をされてるんでつか?
0059デフォルトの名無しさんNGNG
おならぷー
0060山崎渉NGNG
(^^)
0061デフォルトの名無しさんNGNG
結局ひろゆきの年収っていくらなんだろう?
0062山崎渉NGNG
(^^)
0063山崎渉NGNG
(^^)
0064デフォルトの名無しさんNGNG
結局どこを読めばいいのでしょうか
0065デフォルトの名無しさんNGNG
ぜんぶー
0066山崎渉NGNG
(^^)
0067山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0068山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0069デフォルトの名無しさんNGNG
C 以外は糞
0070デフォルトの名無しさんNGNG
何このスレ?
age2chの標準機能で荒らされてるみたいなんだけど
0071(*゚Д゚)NGNG
オナニーしちゃった。
0072(*゚Д゚)NGNG
じゃなかった・・・072ーだった。
0073(=゚Д゚)NGNG
C++ってなんすか?
0074(*゚Д゚)NGNG
バハムート改の事だよ…!!これで物知り博士の仲間煎り。
0075デフォルトの名無しさんNGNG
C++を理解できない奴はこうやって荒らしたりするのか。
なるほど、勉強になる。
0076(*゚Д゚)NGNG
授業料没収します…
0077デフォルトの名無しさんNGNG
誰かあの長々とした英文を翻訳してください。
って無理だわな。
英語も勉強しないと。
00783 ◆zz/Ed1ynRo NGNG
>>46
同意

ところで、携帯ゲーム機"プレイステーションポータブル(PSP)

 このPSPは、新規格UMD(ユニバーサルメディアディスク)というディスクを利用しており、そのサイズは直径6cmととても小さい(CDの半分程度)。 容量は1.8GBとなっている。
画面は4.5インチのTFT液晶で、480px x 272px(16:9)。MPEG4の再生やポリゴンも表示可能。外部端子として、USB2.0とメモリースティックコネクタが用意されているという。

この際、スク・エニもGBAからPSPに乗り換えたらどうでしょう。スク・エニの場合、PSPの方が実力を出しやすいような気がするんですが。
任天堂が携帯ゲーム機で圧倒的なシェアをもってるなら、スク・エニがそれを崩してみるのもおもしろいですし。かつて、PS人気の引き金となったFF7のように。

いきなり変なこと書いてスマソ‥‥
GBAと比較してみてどうですかね?(シェアのことは抜きで)
0079山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0080山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0081山崎 渉NGNG
(^^)
0082山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0083デフォルトの名無しさんNGNG
[]で囲まれたものはキーワード。(opt)はオプション。つまり無いこともあると。

A.12 Templates

template-declaration:
[export](opt) [template] < template-parameter-list > declaration

template-parameter-list:
template-parameter
template-parameter-list, template-parameter

template-parameter:
type-parameter
parameter-declaration // プリミティブ型のことか? template <int int_t>

type-parameter:
[class] identifier(opt)
[class] identifier(opt) = type-id
[typename] identifier(opt)
[typename] identifier(opt) = type-id
[template] < template-parameter-list > class identifier(opt)
[template] < template-parameter-list > class identifier(opt) = id-expression
// id-expressionというのはここでいうtype-id(はっきりしている型)
// が求まる式という意味なのだろうか?
0084デフォルトの名無しさんNGNG
template-id: //汎関数、汎クラスの名前+汎パラメタ実引数をひとまとめにしたもの
template-name < template-argument-list(opt) >

template-name:
identifier

template-argument-list:
template-argument
template-argument-list, template-argument

template-argument:
assignment-expresion //これはなんだ?代入式って?
type-id
id-expression


explicit-instantiation:
[template] declaration
// 汎関数、汎クラスの複数回インスタンス化防止。コンパイラへの優しさ。

explicit-specialization: // 完全特殊化
[template] < > declaration
// specializationとは型パラメタに応じて一つ以上定義部を設けること。
0085デフォルトの名無しさんNGNG
ANSIC++のgrammarだけはここで見れる
http://www.csci.csusb.edu/dick/c++std/cd2/gram.html
0086デフォルトの名無しさんNGNG
C++相談室から拾ってきた。こっちには規格書全部含まれてる。
http://www.kuzbass.ru/docs/isocpp/
0087デフォルトの名無しさんNGNG
14 - Templates [temp]

-1- A template defines a family of classes or functions.
template-declaration:
export[opt] template < template-parameter-list > declaration
template-parameter-list:
template-parameter
template-parameter-list , template-parameter

The declaration in a template-declaration shall
* declare or define a function or a class, or
* define a member function, a member class or a static data member of a class template
or of a class nested within a class template, or
* define a member template of a class or class template.

A template-declaration is a declaration. A template-declaration is also a definition if
its declaration defines a function, a class, or a static data member.

テンプレート宣言の宣言は
* クラス又は関数の宣言、定義する

* 1)メンバ関数、2)メンバクラス、又は3)クラステンプレートのスタティックメンバ、
4)クラステンプレートにネスト宣言されたクラスのスタティックメンバ を定義する。

* クラス又はテンプレートクラスのメンバテンプレート(クラス、関数)を定義する。

この辺りはちょっと具体例がないので分り難い。
Static Data Memberがこのぐらいの抽象度の説明で出てくるのは印象ぶかい。
0088デフォルトの名無しさんNGNG
-2- A template-declaration can appear only as a namespace scope or class scope
declaration. In a function template declaration, the declarator-id shall be a
template-name (i.e., not a template-id). [Note: in a class template declaration, if the
declarator-id is a template-id, the declaration declares a class template partial
specialization (temp.class.spec). ]

(tenplate-declarationとは関数テンプレート、クラステンプレートを人まとめにしたもの)
テンプレート宣言は{namespace scope,class scope}にだけapearする。
つまり関数内ではダメですよ、ということらしい。union内ではどうなのだろうか?

関数テンプレート宣言においては、declarator-idはtemplate-nameとなる。
declarator-id
template-id
template-name
これらの文法内での意味は保留。

クラステンプレート宣言内において、declarator-idとtemplate-idなら、
その宣言はクラステンプレートの部分的特殊化となる。

部分的特殊化はLOKIなどで活用されてるので分りやすい。
問題は、文法用語のこと。とりあえず、declarator-idとtemplate-idが同じなら
テンプレートの部分的特殊化と見なしてよいということ。
まあクラステンプレートの名前のことだと思うけど。
0089デフォルトの名無しさんNGNG
-3- In a template-declaration, explicit specialization, or explicit instantiation the
init-declarator-list in the declaration shall contain at most one declarator. When such
a declaration is used to declare a class template, no declarator is permitted.

8章をみるとdeclaratorについてはこう書いてある
A declarator declarares a single object, function, or type within a declaration.
Init-declarator-list appearing in a declaration is a comma-separated sequence
of declarators.
つまり宣言文のなかで、宣言される一つ以上の対象のことらしい。


template-declarationという集合の中の、
完全特殊化と、explicit instantiationについて書いてある。
ここは分り難い。most one declaratorとは何のことなのか?
なんのことなのか分らん。英語力が足りない。
0090デフォルトの名無しさんNGNG
>>84
> template-argument:
> assignment-expresion //これはなんだ?代入式って?

定数値を取るテンプレート( template<int N> class array とか )に対する引数。
中に array< 1==2 ? 3 : 4+5*6 > と式を書いても構文上は構わんので。
# ここは本当は conditional-expression であるべきだとは思うんだけど。
0091デフォルトの名無しさんNGNG
>>89
> most one declaratorとは何のことなのか?
「at most one declarator」。
最大でも一つの宣言子。
0092デフォルトの名無しさんNGNG
>>90-91
赤ペン先生ありがとうございます。
英語力、C++対する理解ともにかなり怪しいので助かります。
0093デフォルトの名無しさんNGNG
-4- A template name may have linkage (basic.link). A template, a template explicit
specialization (temp.expl.spec), or a class template partial specialization shall not
have C linkage. If the linkage of one of these is something other than C or C++, the
behavior is implementation-defined. Template definitions shall obey the one definition
rule (basic.def.odr). [Note: default arguments for function templates and for member
functions of class templates are considered definitions for the purpose of template
instantiation (temp.decls) and must also obey the one definition rule. ]

テンプレート名はリンケージを持つかもしれない。

テンプレート(そのもの??)、テンプレートの完全特殊化、
又はクラステンプレートの部分的特殊化はCリンケージを持つことはない。

もし、CかC++以外のなんらかのリンケージがひとつあるなら、
その動作はimplement-defined(実装依存?)である。

テンプレートの定義はひとつの定義ルールに従う。

関数テンプレートとクラステンプレートのメンバー関数のデフォルト引数は
テンプレートのインスタンスを目的とした定義と考えられ、また
ある一つの定義ルールに従わなければなりません。
definition ruleというのが3.2に書いてあるが、難しいのでパス。
0094デフォルトの名無しさんNGNG
-5- A class template shall not have the same name as any other template, class,
function, object, enumeration, enumerator, namespace, or type in the same scope (
basic.scope), except as specified in (temp.class.spec). Except that a function template
can be overloaded either by (non-template) functions with the same name or by other
function templates with the same name (temp.over), a template name declared in namespace
scope or in class scope shall be unique in that scope.

クラステンプレートは他のテンプレート、クラス、関数、オブジェクト、enum{型,宣言子}、
namespace、同一スコープにある型と同じ名前を持つことはない。
いくつかの例外はtemp.class.specを見ろと。

テンプレート関数がテンプレート関数、非テンプレート関数の両方に対して
オーバーロードできることを除けば、テンプレートはクラススコープ、ネームスペース
においてユニークな名前で宣言される。


このクラステンプレートにおける例外が曲者っぽい。
0095デフォルトの名無しさんNGNG
何かを説明するときに対象の特徴を元にリストを挙げるわけだけど、リストの全てとは
// class
{名前空間,クラス{,テンプレート},関数{,テンプレート}}内のクラス{,テンプレート}
// function
{クラス{,テンプレート}のメンバとしての,名前空間内の}{,インライン}関数{,テンプレート}

というかんじでしょうか。存在するスコープと属性を元にリストアップ。
一覧が見たい人は、for str in 上の文字列;do echo $str;done
とでもしてみてください。
クラスに関しては10通り。関数に関しては12通り。まだまだあるかもしれません。

仕様書において、関数やクラスの特徴をそのたびごとにずらずらと並べられているのは
分り難いと思いました。一度全ての組み合わせを用いられるケースとは別に挙げて
しまう方が分りやすいかと。
0096デフォルトの名無しさんNGNG
-6- A namespace-scope declaration or definition of a non-inline function template, a
non-inline member function template, a non-inline member function of a class template or
a static data member of a class template may be preceded by the export keyword. If such
a template is defined in the same translation unit in which it is declared as exported,
the definition is considered to be exported. The first declaration of the template
containing the export keyword must not follow the definition.

1)名前空間スコープでの非インライン関数テンプレートの宣言、定義、
2)非インラインのメンバー関数テンプレート
(ただのメンバーというのは非テンプレートのクラスのメンバという意味らしい)
3)非インラインのクラステンプレートのメンバー関数
4)クラステンプレートのスタティックデータメンバ
これらはexportキーワードにより優先されるかもしれない。
何に対して優先されるのか?

もし、exportとして宣言されるそのようなテンプライズされたクラスや関数が
同じ変換ユニット内で定義されるなら、その定義はexportされる。

exportキーワードを含むテンプレートの最初の宣言(最初でない宣言とは?)は
定義に従ってはいけない。


exportについて説明しているのだけど、separation compilationは当分は
使えないだろうからパス。Inclusion compilation最強。
0097デフォルトの名無しさんNGNG
-7- Declaring a class template exported is equivalent to declaring all of its non-inline
function members, static data members, member classes, member class templates and
non-inline function member templates which are defined in that translation unit
exported.

exportされるクラステンプレートを宣言することは、
1)非インラインメンバ関数
2)非インラインメンバ関数テンプレート
3)スタティックメンバデータ
4)メンバクラス
5)メンバクラステンプレート
変換ユニットで定義されるこれらの全てがexportされることと同等である。

つまり、あるクラステンプレートがexportされたら、そのクラスの1-5の要素は
全てexportされると。

一般にexportの難しさは

foo.h  テンプレート宣言
foo1.c  テンプレート定義(export指定)
foo2.c  テンプレートのインスタンス化
という関係があるとき。foo1.cにおいてexportされた定義がfoo2.cにおいて
参照できるかできないか。Cでは通常inline関数はヘッダファイルに書くものだが、
C++では他の*.cppつまりオブジェクトファイルに入れておけるということなのかな??
0098デフォルトの名無しさんNGNG
-8- Templates defined in an unnamed namespace shall not be exported. A template shall be
exported only once in a program. An implementation is not required to diagnose a
violation of this rule. A non-exported template that is neither explicitly specialized
nor explicitly instantiated must be defined in every translation unit in which it is
implicitly instantiated (temp.inst) or explicitly instantiated (temp.explicit); no
diagnostic is required. An exported template need only be declared (and not necessarily
defined) in a translation unit in which it is instantiated. A template function declared
both exported and inline is just inline and not exported.

無名名前空間で定義されたテンプレートはexportされない。
テンプレートはプログラム中でたった一度だけexportされる。
実装においては、これらのルールを破ることでメッセージ表示をする必要はない。
特殊化でもexplicitly instantiatedでもない非exportテンプレートは、
暗黙的、明示的インスタンス化される全ての変換単位において
宣言されていなくてはならない。
exportされるテンプレートは、インスタンス化される変換単位において
宣言だけされることを必要とする。
exportかつインラインとして宣言される関数テンプレートは、
インラインではあるあg、exportはされない。
0099デフォルトの名無しさんNGNG
-9- [Note: an implementation may require that a translation unit containing the
definition of an exported template be compiled before any translation unit containing an
instantiation of that template. ]

実装によっては、exportされたテンプレートが定義された変換単位が、
インスタンス化される変換単位より、先にコンパイルされていなくては
ならないかもしれない。


とここまでわけもわからず読んでみて、exportはコンパイラの実装と、
言語的な仕様の板ばさみ状態で分り難い。通常、多くのテンプレートライブラリが
Includsion compilationでの仕様を前提としているので、この14はさらっと
概要だけ分ればいいのかな。
0100デフォルトの名無しさんNGNG
むしろ、exportは全てのテンプレートに絡んでくるから、
何度でもこの14 -*-を読まないとダメか。
0101デフォルトの名無しさんNGNG
>>87-100
突然、何だったんだ?
0102デフォルトの名無しさんNGNG
>>101
英語の勉強とテンプレートの仕様と駄スレの再利用が目的でした。
14章の頭しか読んでませんが、それでも年内に最後まで読みたいです。
どうか見逃してやってくださいm(__)m
0103デフォルトの名無しさんNGNG
>>102
なんとなく面白かったので再開する気ありませんか?
0104名無しさん@Vim%ChaliceNGNG
再開期待age
0105デフォルトの名無しさんNGNG
ISO/IEC 14882:2003のPDFを無料で落とせるURLを
教えて下さい。
0106デフォルトの名無しさんNGNG
>>105
確かに ISO の方だとちょい高すぎだが、ANSI(>>10)の方だと $18 で買える。
つか、今購入してDL中だ(w
0107!240NGNG
C++相談室 part28
http://pc2.2ch.net/test/read.cgi/tech/1077985164/240

|18.4.1.3
|1 These functions are reserved, a C++ program may not define functions
| that displace the versions in the Standard C++ library (17.4.3).

となっているため、以下の関数を置き換えることはできない。

void* operator new(std::size_t size, void* ptr) throw();
void* operator new[](std::size_t size, void* ptr) throw();
void operator delete(void* ptr, void*) throw();
void operator delete[](void* ptr, void*) throw();
0108!240NGNG
一方で

|18.4.1.1 2,6,11 / 18.4.1.2 2,6,10
|Replaceable: a C++ program can define a function with
| this function signature that displaces the default
| version defined by the C++ Standard library.

となっているので、以下の関数は置き換えが可能である。

void* operator new(std::size_t size) throw(std::bad_alloc);
void* operator new(std::size_t size, const std::nothrow_t&) throw();
void operator delete(void* ptr) throw();
void operator delete(void* ptr, const std::nothrow_t&) throw();
void* operator new[](std::size_t size) throw(std::bad_alloc);
void* operator new[](std::size_t size, const std::nothrow_t&) throw();
void operator delete[](void* ptr) throw();
void operator delete[](void* ptr, const std::nothrow_t&) throw();
■ このスレッドは過去ログ倉庫に格納されています