[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 05/04 08:29 / Filesize : 258 KB / Number-of Response : 1031
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part134



1 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 09:05:42.21 ID:mJKRg6iz0.net]
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part133
mevius.5ch.net/test/read.cgi/tech/1511509970/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
mevius.5ch.net/test/read.cgi/tech/1509780815/

■長いソースを貼るときはここへ。■
 codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

604 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 19:52:43.56 ID:0AXLQ0hnd.net]
constexpr……

605 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 20:19:53.55 ID:My0TInc10.net]
さっさとこう書けるようにしてくれ
今の<chrono>クソすぎんよ

int sec_par_day = static_cast<int>(std::chrono::second{std::chrono::day{{1}});

606 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 20:25:30.79 ID:pKedwP800.net]
クソというか機能が圧倒的に足りてない

607 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 20:28:38.82 ID:/ChP+Vc3M.net]
86400とか1440でわかるけど
24*60*60とか24*60って書けばいいだけだと思う

608 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 20:30:42.63 ID:My0TInc10.net]
21世紀も5分の1が過ぎようかっていうこの時代に
何が悲しゅうてたかが時刻を扱うだけでtime_pointの他にtmやらtime_tやらをガチャガチャさせられにゃならんのだよまったく

609 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 22:01:42.63 ID:vZM1ymmwM.net]
>>586
お前が正解
他はバカ

610 名前:デフォルトの名無しさん [2018/03/13(火) 22:08:40.50 .net]
86400って何のために使うんだろう

うるう日とかうるう秒とか考慮しなきゃ気持ち悪くね?

611 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 22:17:29.51 ID:U9FOV+VD0.net]
予め考慮しようがない

612 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 22:22:44.39 ID:pKedwP800.net]
考慮する必要性があるものかどうかが分からないからなんとも
例えば時系列データをその時点から1日分の数を使うというものなら閏秒を考える必要がないし



613 名前:デフォルトの名無しさん [2018/03/13(火) 22:28:43.21 .net]
>>591
1日に1秒満たないかもしれないだろ

614 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 22:35:46.84 ID:2iGA+O2n0.net]
int t = 86400; // 24*60*60
これで解決

615 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:06:58.39 ID:+Yto8Znfd.net]
閏秒の有無等で可変のものなら可変のものなりの書き方するでしょ
計算して変数に入れるとか

問題は不変の数値定数をどう正規化して書くか、正規化する必要はあるか。
24*60*60 派の人と 60*60*24 派の人が両方プロジェクト内にいたらなんか嫌だな

616 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:12:45.19 ID:U9FOV+VD0.net]
プロジェクトで誰かが決めたらそれに従うよ
派閥作るほどの問題じゃないでしょ

617 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:17:41.96 ID:+Yto8Znfd.net]
絡むわけじゃないけど
決めたら従うのは当たり前で、それが「決める」ってことだろ。
派閥の話じゃなく混ざってたら気持ち悪いってことが言いたかったんだよ。

618 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:20:55.63 ID:pKedwP800.net]
あっちこっちに書き散らすものじゃないから混ざってるとかあり得ない
1カ所になるまでリファクタリングしろ

619 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:44:10.62 ID:U9FOV+VD0.net]
気持ち悪いと思うかどうかは感性の問題だからなあ
例えばある日地球の回転速度が変わって1分が61秒になった
プログラムを修正しろと言われて、
場所によって書き方が違っていると大変だね
と言う話なら理解出来るけど

620 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:51:40.27 ID:pKedwP800.net]
constexpr int min = 60;
constexpr int hour = min * 60;
constexpr int day = hour * 24;

621 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 06:39:53.70 ID:4nqAllCK0.net]
hoursは<chrono>にあるだろ
それとoperator""h

622 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 06:41:16.16 ID:4nqAllCK0.net]
operator""dayがねえんだよな<chrono>って



623 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 07:36:00.34 ID:eC4PF2tM0.net]
chronoのhoursはstd::chrono::duration<int, std::ratio<3600>>のエイリアスなので
daysはこうすればよい
using days = std::chrono::duration<int, std::ratio<86400>>

624 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 08:15:03.73 ID:ylQhqnt4M.net]
>>602
> daysはこうすればよい
> using days = std::chrono::duration<int, std::ratio<86400>>
>>555へ戻る w

