[過去ログ] C++相談室 part156 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
653(3): 2021/07/04(日)20:21 ID:WJcubPcO(13/13) AAS
第2の隠れた引数でcallerがcalleeに構築すべき変数のアドレスを渡しているのだとすると
>>627のコードが"default"の次に"copy"になるのはある程度説明がつく
1. return_S()関数でS構築 --- ここでS:S()が呼ばれ、"default"表示
2. auto hoge = return_S()では何も起きない(∵1で&hogeにSが構築済み)
3. take_S(hoge)で呼び出しの引数としてhogeをコピー
--- &hogeにあるSが、スタックの上の方に引数としてコピーされる結果"copy"表示
しかしhogeはその後使っていないのだから、コンパイラ的には3はmoveになる余地があるはず
なお>>641までの漏れのレスは第2の隠れた引数は仮定せず、return_S()(callee)がスタックのトップに
return valueとしてS()を構築して、
それが呼び出し元(caller)が&hogeにcopy(ムーブコンがあればmove)する穏当なモデルを考えていた
省2
654: 2021/07/04(日)22:02 ID:dMFRzHLQ(6/6) AAS
>>652
別に実装として「隠れた引数」を使えとは規格上決まっていないよ
処理系は適当な専用のグローバル変数を使うようなコードを出力しても構わない
>>653
なんで>>642が怒り狂うのか?
>>642を読んで分からない分からない?
あなたの一連のレスはあなた自身以外の誰のためにもなっていないんだよね
>>642でするな、って言われていることは、そういう自分のためにしかならないことでスレを私物化する行為に等しいよってことだ
655: 2021/07/05(月)08:27 ID:4kBMhQOc(1/3) AAS
>>653
>>603は調べたんかいな。cpprefjp な。
RVOを含めて調べれば、>>646だということは分かるだろ。
c++標準の扱いはcpprefjpの参照リンクにもある「値のコピー省略の保証について」が良くまとまっている。
検索・調査能力が低いのは今どきのプログラマーとして致命的欠陥だから、日頃から訓練したほうがいい。
656(1): 2021/07/05(月)08:31 ID:4kBMhQOc(2/3) AAS
補足。
>>653の2はNRVOだからRVOとは別物な。
NRVOは最適化可能だけどコピー省略は保証されていない。
657(2): 2021/07/05(月)08:44 ID:4kBMhQOc(3/3) AAS
>>656
あ、間違えた。NRVOとは関係ないや。
ついでに。
>しかしhogeはその後使っていないのだから、コンパイラ的には3はmoveになる余地があるはず
副作用のあるコピーコンストラクタがあったら最適化はやばいんじゃない?
規格上許されていたっけ?
658(1): 2021/07/05(月)11:05 ID:w3Zb0u1p(1) AAS
ライフタイムを推論してcopy/moveの振り分けは理論上可能かもしれないが、現行の規格はそんなことは要求しない
lvalueからならcopy、rvalueからならmove
lvalueからmoveしてほしいならstd::moveしなさい
lvalueを渡しているのに勝手にrvalue referenceとして解釈されてぶっ壊されてたまるかよ
659: 2021/07/05(月)12:24 ID:M+MHtMKE(1/2) AAS
template<class T>
class A {
public:
A()=default;
A(T&&);
};
この場合、T==Aになるとmoveとcopyを兼ねる?
660: 2021/07/05(月)13:59 ID:MxHqaq3M(1) AAS
C++が出来るとは規格書がちゃんと読めることを言うんだね
661(1): 2021/07/05(月)15:27 ID:NDiogwds(1) AAS
Macのclang++でコンパイルしています。
cstdlibをインクルードしなくてもrand()が使えてしまうのですが、これはなぜでしょうか?
662: 2021/07/05(月)15:36 ID:M+MHtMKE(2/2) AAS
規格票には規格書なんて書いてない
俺はちゃんと読めるんだなんて
イキッてるやつはブーメランだな
663: 2021/07/06(火)00:27 ID:86XKd96p(1) AAS
>>657
許されてるよ
その状況でコピコンやムーコンが呼ばれるかどうかは未規定(呼んでも呼ばなくてもいい)
というかこの「呼ばなくてもいい」っていう規定こそが正に規格がNRVOを認めてる部分そのもの
664: 2021/07/06(火)03:32 ID:PiE4/OQH(1) AAS
実際、「move さえ省略してほしい」って思惑で
auto hoge = func();
と書くところを
auto&& hoge = func();
と書いてる人なんているの?
665: 2021/07/06(火)07:29 ID:6WiwYssU(1) AAS
いるよ。
666(1): 2021/07/06(火)07:45 ID:FcxtUR1g(1) AAS
>>657
エピステーメーも同じようなこと言ってたけどね
まぁコピーコンストラクタとかにコピー以外の副作用入れる方が悪い、ってことだろ
実際変な副作用など無いことを前提にしなきゃ出来ない最適化他にもあるやろ
667: 2021/07/06(火)10:03 ID:t2+Z62DR(1) AAS
>>661
stdlib.hにも定義されているが、他のヘッダをincludeすると、
その中から別のヘッダをincludeしている場合も有り、その中からさらに
別のヘッダをincludeしている場合も有る。
また、標準ではstdlib.hやcstdlibで定義されているとされていても、
その他のヘッダで定義されていないとも限らない。
668(6): ◆QZaw55cn4c 2021/07/06(火)20:25 ID:/lKUoH39(1) AAS
>>666
>コピーコンストラクタとかにコピー以外の副作用入れる方が悪い
規格票のどこに?
669: 2021/07/06(火)23:17 ID:2d1Iatqp(1) AAS
>>668
規格票持ってるんですか?
670: 2021/07/07(水)00:20 ID:ACi5C/C8(1) AAS
>>668
コイツたまにトリップ外すの忘れて荒らしみたいなことしてんの最高に滑稽
671(1): はちみつ餃子 ◆8X2XSCHEME 2021/07/07(水)05:18 ID:BiM5c4gH(1) AAS
>>668
副作用がある場合でも省略されるというのは明記されている。
外部リンク[copy]:timsong-cpp.github.io
> even if the copy/move constructor and/or destructor for the object have side effects
672(1): 2021/07/10(土)14:04 ID:yQTcABkI(1) AAS
>>658
3がmoveになったところで何も壊れるものは無くね?
というのと、take_S()に渡される方がぶっ壊されることにはならないので
3がmoveになってもlvalueとして渡されることには変わりは無い
上下前次1-新書関写板覧索設栞歴
あと 330 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.364s*