[過去ログ] BOOSTを語れゴラァ (1001レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
424
(4): 2005/05/10(火)00:14 AAS
copy-initilization と direct-initialization を形式に対するものと考えるか実際の処理に対するものと
考えるかの違いじゃない?8.5-12 からすると形式に対するものと考えた方がよさそう。

で、8.5-14 を解釈するところ以下のようになるかと。
から左辺の型が右辺と同じかその派生クラスである場合には、copy-initialization は direct-initialization
と同じ処理が行われる。
そうでない場合は、適当なコンストラクタ or 変換関数が起動される。コンストラクタの場合は
一時オブジェクトが生成される。この一時オブジェクトが左辺の direct-initialize に上のルールに
沿って使用される(結果としてコピーコンストラクタ呼び出しになると思われ)。
実装はある条件下で、途中結果で直接初期化対象を構築することで、このコピー処理を取り除いてもよい。

boost::variant<foo> は foo でも foo の派生クラスでもないのでコピーコンストラクタ呼び出しが発生しないとは
言えない(発生しない場合もある)のではないかと。
425: 2005/05/10(火)00:21 AAS
>424
×copy-initilization
○copy-initialization

×から左辺の型が…
○左辺の型が…

△実装はある条件下で、途中結果で直接初期化対象を構築することで、…
○実装はある条件下では、初期化されているオブジェクト内に途中結果を直接構築することにより…
426: 2005/05/10(火)00:47 AAS
>>423-424
指摘ありがとん。やっぱ読み違えたか。

「一時オブジェクトが左辺の direct-initialize に上のルールに沿って使用される」
の辺りを読んで、コンストラクタ variant::variant(const foo&) の引数 foo 型に
対しての一時オブジェクトの話なのかと勘違いしました。

なんか仕様書のこの辺、ごちゃごちゃしてて分かりにくい…。
時間があるときにでも、もう一回ゆっくり読んでみまつ。
430: 2005/05/10(火)10:35 AAS
>>427
>V v((foo())); でも V v = foo(); でも V v = V(foo()); でも、
>一時 foo オブジェクトから一時 V オブジェクトを経て、
V v(foo()); は一時 V オブジェクトを経ない。
で、まあ、ある状況下においては、残りの二つでも
一時 V オブジェクトを取り除いても別にいいよ、ってこと

>424 氏は「foo でも
>foo の派生クラスでもない」というように foo のコピーの話をしている?
多分、424 氏は「foo は variant<foo> でもその派生クラスでもない」
ってことを書きたかったのでは?
foo のコピーコンストラクタは今の件とはあまり関係ないと思う。
439: 424 2005/05/11(水)23:41 AAS
解決したみたいだけど、漏れが source と destination 完全に取り違えて書いちゃったのが混乱の原因だな。
ごめん、吊ってくる。

×から左辺の型が右辺と同じかその派生クラスである場合には
○右辺の型が左辺と同じかその派生クラスである場合には

×boost::variant<foo> は foo でも foo の派生クラスでもないので
○foo は boost::variant<foo>でもその派生クラスでもないので
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.029s