625 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 08:42:21.15 ID:eC4PF2tM0.net]
閏秒を考慮するのと1日を86400秒とするのは全く関係ないのに閏秒がどうとか言い出した奴が悪いのでは
丁寧に書くなら計算の根拠として60*60*24を見えるところに書いておけばいい

626 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 09:17:22.64 ID:MwJCRjiPd.net]
知ってる知識を披露したかっただけだろうから罪は軽い

627 名前:デフォルトの名無しさん [2018/03/14(水) 10:28:48.31 .net]
>>604
全く関係ないは言い過ぎ

628 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 10:52:42.70 ID:a7dBFlsI0.net]
ほぼ関係ないな、難癖もいいとこ
実用上は全く関係ない

629 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 11:03:01.46 ID:2oR7xNCJ0.net]
うるう秒がどうのこうのと言う、問題じゃなく86400秒をそこでしか使わないって根拠が無いんだよね
後でまたその数値が出てくるとしてその度に86400と書くのか、もしその数値を修正する事になったら全部書き直すのか、2回3回使うようになって始めて変数なり定数なりに入れるのか
それなら最初から式中に出てくる数値は変数に格納してから使えって統一した方が話が早い

630 名前:デフォルトの名無しさん [2018/03/14(水) 11:14:21.74 ID:G0IAn/x5d.net]
今時マジックナンバーとか昭和からタイムスリップしてきたのかよ

631 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 11:43:33.36 ID:xovkfTzX0.net]
プログラムにおけるマジックナンバー(英: magic number、魔法の数字)とは、何らかの識別子もしくは定数として用いられる、プログラムのソースコード中に書かれた具体的な数値である。
そのプログラムを書いた時点では製作者は数値の意図を把握しているが、他のプログラマーまたは製作者本人がマジックナンバーの意図を忘れたときに閲覧すると「この数字の意味はわからないが、とにかくプログラムは正しく動く。
まるで魔法の数字だ」という皮肉を含む。
by Wikipedia

632 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 11:50:45.96 ID:I+60yKfra.net]
「1日の秒数」って定数を86400って書いて怒られたって話じゃないんだ?



633 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 12:06:59.05 ID:L/3+Hz1H0.net]
>>609
じゃあオマエ、構造化もしてないのか?
昭和時代ほど耳にしなくなっても廃れたのではない話は結構あるぞ

634 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 13:01:38.98 ID:MwJCRjiPd.net]
>>611
怒られたという程じゃなくて、
 一日の秒数 = 86400;
と書いたら「マジックナンバーやめろ」と言われたってことさ

635 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 13:18:59.19 ID:eC4PF2tM0.net]
わかりきった定数はマジックナンバーではない

636 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 14:08:58.84 ID:IrrOEbi1d.net]
>>613
それをヘッダに移動させるだけやん

637 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 14:14:27.78 ID:MwJCRjiPd.net]
>>615
そうじゃなくて
60*60*24 て書いて欲しいんだってさー


638 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 14:16:09.81 ID:2oR7xNCJ0.net]
>>616
まぁ可読性高くて損する事は無いし、なるべく要素は分解して書いた方がいいんじゃないの
何かどうしても86400じゃなきゃ困る理由とかあるなら話は別だろうけど、無いだろ?

639 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 14:34:38.65 ID:IrrOEbi1d.net]
>>616
クソどうでもいいな

640 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 15:05:38.89 ID:hFOwW8jGM.net]
ITのエンジニアって
こういうくだらないことで
給料貰ってるんだろうなあ

641 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 15:18:02.33 ID:xovkfTzX0.net]
こういうクソみたいなことでもウンチク垂れてテコ入れしろと提案することにより仕事してます感かもし出す為だろうな

642 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 15:45:56.81 ID:L/3+Hz1H0.net]
>>619
結果のわからない投機的な模索をしているときは
逆にマジックナンバー地獄なコードだよ
他人に渡すコードを清書するときの書き方・考え方とは真逆



643 名前:デフォルトの名無しさん [2018/03/14(水) 16:27:34.05 ID:9D6+Eo6Z0.net]
俺がわかるからみんなわかるだろうというコードはすげー困るな
例えその場の全員がわかったとしても今後わからない奴が出てきた時の事を考えて
できうるかぎりわかりやすいコードを書くべきだな

644 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:02:40.84 ID:L/3+Hz1H0.net]
そのためのコストにもよる
空想論じみた「わかりやすさ」にまで付き合ってらんないこともある
特に最低限のプロとしてのスキルを

