次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
https://mevius.5ch.net/test/read.cgi/tech/1538755188/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C++相談室 part140
■ このスレッドは過去ログ倉庫に格納されています
2019/01/13(日) 05:56:22.70ID:9RrR7Arz
651デフォルトの名無しさん
2019/02/09(土) 02:05:42.75ID:xfmM6W79 なに急に
ビビるんですけど
ビビるんですけど
652デフォルトの名無しさん
2019/02/09(土) 04:07:36.95ID:jgVZ/PYq >>650
もういい加減やめてくれないか
もういい加減やめてくれないか
653デフォルトの名無しさん
2019/02/09(土) 07:21:17.45ID:Js3eMSlM いやDOS
PCDOS
PCDOS
654デフォルトの名無しさん
2019/02/09(土) 13:31:56.82ID:Js3eMSlM >>649
そらipアドレスと個人名結びつけるのはプロバイダしかできませんがな
収容鯖も個人の住居エリアじゃなく他県に割り当てられる場合もあって、
個人情報からはかけ離れてる場合も多い
http://www.iplocationfinder.com/
そらipアドレスと個人名結びつけるのはプロバイダしかできませんがな
収容鯖も個人の住居エリアじゃなく他県に割り当てられる場合もあって、
個人情報からはかけ離れてる場合も多い
http://www.iplocationfinder.com/
655デフォルトの名無しさん
2019/02/09(土) 13:35:22.03ID:MbpT91OC ということはプロバイダもグルなのか。
656デフォルトの名無しさん
2019/02/09(土) 14:28:01.31ID:3dJvh84X657デフォルトの名無しさん
2019/02/09(土) 21:05:40.77ID:wqDSs9XB 君たちそろそろCプラスプラスの話にもどりなさい
658さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/09(土) 21:07:55.36ID:kG75YWtZ ヘッダー内の定数変数の設置方法について、詳しい人、いらっしゃいますか?
659デフォルトの名無しさん
2019/02/09(土) 21:38:48.35ID:5t5ZiBxh >>658
どの程度のレベルの質問かによる。
どの程度のレベルの質問かによる。
660デフォルトの名無しさん
2019/02/09(土) 21:44:14.22ID:c2FJmEij >定数変数
<質問の意味不明。再入力せよ>
<質問の意味不明。再入力せよ>
661デフォルトの名無しさん
2019/02/09(土) 22:34:04.43ID:jk57Ug9J >>660
おまえは定数変数を感じるか?
おまえは定数変数を感じるか?
662デフォルトの名無しさん
2019/02/09(土) 22:42:04.90ID:onf/I33C ROM焼きしても良いのか、RAMにコピーしておかないといけない
のか小一時間質問を
のか小一時間質問を
663デフォルトの名無しさん
2019/02/09(土) 22:55:27.78ID:NnmcfWng664デフォルトの名無しさん
2019/02/11(月) 00:29:43.89ID:JDr8Dttm しーぽぽ、しーぽっぽ。
665デフォルトの名無しさん
2019/02/11(月) 04:30:46.19ID:Q8pHabNH c#とc++どっちからはじめたらいいですか
pythonを少し触ったことがある程度です
c++でしかできないことがあるでしょうか
とりあえずファイラを作りたいのです
pythonを少し触ったことがある程度です
c++でしかできないことがあるでしょうか
とりあえずファイラを作りたいのです
666さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/11(月) 04:49:21.15ID:BEdrdhIs C#ならモバイルもストアもイケるし、人間に分かりやすい。ただ蓄積が少ない。
C++なら大量の遺産が利用できるが、ちょっと生産性が悪くややこしい。
C++ならWinFileというMITライセンスのソフトを参考にするといい。
C++なら大量の遺産が利用できるが、ちょっと生産性が悪くややこしい。
C++ならWinFileというMITライセンスのソフトを参考にするといい。
667デフォルトの名無しさん
2019/02/11(月) 05:08:41.19ID:Q8pHabNH たしか、共用も出来るんですよね
基本C#で、C++にしかできない部分だけc++という形でいいんでしょうか
基本C#で、C++にしかできない部分だけc++という形でいいんでしょうか
668さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/11(月) 05:24:08.70ID:fD0IDjkv エクスプローラのようなファイラーを製作するためのキーワードは:
ツリービュー、リストビュー、ファイルアイコン取得、メニューバー、ポップアップメニュー、ファイル操作、ダイアログボックス、シェル通知、シェルコンテキストメニュー。
大変だが、これらを押さえれば、C#でもC++でも作れる。
ツリービュー、リストビュー、ファイルアイコン取得、メニューバー、ポップアップメニュー、ファイル操作、ダイアログボックス、シェル通知、シェルコンテキストメニュー。
大変だが、これらを押さえれば、C#でもC++でも作れる。
669デフォルトの名無しさん
2019/02/11(月) 05:50:04.11ID:Q8pHabNH ↑がんばります
サクサクできるようになりたい
サクサクできるようになりたい
670デフォルトの名無しさん
2019/02/11(月) 06:08:56.92ID:iabdC9wT long long a = 1LL;
ってさぁ、
long long a = 1;
と何が違うのよ?
ってさぁ、
long long a = 1;
と何が違うのよ?
671デフォルトの名無しさん
2019/02/11(月) 06:16:27.68ID:ObneqQQm ソースファイルサイズが2バイト違います
672デフォルトの名無しさん
2019/02/11(月) 06:35:27.07ID:iabdC9wT673デフォルトの名無しさん
2019/02/11(月) 07:42:02.90ID:MkFOBvt9 >>670
今時のコンパイラではありえないと思うがintの1をlong longに変換してaに代入するコードを吐くかもしれない
今時のコンパイラではありえないと思うがintの1をlong longに変換してaに代入するコードを吐くかもしれない
674デフォルトの名無しさん
2019/02/11(月) 08:05:38.42ID:VezX3Wg+ auto i = 1LL;
これも有り。
これも有り。
675デフォルトの名無しさん
2019/02/11(月) 11:23:03.19ID:IofovA3h 静的解析ツールで型の明示忘れを指摘される
676デフォルトの名無しさん
2019/02/11(月) 11:40:26.90ID:lx/oeSqQ そんなツールは捨てちまえ
677デフォルトの名無しさん
2019/02/11(月) 12:28:53.00ID:itY+kGJR C#で書かれたC#以外のコンパイラとかあるんだっけ
678デフォルトの名無しさん
2019/02/11(月) 12:44:30.74ID:VezX3Wg+ >>675 その解析ツールはC++11対応してるの?
679デフォルトの名無しさん
2019/02/11(月) 12:53:52.59ID:MmPS3pUZ その程度静的解析持ち出すまでもなく
コンパイラのwarningにできるでしょ
コンパイラのwarningにできるでしょ
680デフォルトの名無しさん
2019/02/11(月) 12:57:08.64ID:MkFOBvt9 >>679
auto使ったら警告されるの?
auto使ったら警告されるの?
681デフォルトの名無しさん
2019/02/11(月) 13:12:41.82ID:MmPS3pUZ え、静的解析でauto禁止にするって話だったの?
静的解析というよりどっかのしょうもないガイドライン準拠か調べるオマケレベルの機能だろそれ
静的解析というよりどっかのしょうもないガイドライン準拠か調べるオマケレベルの機能だろそれ
682デフォルトの名無しさん
2019/02/11(月) 13:57:18.54ID:VezX3Wg+ 1LLとlong long型の1と明示されている変数に対して警告出すのおかしくない?
683デフォルトの名無しさん
2019/02/11(月) 14:20:07.79ID:IofovA3h >>682
いやそれは良いそうしたら指摘されない
いやそれは良いそうしたら指摘されない
684デフォルトの名無しさん
2019/02/11(月) 14:20:08.61ID:K6Q69q9Y 世の中にはauto使うと読みにくくなるから使わないで、って言う人が本当に居るから・・・
685デフォルトの名無しさん
2019/02/11(月) 14:34:11.51ID:VezX3Wg+ まじか・・・
686デフォルトの名無しさん
2019/02/11(月) 14:42:14.51ID:DnOcmNTU 読みにくくなる場合は確かにあるだろ
687デフォルトの名無しさん
2019/02/11(月) 14:46:12.16ID:MkFOBvt9 読みにくくなる場合があるから「全部」禁止な
って言う老害
って言う老害
688デフォルトの名無しさん
2019/02/11(月) 14:49:55.35ID:ytaXyYiL std::vector<std::pair<…>>
689デフォルトの名無しさん
2019/02/11(月) 15:03:25.67ID:ja3aMy7M 読みやすくするためとテンプレートのためにautoを使うんじゃないの
690デフォルトの名無しさん
2019/02/11(月) 15:39:17.91ID:K6Q69q9Y autoで読みにくくなる所って大体変数名をちゃんとすれば良い
それで足りないなら仕方ないから型を書く
それで足りないなら仕方ないから型を書く
691はちみつ餃子 ◆8X2XSCHEME
2019/02/11(月) 15:45:49.19ID:eS7AzULV 静的解析ツールの挙動を好意的に解釈すれば、
「暗黙の処理」に対して「それって本当にプログラマの意図した通り?」
ってのが機械的には読み取り難いことだから厳しい側に倒してるんじゃない?
仮にそうだとしたら、
機械で「わからない」箇所を人間が検証してねっていう話なわけで、
よくない作法だからやめてねというわけではないのでは。
ただ、テスト駆動開発で最初からテストしやすいプログラム構成をするように、
静的解析ツールを開発に活用する前提で静的解析しやすりプログラムを書くというポリシーも
それはそれでひとつの選択ではあるだろ。
「暗黙の処理」に対して「それって本当にプログラマの意図した通り?」
ってのが機械的には読み取り難いことだから厳しい側に倒してるんじゃない?
仮にそうだとしたら、
機械で「わからない」箇所を人間が検証してねっていう話なわけで、
よくない作法だからやめてねというわけではないのでは。
ただ、テスト駆動開発で最初からテストしやすいプログラム構成をするように、
静的解析ツールを開発に活用する前提で静的解析しやすりプログラムを書くというポリシーも
それはそれでひとつの選択ではあるだろ。
692デフォルトの名無しさん
2019/02/11(月) 16:30:57.99ID:IofovA3h 今使っている静的解析ツールはIPAのこのルール↓↓↓への適応をチェックするやつ
ttps://www.ipa.go.jp/sec/publish/tn16-007.html
(ツール自体はIPAとは無関係なサードパーティー製
autoはそれ自体は別に何とも言われなかったと思う
一方、>>670の下の方
long i = 1;
とすると、R2.4.1あたりの指摘を食らっていたと思う
ttps://www.ipa.go.jp/sec/publish/tn16-007.html
(ツール自体はIPAとは無関係なサードパーティー製
autoはそれ自体は別に何とも言われなかったと思う
一方、>>670の下の方
long i = 1;
とすると、R2.4.1あたりの指摘を食らっていたと思う
693デフォルトの名無しさん
2019/02/11(月) 16:33:09.42ID:IofovA3h ひょっとしたらR2.5.1かもしれん…
最終的に指摘を出なくするので記憶モード、
最終的に指摘を出なくするので記憶モード、
694デフォルトの名無しさん
2019/02/11(月) 16:45:03.75ID:ja3aMy7M なんかクソとクソを組み合わせてるな
clang一つあれば全部解決だろうに
clang一つあれば全部解決だろうに
695デフォルトの名無しさん
2019/02/11(月) 16:50:29.08ID:OF3/TB8A >>687
こういうバカが当時は最新だったが今はレガシーなコードを残していくという負の連鎖。
こういうバカが当時は最新だったが今はレガシーなコードを残していくという負の連鎖。
696デフォルトの名無しさん
2019/02/11(月) 17:08:48.59ID:paWvS3ye >>673
int の 1 を long long に変換したらそれは 1LL じゃないの?
int の 1 を long long に変換したらそれは 1LL じゃないの?
697デフォルトの名無しさん
2019/02/11(月) 17:39:52.78ID:MkFOBvt9698デフォルトの名無しさん
2019/02/11(月) 18:23:19.76ID:j549IniP 構造体や複数の変数の中から必要な変数を扱うときに
auto & var1 =
ってエイリアス的なノリで使ってるけどこれはありだよな?
auto & var1 =
ってエイリアス的なノリで使ってるけどこれはありだよな?
699デフォルトの名無しさん
2019/02/11(月) 18:26:33.23ID:ja3aMy7M いいよ
700デフォルトの名無しさん
2019/02/11(月) 18:28:31.07ID:36SxxiQl 構造化束縛もくるしどんどん使うべき
701デフォルトの名無しさん
2019/02/11(月) 18:49:54.66ID:DnOcmNTU C++が束縛ってイキッた数学用語使うのなんかいらっとくるんだよね
理論もへったくれもない建て増し温泉旅館のクソ言語のくせに
理論もへったくれもない建て増し温泉旅館のクソ言語のくせに
702デフォルトの名無しさん
2019/02/11(月) 18:59:55.40ID:K6Q69q9Y 構造化バインディングって呼んでもいいんだよ別に
703デフォルトの名無しさん
2019/02/11(月) 19:02:03.68ID:ja3aMy7M ストラクチャードバインディングスって言え
704デフォルトの名無しさん
2019/02/11(月) 19:50:47.74ID:JDr8Dttm C++20でいろいろな武装がついて、ますます訳が分からなくなってきた。
705デフォルトの名無しさん
2019/02/11(月) 20:02:04.46ID:36SxxiQl c++20で追加される機能で気になるのある?
706デフォルトの名無しさん
2019/02/11(月) 21:28:28.23ID:Nunz6pAN ついにコンセプト入るんやろ?
やることが増えただけとも言えるが
クラステンプレートの引数推論は改良されないのかな・・
コンストラクト時にしか省略できない&パラメータが残る形で省略できないのは不便
やることが増えただけとも言えるが
クラステンプレートの引数推論は改良されないのかな・・
コンストラクト時にしか省略できない&パラメータが残る形で省略できないのは不便
707デフォルトの名無しさん
2019/02/11(月) 21:34:25.05ID:K6Q69q9Y <=>、契約、range...
結構盛りだくさんだよね
結構盛りだくさんだよね
708デフォルトの名無しさん
2019/02/11(月) 22:31:10.87ID:zUKSDces 脱法建て増し建築
709デフォルトの名無しさん
2019/02/11(月) 22:32:26.99ID:IofovA3h 一体何と戦っているのかってカンジ
710デフォルトの名無しさん
2019/02/12(火) 01:08:47.17ID:Q7cKpfag コンパイル時に解決できることは何でもやります。
711デフォルトの名無しさん
2019/02/12(火) 02:16:21.61ID:xDY2FToe 大学で2年CをやったんだけどC++を学習するのかなり楽になる?
712デフォルトの名無しさん
2019/02/12(火) 02:25:52.97ID:QWumZAWG 大学次第かなぁ
CができればC++の学習はそら楽になるよ、相対的には
CができればC++の学習はそら楽になるよ、相対的には
713デフォルトの名無しさん
2019/02/12(火) 03:07:37.43ID:4IIAFVax Cの勉強に2年使ってる時点でろくな大学じゃない
714デフォルトの名無しさん
2019/02/12(火) 03:19:13.37ID:VJfrEW+T >>711
C++はC言語のほとんどの部分を内包したようなものだから、先にC固有の部分を理解した上でC++に入るのはかなりやり易いとは思う。
あと、Cでは当たり前のやり方がC++では推奨されないやり方になる部分もあるので、考え方の切り替えは必要になる。推奨されないといっても深い理解のためにはけして無駄になるわけではない。
まあそれでも十分大変だが。
C++はC言語のほとんどの部分を内包したようなものだから、先にC固有の部分を理解した上でC++に入るのはかなりやり易いとは思う。
あと、Cでは当たり前のやり方がC++では推奨されないやり方になる部分もあるので、考え方の切り替えは必要になる。推奨されないといっても深い理解のためにはけして無駄になるわけではない。
まあそれでも十分大変だが。
716デフォルトの名無しさん
2019/02/12(火) 04:28:58.59ID:sqMjE8Yx mallocとかsetjmp/longjmpとか
変数は関数の頭じゃなくて使う直前に宣言するとか
変数は関数の頭じゃなくて使う直前に宣言するとか
717デフォルトの名無しさん
2019/02/12(火) 06:12:35.00ID:DAeR3Vqi ファイラ作る場合c+とc#どちらがいいのですか?
いずれ3dもやりたいです
いずれ3dもやりたいです
718デフォルトの名無しさん
2019/02/12(火) 07:02:19.46ID:a49a8vnI ご本尊のハゲ先生は「Cを知らなくてもC++を使える」と書いてるな。
一方『独習C++』でシルトさんは「Cを知らなきゃC++は難しい」と書いてる。
C以外のプログラミング言語を知ってるかどうかに依存するのか知れんし、
「この本ではCと共通する部分は説明しないよ」程度の意味かも知れんけど。
一方『独習C++』でシルトさんは「Cを知らなきゃC++は難しい」と書いてる。
C以外のプログラミング言語を知ってるかどうかに依存するのか知れんし、
「この本ではCと共通する部分は説明しないよ」程度の意味かも知れんけど。
719デフォルトの名無しさん
2019/02/12(火) 07:29:33.60ID:SvKCMiwA mallocは非推奨なんですか?
720デフォルトの名無しさん
2019/02/12(火) 08:01:36.93ID:/ZK7yd+2 malloc/freeだとコンストラクタ・デストラクタが呼ばれないからね。
placement newと組み合わせて、余計なmallocを減らして高速化をねらう使い方もあるにはあるけど、そういのはコンテナクラスでまとめちゃうだろうし。
placement newと組み合わせて、余計なmallocを減らして高速化をねらう使い方もあるにはあるけど、そういのはコンテナクラスでまとめちゃうだろうし。
721デフォルトの名無しさん
2019/02/12(火) 08:26:33.80ID:WW36R8Qd >>718
まあ難しいけど使えるという状態はあるからその2つは矛盾してるわけじゃない
まあ難しいけど使えるという状態はあるからその2つは矛盾してるわけじゃない
722デフォルトの名無しさん
2019/02/12(火) 10:06:17.35ID:dWGWBM0h >>719
malloc() の戻り値は「void *」で、C だとどんな型のポインタ変数に代入しても
エラーや警告が出なかったが、C++ だとエラーが出る。
C++ は型を非常に大切にしていて、
TYPE *ptr = new TYPE; や
TYPE *ptr = new TYPE[N];
のように書くのが標準。理由は、必ずコンストラクタを呼ぶようにするためと、
型の異なるポインタには cast しない限りは絶対に代入できないようにするため
だと思われる。というのは、delete ptr とした場合に、ptr の型によってどの class の
デストラクタが呼ばれるかが変わったり、ptr->func() とした場合に、func が、
どの class のメンバ関数であるかをコンパイラが知るため。わずかでも違っていれば
結果が変わってきてしまう。これが C++ が大きなプログラム開発に向いている
所以でもあって、わずかな間違いでもコンパイラが見つけてくれる確率が高くなっている。
C++ で malloc() をエラーを起こさずに使うには、コンストラクタが(絶対に)存在しない
ところのBYTE 配列の場合ですら、
BYTE *ptr = (BYTE *)malloc(N);
のように書かなくてははならない。 これは面倒なので(←嘘です)、
BYTE *ptr = new BYTE[N];
と書く習慣になっている。
malloc() の戻り値は「void *」で、C だとどんな型のポインタ変数に代入しても
エラーや警告が出なかったが、C++ だとエラーが出る。
C++ は型を非常に大切にしていて、
TYPE *ptr = new TYPE; や
TYPE *ptr = new TYPE[N];
のように書くのが標準。理由は、必ずコンストラクタを呼ぶようにするためと、
型の異なるポインタには cast しない限りは絶対に代入できないようにするため
だと思われる。というのは、delete ptr とした場合に、ptr の型によってどの class の
デストラクタが呼ばれるかが変わったり、ptr->func() とした場合に、func が、
どの class のメンバ関数であるかをコンパイラが知るため。わずかでも違っていれば
結果が変わってきてしまう。これが C++ が大きなプログラム開発に向いている
所以でもあって、わずかな間違いでもコンパイラが見つけてくれる確率が高くなっている。
C++ で malloc() をエラーを起こさずに使うには、コンストラクタが(絶対に)存在しない
ところのBYTE 配列の場合ですら、
BYTE *ptr = (BYTE *)malloc(N);
のように書かなくてははならない。 これは面倒なので(←嘘です)、
BYTE *ptr = new BYTE[N];
と書く習慣になっている。
723デフォルトの名無しさん
2019/02/12(火) 11:29:59.12ID:8lolhehX delete [] ptr; じゃね
724デフォルトの名無しさん
2019/02/12(火) 11:46:23.37ID:LAva8DO1 >>723
TYPE *ptr = new TYPE;
の場合は、delete ptr; で、
TYPE *ptr = new TYPE[N];
の場合は、delete [] ptr;
と書くのが C++ の原定義。ここが、C++ のちょっと怖い気がするところ。
間違えてても、コンパイル段階ではエラーになってくれない。
TYPE *ptr = new TYPE;
の場合は、delete ptr; で、
TYPE *ptr = new TYPE[N];
の場合は、delete [] ptr;
と書くのが C++ の原定義。ここが、C++ のちょっと怖い気がするところ。
間違えてても、コンパイル段階ではエラーになってくれない。
725デフォルトの名無しさん
2019/02/12(火) 11:55:45.12ID:8lolhehX ほんそれω
726デフォルトの名無しさん
2019/02/12(火) 12:07:41.98ID:rbyp88AN deleteにカッコつけるのってちょっと配列を特別視してて嫌だわ。
配列を実現するにしても、[]表記を捨ててもいいんじゃないの。
配列を実現するにしても、[]表記を捨ててもいいんじゃないの。
727デフォルトの名無しさん
2019/02/12(火) 12:14:13.71ID:NT60/ZFg その辺は禿先生も失敗だったと認めてるけど今更変えられないんだよ
new[]は一切使わず、配列をnewするときはstd::arrayを使うのが今時の推奨スタイルです
new[]は一切使わず、配列をnewするときはstd::arrayを使うのが今時の推奨スタイルです
728デフォルトの名無しさん
2019/02/12(火) 12:14:29.27ID:2XqJFBgN 今時はstd::unique_ptrを使えという人もいるかも知れん。
newとdeleteでいいと思うが念のため。
newとdeleteでいいと思うが念のため。
729デフォルトの名無しさん
2019/02/12(火) 14:38:12.08ID:J9X/W0+J Linuxのシステムコールオススメ本ありますか?
730はちみつ餃子 ◆8X2XSCHEME
2019/02/12(火) 14:52:25.40ID:jYEPbswv たしかオブジェクトは、それと同じ型を要素とする大きさが 1 の配列と同じレイアウトだっていう保証は
どっかに書いてなかったっけ? (C++ じゃなくて C だっけ? うろ覚えですまん。)
それを前提とすると delete と delete[] の区別を導入してしまったのは不用意だよな。
malloc / free では区別なしに出来てたわけだし。
どっかに書いてなかったっけ? (C++ じゃなくて C だっけ? うろ覚えですまん。)
それを前提とすると delete と delete[] の区別を導入してしまったのは不用意だよな。
malloc / free では区別なしに出来てたわけだし。
731デフォルトの名無しさん
2019/02/12(火) 14:54:20.86ID:ihSW1Mfy >>730
オーバーロード
オーバーロード
732デフォルトの名無しさん
2019/02/12(火) 15:08:09.96ID:dWGWBM0h >>730
ヘッダ部分を除いたデータ部分としては完全に同じといっても過言ではないんだけど、
ptr = new TYPE; とした場合は、C++ の仕様上は
メモリブロックの先頭に「配列の場合には埋め込まれるところの要素数」をコンパイラは
必ずしも埋め込まなくても良いという事になっていて、その場合、delete 命令から見ると、
要素数1の配列とは同じではない。ただし、VC++ の場合には、危険を避けるため、
delete と delete [] は、どちらを書いても問題なく動作するようになっている
という文書を読んだ事が有る。
(C++元々の)仕様は、なるべくメモリ使用量も検査量も少なくして効率を上げる、
という哲学から来るものなんだけど、型検査をがちがちにして安全性を高めている一方で、
非常に危険な仕様になっていると言えなくもない。ただし、TYPE が小さなオブジェクトの
場合、new TYPE において、メモリブロックのヘッダ部分を配列と同じ構造にしてしまうの
は、結構、メモリの無駄使いにはなる。ただし、それもC#なんかの無駄と比べれば
すずめの涙程度の全然問題ない程度のものではある。しかし、それだけ、C++が効率が
良いはずではある。
ヘッダ部分を除いたデータ部分としては完全に同じといっても過言ではないんだけど、
ptr = new TYPE; とした場合は、C++ の仕様上は
メモリブロックの先頭に「配列の場合には埋め込まれるところの要素数」をコンパイラは
必ずしも埋め込まなくても良いという事になっていて、その場合、delete 命令から見ると、
要素数1の配列とは同じではない。ただし、VC++ の場合には、危険を避けるため、
delete と delete [] は、どちらを書いても問題なく動作するようになっている
という文書を読んだ事が有る。
(C++元々の)仕様は、なるべくメモリ使用量も検査量も少なくして効率を上げる、
という哲学から来るものなんだけど、型検査をがちがちにして安全性を高めている一方で、
非常に危険な仕様になっていると言えなくもない。ただし、TYPE が小さなオブジェクトの
場合、new TYPE において、メモリブロックのヘッダ部分を配列と同じ構造にしてしまうの
は、結構、メモリの無駄使いにはなる。ただし、それもC#なんかの無駄と比べれば
すずめの涙程度の全然問題ない程度のものではある。しかし、それだけ、C++が効率が
良いはずではある。
733はちみつ餃子 ◆8X2XSCHEME
2019/02/12(火) 15:18:28.58ID:jYEPbswv >>732
new はランタイムの処理だ。
同じメモリプールから切り出してくるならどちらにせよ大きさの管理は必要で、
コンパイル時に型が (すなわち必要なバイトサイズが) わかっているからといって、
それで効率的にはなる余地はあんまりあるとは思えんな。
new はランタイムの処理だ。
同じメモリプールから切り出してくるならどちらにせよ大きさの管理は必要で、
コンパイル時に型が (すなわち必要なバイトサイズが) わかっているからといって、
それで効率的にはなる余地はあんまりあるとは思えんな。
734デフォルトの名無しさん
2019/02/12(火) 15:22:00.28ID:dWGWBM0h >>733
要素数が正確にわからないと、デストラクタを呼び出す回数が分からない。
要素数が正確にわからないと、デストラクタを呼び出す回数が分からない。
736デフォルトの名無しさん
2019/02/12(火) 15:44:00.70ID:dWGWBM0h >>735
生のメモリブロックも、大きさは管理されているといえばされているんだけど、
理由は分からないけど、サイズを取得するための _msize(ptr) が存在しない
ライブラリがある。あと、TYPE が小さい場合、アラインの問題もあって、
MBのサイズがTYPE が2個以上入ってしまうようになってしまう場合も有り得て、
要素数を計算する再にその場合の処理を適切にしないといけない。
恐らく出来ないわけではないはずなんだけど、そういう変な事情も
考慮して元祖の C++ は設計されたんじゃないかな。
生のメモリブロックも、大きさは管理されているといえばされているんだけど、
理由は分からないけど、サイズを取得するための _msize(ptr) が存在しない
ライブラリがある。あと、TYPE が小さい場合、アラインの問題もあって、
MBのサイズがTYPE が2個以上入ってしまうようになってしまう場合も有り得て、
要素数を計算する再にその場合の処理を適切にしないといけない。
恐らく出来ないわけではないはずなんだけど、そういう変な事情も
考慮して元祖の C++ は設計されたんじゃないかな。
737デフォルトの名無しさん
2019/02/12(火) 17:37:31.15ID:LAva8DO1 日本で最も使いやすい無料レンタルサーバーといえば、xrea だろう。
しかし、bit defender traffic light は、「黄色ランプ」になる。
これも、日本人に対するいじめの一環と考えられよう。
一応の理由としては、xrea で設置されていたバナー広告が過去に
マルウェア感染していた事があるかららしい。
いずれも日本で最も使いやすかったり普及していたり、日本人にとっては
最も重要なものばかりだ。
しかし、bit defender traffic light は、「黄色ランプ」になる。
これも、日本人に対するいじめの一環と考えられよう。
一応の理由としては、xrea で設置されていたバナー広告が過去に
マルウェア感染していた事があるかららしい。
いずれも日本で最も使いやすかったり普及していたり、日本人にとっては
最も重要なものばかりだ。
739デフォルトの名無しさん
2019/02/12(火) 18:28:54.36ID:a7xlnsdf pmrとかいう名前空間が出来ててワロ。
740デフォルトの名無しさん
2019/02/12(火) 18:55:34.22ID:rlDMzVZE スマートポインタを返す関数?について質問です
Smp<Foo> f = foo(); // こういうのがあるとき
if (foo()->bar) {} // こういうのとか
handle h = foo()->handle; // こういうのは安全なんですか?
または、スマポのデストラクタが動く瞬間はいつですか?
Smp<Foo> f = foo(); // こういうのがあるとき
if (foo()->bar) {} // こういうのとか
handle h = foo()->handle; // こういうのは安全なんですか?
または、スマポのデストラクタが動く瞬間はいつですか?
741デフォルトの名無しさん
2019/02/12(火) 19:31:38.96ID:ihSW1Mfy 実装による
742デフォルトの名無しさん
2019/02/12(火) 19:33:57.75ID:ujVln6bm >>740
uniequ_ptr/shared_ptrはチェックしない
ただ、operator bool()を持ってるから取得してすぐチェックしてやれば以降は安全
デストラクタが呼ばれるのは寿命が尽きるとき
1番上の例はfのスコープの終わり、下2つはその行の終わり
uniequ_ptr/shared_ptrはチェックしない
ただ、operator bool()を持ってるから取得してすぐチェックしてやれば以降は安全
デストラクタが呼ばれるのは寿命が尽きるとき
1番上の例はfのスコープの終わり、下2つはその行の終わり
743デフォルトの名無しさん
2019/02/12(火) 19:52:41.54ID:rlDMzVZE operator bool()について勉強になりました
if (f = foo() && f->bar) {}
こういう書き方にすればnull関係のチェックとなるというわけですね
> 下2つはその行の終わり
なるほどですね、実はそれを恐れていましたw
あほっぽいですが->barする直前にもしやデストラクタ動く?と怯えました
ありがとうございます
if (f = foo() && f->bar) {}
こういう書き方にすればnull関係のチェックとなるというわけですね
> 下2つはその行の終わり
なるほどですね、実はそれを恐れていましたw
あほっぽいですが->barする直前にもしやデストラクタ動く?と怯えました
ありがとうございます
744デフォルトの名無しさん
2019/02/12(火) 20:32:31.62ID:ujVln6bm >>743
ifの場合はその後に続く{}の終わりまで延長する、一応
ifの場合はその後に続く{}の終わりまで延長する、一応
745はちみつ餃子 ◆8X2XSCHEME
2019/02/12(火) 20:59:11.79ID:jYEPbswv >>743
最新の C++ (C++17) なら
if(auto f=foo(); f && f->bar) {}
というように初期化と条件式をセミコロンで区切った書き方もできる。
ここで宣言した変数は if 文全体の終わりがスコープの終わりになるので、
範囲が限定的、かつ、スコープの終わりがわかりやすいので、
積極的に活用したいところ。
最新の C++ (C++17) なら
if(auto f=foo(); f && f->bar) {}
というように初期化と条件式をセミコロンで区切った書き方もできる。
ここで宣言した変数は if 文全体の終わりがスコープの終わりになるので、
範囲が限定的、かつ、スコープの終わりがわかりやすいので、
積極的に活用したいところ。
746はちみつ餃子 ◆8X2XSCHEME
2019/02/13(水) 00:18:46.08ID:VqRfiaP4747デフォルトの名無しさん
2019/02/13(水) 01:07:33.18ID:eXt03lvN 今までは構文の都合でconstであるべき変数もconstにできないことがあったが↓↓↓、
char c;
while ((c = *(p++), (c != '\0' && isprint(c))) {
/*...*/
}
// 以下変数cを使わないコード
これからはconstにできる↓↓↓やたー!
while (const char c = *(p++); (c != '\0' && isprint(c))) {
/*...*/
}
char c;
while ((c = *(p++), (c != '\0' && isprint(c))) {
/*...*/
}
// 以下変数cを使わないコード
これからはconstにできる↓↓↓やたー!
while (const char c = *(p++); (c != '\0' && isprint(c))) {
/*...*/
}
748デフォルトの名無しさん
2019/02/13(水) 01:12:36.96ID:eXt03lvN もうfor文とかも見境無し!
for (int i = 0; const char c = str[i]; c != '\0'; i++) {
/*...*/
}
すばらしい…!
for (int i = 0; const char c = str[i]; c != '\0'; i++) {
/*...*/
}
すばらしい…!
749デフォルトの名無しさん
2019/02/13(水) 01:37:32.24ID:fRMQw/V1 shared_ptrじゃなくてunique_ptrじゃないとだめなときってあるの?
750デフォルトの名無しさん
2019/02/13(水) 01:40:02.25ID:+/4xK8ow あるよ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【熊本】園児に強制性交か 保育所勤務の男を逮捕「性的な欲望が我慢できなかった」警察は余罪を調べる [七波羅探題★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- 【前橋市】小川晶前市長とラブホテルで打ち合わせをした54歳男性職員を停職処分 今月末で依願退職するという [シャチ★]
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」★3 [ぐれ★]
- 日銀「歴史的」利上げ迫る 35年ぶりの年間上げ幅、0.5%の壁を突破 [蚤の市★]
- 【千葉】特養ホームで90歳女性を殴った疑い 女性は死亡 介護福祉士の男(48)傷害容疑で逮捕 成田市 [ぐれ★]
- 中国の日本向けレアアースの輸出止まる、高市のせいで日本終了のお知らせ [931948549]
- 高市早苗「竹島は日本領土」 [834922174]
- あくたんのおまんこって甘そうだよな🤤
- 今日初めてケンタッキー行ってきたんだけどさ
- ヨドバシ店員「転売対策です。エヴァに出てくるロボットの名前をどれかひとつ言ってください」 [268718286]
- 🏡