645 名前:欠く者を想定することはしない

ちょっと飛躍するがプログラム言語だってそうなっている
マシンの性能を使いやすさに振るということを無限にはやらない
どのくらいのアホまで付き合ってやるのか性能とのトレードオフで
色んなバランスで棲み分けになっている
[]
[ここ壊れてます]

646 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:03:50.56 ID:2oR7xNCJ0.net]
まぁ別に自分だけが使う分にはいくら分かりづらく書いてくれても構わんけどな

647 名前:デフォルトの名無しさん [2018/03/14(水) 17:11:14.36 ID:9D6+Eo6Z0.net]
86400を60*60*24と書くことにはなんのコストも支払ってないから書けばいいな
いちいち話を飛躍させる奴はなんなんだ

648 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:20:37.67 ID:I+60yKfra.net]
人によっては>>599みたいにしろって言うだろうし
結局は人それぞれってことじゃないの

16を2*2*2*2っていちいち書く人はいないでしょ
まぁ1<<4って書けと言われるかもしれんが

649 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:21:05.80 ID:jowRUKsS0.net]
学校の試験問題で一日の秒数としてソースに86400を書いたら
マジックナンバーだからと減点された、納得いかない。
みたいな発端じゃないのかなぁ。

650 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:22:38.07 ID:L/3+Hz1H0.net]
それをfindとsedでやる勇気あるか?

たとえば俺なんかは1箇所ずつよく見て有機的に判断しないと怖いし
それの残業代は貰えるのか心配だ

651 名前:デフォルトの名無しさん [2018/03/14(水) 17:51:03.64 ID:9D6+Eo6Z0.net]
当然その程度のリファクタリングはするべきだしそもそもマジックナンバーをどうにかするべきだし
お前の残業代とかいう飛躍した話はどうでもいい

652 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:19:55.18 ID:L/3+Hz1H0.net]
飛躍じゃねえ実話だよ

ずいぶん昔、社内BBSでそれ系のことを言い出したやつが
偉い人から突っ込まれてた



653 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:35:58.25 ID:MwJCRjiPd.net]
プロとか言い出してる人がいるけど、それこそ飛躍では?

654 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:40:08.58 ID:y6ADsCAy0.net]
プログラムの話題から外れてきていると思いませんか?

655 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:48:14.13 ID:uMO7yRavM.net]
>>614
だからわかりきってるかどうかは人によって違うって話
プログラムの前に日本語の勉強しろよ w

656 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:48:33.76 ID:2oR7xNCJ0.net]
まぁコスト次第で可読性を犠牲にするケースもあるだろうけど
この場合はメモリ食う訳でも処理遅くなる訳でもソースの構造が変わる訳でもない
86400でも十分分かりやすいかも知れんが60*60*24なら更に分かりやすくなる

どっちが良いかなんて議論の余地無いよね

657 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:50:15.11 ID:L/3+Hz1H0.net]
>>631
別にプロでなくてもいいんだけどさ
おまえさんなりに、同じプロジェクトにいて欲しくない足手まといが
どのくらいから下というのはあるだろ

658 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:54:56.26 ID:uMO7yRavM.net]
>>626
> 16を2*2*2*2っていちいち書く人はいないでしょ
> まぁ1<<4って書けと言われるかもしれんが
状況次第だろ
場合分けの条件が4個あって各々2状態をとるとかなら2*2*2*2って書くかもしれない
下から4ビット目のマスクが欲しいなら1<<4って書くこともある

659 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:58:33.90 ID:2oR7xNCJ0.net]
>>636
ビットフィールド使えば?

660 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 19:09:24.20 ID:L/3+Hz1H0.net]
シフト使うな、ビットフィールドで書け
なんて言われると、俺は相手にもよるが逆らいそう

661 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 19:37:46.29 ID:uMO7yRavM.net]
>>637
ビットフィールドは割り付け順序が処理系定義だったりしたからあまり使ったことがない

662 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 21:26:40.49 ID:kWAHqA+uM.net]
たまには2進リテラルちゃんのことも思い出してあげてください



663 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 06:36:14.64 ID:F+InEeO+0.net]
議論の本筋(1日の秒数として即値で86400と書くことの是非)とはさらに離れるけど、
ビットシフトを使う定数は常にカッコで囲んでくれ。

res = a + 1<<4 + b;
res = a +(1<<4)+ b;

664 名前:デフォルトの名無しさん [2018/03/15(木) 07:15:43.22 .net]
>>641
3つ以上の項があると静的解析ツールで怒られるから
res = (a +(1<<4))+ b;
と書く

665 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 08:58:15.76 ID:x1WHRaDf0.net]
>>641
下のつもりで上書いたらただのバグじゃん

666 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 09:19:10.68 ID:3Ym40JOm0.net]
算術と混用するときは結合順位に注意せよ、というだけのことを
いちいち必ずだ!ルールだ!と金切り声で吠えついてくるやつはウザい

667 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 09:55:31.41 ID:LkpAylTJM.net]
>>642
可読性悪くしてかえって品質低下招きそうな指摘だな

668 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 13:29:47.33 ID:O2sRH7tT0.net]
vectorをつなげる際、copyが良いとか、insertを使えとか色々書いてあるのですが、どれが良いのでしょうか?

669 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 13:54:37.80 ID:XNo6/02A0.net]
あらかじめ領域を広げておく必要があるけどinsertの方がチェックが入らない分速い

670 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 15:23:48.90 ID:9f/t5+6G0.net]
reserveしてinsertだな

671 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 15:36:42.69 ID:q9z+dA6Ga.net]
insertの直前にreserveって意味あるのか?

672 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 16:32:16.09 ID:XNo6/02A0.net]
reserveは終端のポインタが更新されないからresizeじゃないとだめ



673 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 16:57:46.96 ID:R5/WYUtW0.net]
reserveしてback_inserterでcopy

674 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 17:05:27.14 ID:QEAEy0DH0.net]
>>648
insertはサイズチェックしてるでしょ。
>>649
iteratorを2つ受け取るタイプのinsertなら意味あるんじゃね?
>>650
resizeは不味いだろ。

675 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 17:09:09.32 ID:QEAEy0DH0.net]
>>652
アンカしくった。
サイズチェックの指摘は>>647向け

676 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 17:21:30.23 ID:XNo6/02A0.net]
ごめんinsertとcopy逆だった

677 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 17:28:15.72 ID:q9z+dA6Ga.net]
>>652
insertの中で追加数数えてreserveと同じことしてるでしょ
まさかループで一個ずつ挿入なんて実装はあるまい

678 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 19:10:49.64 ID:QEAEy0DH0.net]
>>655
失礼。挿入位置のiteratorもあるから、3つ受け取るタイプの誤り。

679 名前:デフォルトの名無しさん [2018/03/15(木) 22:07:51.82 ID:dQGk6ayHa.net]
cpprefjpの任意の式によるSFINAEの頁でdecltype(a + b, bool())と記載されているコードがあるんだけれど、
このa+b, bool()はラムダ式?

該当頁
https://cpprefjp.github.io/lang/cpp11/range_based_for.html

680 名前:デフォルトの名無しさん [2018/03/15(木) 22:09:23.09 ID:dQGk6ayHa.net]
アドレス間違えた
https://cpprefjp.github.io/lang/cpp11/sfinae_expressions.html

681 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 22:15:55.91 ID:3Ym40JOm0.net]
ラムダ式が[で始まらないことってあるのか?

682 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 22:41:44.53 ID:ubsUN4Yb0.net]
>>657
カンマ演算子とdecltypeでコンパイル時に評価される
decltypeの中身を左から順に評価し、結果は一番右の型が帰る
この場合はa+bの型が評価出来ればbool、できなければSFINAE



683 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 22:41:47.80 ID:XNo6/02A0.net]
>>657
>a + b
a + bが可能かどうか調べる

>,
次の式を評価する

>bool()
bool型の初期値を返す

つまりdecltype(a + b, bool())はa + bでSFINAEをしつつカンマ演算子でdecltypeにbool型の値を与えて返り値の型をbool型にしている

684 名前:デフォルトの名無しさん [2018/03/15(木) 22:57:18.20 ID:dQGk6ayHa.net]
decltypeで,も使えたんですね。一番右の型が帰るということはdecltype(a+b,a-b,a*b,a/b,bool())とかしてもよさそう。。。

自分ではその機能を説明してるページを見つけれませんでした。
ありがとうございます。

685 名前:はちみつ餃子 mailto:sage [2018/03/15(木) 23:50:51.42 ID:VBbQqJBt0.net]
>>660-661
それで良いのか。 いいこと知った。
いちいち enable_if をしとったわ。

686 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 07:54:12.89 ID:UGENGinrd.net]
decltypeって実行時の型を得れる?

687 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 09:23:42.20 ID:Qbg0TjKpa.net]
>>656
a.reserve(a.size()+b.size());
a.insert(a.end(),b.begin(),b.end());
こんな感じのことをやるのかと思ったんだけど、これ意味ないでしょ?

688 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 10:04:08.28 ID:SYp9l/ZId.net]
>>664
declとはdeclareの略であることを考えると

689 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 10:17:31.56 ID:g2YO+i2m0.net]
a.reserve(a.size()+b.size());
copy(b.begin(),b.end(),back_inserter(a));

690 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 15:36:10.69 ID:0r9PteXTM.net]
>>665
random iteratorの場合の特殊化実装がありました。ごめんなさい

691 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 18:08:23.55 ID:Al45BtF0p.net]
>>662
decltype comma trickでググれ

692 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 20:56:30.80 ID:DBylbaSH0.net]
まあoperator,()が定義されてるとまずいんだけどな



693 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 22:50:10.89 ID:OQSUItjMd]
codepad.org/C8t9k4fD
ソース自体をプログラムに読み込ませると
#includ
で止まってしまうんですけど何が問題でしょうか

694 名前:デフォルトの名無しさん [2018/03/19(月) 18:07:03.75 ID:/U1oheuNa.net]
インスタンスにdeleteかけたとき、メンバ変数が破壊されるのとデストラクタが実行されるのはどっちが先?
今書いてるコードがデストラクタでメンバ変数アクセスすると落ちることがあるから、破壊されるのが先なんだろうか?

695 名前:はちみつ餃子 mailto:sage [2018/03/19(月) 18:15:15.06 ID:RG1qd9Pc0.net]
>>672
原則としては構築の逆順って覚えておくと間違えない。

696 名前: mailto:sage [2018/03/19(月) 18:33:44.24 ID:lFWK67Qs0.net]
>>672
delete this; とかしてませんか、これは基本的に避けたほうがいい

697 名前:片山博文MZ mailto:sage [2018/03/19(月) 18:43:06.07 ID:SpFx62hRd.net]
>>674に同意。確保と破棄は生ポインタを触らずに自動化した方がいい。スマートポインタとかコンテナとか。
二回deleteを避けるためにポインタにNULLを代入する技もある。

698 名前:デフォルトの名無しさん [2018/03/19(月) 21:03:24.06 ID:kCg91IvDa.net]
そろそろNULLは駆逐してnullptrに移行させたい

699 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 22:46:40.23 ID:jnDGFLZz0.net]
>今書いてるコードがデストラクタでメンバ変数アクセスすると落ちることがある
へ〜んなの
ていうかメモリを壊しているかすでにdeleteされた死骸を再deleteしてるとしか、

>二回deleteを避けるためにポインタにNULLを代入
OpenCVのC言語インターフェースのやつ、

700 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 22:57:33.17 ID:cmSuhSLP0.net]
C++勉強中の者です。
codepad.org/C8t9k4fD
ソース自体をプログラムに読み込ませると
#includ
で止まってしまいます。
Cのfgets()のようには使えないのでしょうか。

701 名前:デフォルトの名無しさん [2018/03/19(月) 23:06:01.35 .net]
>>678
According to the C++ reference
en.cppreference.com/w/cpp/io/basic_istream/getline
getline sets the ios::fail when count-1 characters have been extracted.
You would have to call filein.clear(); in between the getline() calls.

702 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 23:26:45.72 ID:cmSuhSLP0.net]
>>679
区切り文字を読まないとfail状態になってそれ以降は失敗し続けるので止まってしまうということですかね



703 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 23:27:24.60 ID:jnDGFLZz0.net]
std::getline()は読み込んだ文字列に改行文字を含めないから
行末まできちんと読んだのか
文字数カウントのせいで読み込みが行の途中でぶちきれたのか
直ちにはわからないといいうアホウな仕様
判別には結局std::basic_istream<T>::unget()の助けが要る

C++標準ライブラリのうちストリーム関連だけは腐っているからC言語のを使いなしゃれ

※ 個人の感想です

704 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 23:28:25.97 ID:jnDGFLZz0.net]
訂正
△: C++標準ライブラリのうちストリーム関連だけは腐っているからC言語のを使いなしゃれ
◎: C++標準ライブラリのうちストリーム関連だけは本当に腐っているからC言語のを使いなしゃれ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<258KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef