X



C++相談室 part134

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 5fcb-Q2eK)
垢版 |
2018/01/20(土) 09:05:42.21ID:mJKRg6iz0
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

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

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

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

■長いソースを貼るときはここへ。■
 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
0657デフォルトの名無しさん (アウアウウー Saaf-0FUd)
垢版 |
2018/03/15(木) 22:07:51.82ID:dQGk6ayHa
cpprefjpの任意の式によるSFINAEの頁でdecltype(a + b, bool())と記載されているコードがあるんだけれど、
このa+b, bool()はラムダ式?

該当頁
https://cpprefjp.github.io/lang/cpp11/range_based_for.html
0661デフォルトの名無しさん (ワッチョイ af7e-hKdO)
垢版 |
2018/03/15(木) 22:41:47.80ID:XNo6/02A0
>>657
>a + b
a + bが可能かどうか調べる

>,
次の式を評価する

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

つまりdecltype(a + b, bool())はa + bでSFINAEをしつつカンマ演算子でdecltypeにbool型の値を与えて返り値の型をbool型にしている
0662デフォルトの名無しさん (アウアウウー Saaf-0FUd)
垢版 |
2018/03/15(木) 22:57:18.20ID:dQGk6ayHa
decltypeで,も使えたんですね。一番右の型が帰るということはdecltype(a+b,a-b,a*b,a/b,bool())とかしてもよさそう。。。

自分ではその機能を説明してるページを見つけれませんでした。
ありがとうございます。
0671デフォルトの名無しさん (アウアウアー Sa83-2N1f)
垢版 |
2018/03/19(月) 18:07:03.75ID:/U1oheuNa
インスタンスにdeleteかけたとき、メンバ変数が破壊されるのとデストラクタが実行されるのはどっちが先?
今書いてるコードがデストラクタでメンバ変数アクセスすると落ちることがあるから、破壊されるのが先なんだろうか?
0674片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdd7-5vKF)
垢版 |
2018/03/19(月) 18:43:06.07ID:SpFx62hRd
>>673に同意。確保と破棄は生ポインタを触らずに自動化した方がいい。スマートポインタとかコンテナとか。
二回deleteを避けるためにポインタにNULLを代入する技もある。
0675デフォルトの名無しさん (アウアウウー Saaf-0FUd)
垢版 |
2018/03/19(月) 21:03:24.06ID:kCg91IvDa
そろそろNULLは駆逐してnullptrに移行させたい
0676デフォルトの名無しさん (ワッチョイ 53bd-mA8b)
垢版 |
2018/03/19(月) 22:46:40.23ID:jnDGFLZz0
>今書いてるコードがデストラクタでメンバ変数アクセスすると落ちることがある
へ〜んなの
ていうかメモリを壊しているかすでにdeleteされた死骸を再deleteしてるとしか、

>二回deleteを避けるためにポインタにNULLを代入
OpenCVのC言語インターフェースのやつ、
0680デフォルトの名無しさん (ワッチョイ 53bd-mA8b)
垢版 |
2018/03/19(月) 23:27:24.60ID:jnDGFLZz0
std::getline()は読み込んだ文字列に改行文字を含めないから
行末まできちんと読んだのか
文字数カウントのせいで読み込みが行の途中でぶちきれたのか
直ちにはわからないといいうアホウな仕様
判別には結局std::basic_istream<T>::unget()の助けが要る

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

※ 個人の感想です
0681デフォルトの名無しさん (ワッチョイ 53bd-mA8b)
垢版 |
2018/03/19(月) 23:28:25.97ID:jnDGFLZz0
訂正
△: C++標準ライブラリのうちストリーム関連だけは腐っているからC言語のを使いなしゃれ
◎: C++標準ライブラリのうちストリーム関連だけは本当に腐っているからC言語のを使いなしゃれ
0682デフォルトの名無しさん (ワッチョイ f3e7-dVgQ)
垢版 |
2018/03/20(火) 01:02:22.15ID:mI6/gPTY0
入出力はCもC++もクソまみれだからなぁ
ちょっとコンソール出力を整形しようとして、あの肥溜めのクソくだらない落とし穴地獄にいちいち付き合わされた結果
プログラミングそのものが嫌いになる人達が山のようにいるのが本当に残念だ
0683デフォルトの名無しさん (ワッチョイ e19f-M10G)
垢版 |
2018/03/20(火) 01:12:22.56ID:PXcTmg8I0
いるか?
0687デフォルトの名無しさん (ワッチョイ e19f-hKdO)
垢版 |
2018/03/20(火) 02:48:01.36ID:PXcTmg8I0
printf()は便利ではあるが桁を揃えて出す時に面倒になることもある。
特にこの頃は UTF-8 で漢字混ざりだと文字幅とバイト数または文字数が一致しない。
そもそもそんなものの一致をあてにすること自体が間違いかも知れないが、Unicode
には一応 HALF WIDTH, FULL WIDTH 等があるんだから何とかしてこれを生かした
フォーマッタが欲しいところではある。
0688デフォルトの名無しさん (アウーイモ MMb3-2N1f)
垢版 |
2018/03/20(火) 06:49:53.60ID:eswqOupsM
>>672
>>673
あるクラスがあって、その中でスレッド立ててるの
それでクラスのデストラクタが呼ばれたら、メンバ変数のスレッドポインタをつかってスレッドcancel->joinってやろうとしてて
それでjoin呼ぶあたりで落ちるんだよね

作られた逆順ってことはデストラクタのほうが先に実行かな?それだとメンバ変数はいきてるよね
0694デフォルトの名無しさん (ワッチョイ 53bd-mA8b)
垢版 |
2018/03/20(火) 22:33:41.91ID:f35CyiEk0
>>685
「<<」と「>>」の2種類しか用意できんやんけ
それらを表示と入力に割り当ててしまえば結局シリアライズのための固有なメソッドなりインターフェースなりを別途作らねばならんぬ、
そもそもの構想からして頓挫してゐる、
頓挫してゐるのだ…!
0696デフォルトの名無しさん (ワッチョイ 53bd-mA8b)
垢版 |
2018/03/21(水) 00:33:52.80ID:7c9Ne47J0
ちょっなんで数億年の生物史史上はじめて
ようやっとSTDINとSTDOUTとSTDERRの3種類に世界が抽象化されたストリームという概念|を
細分化するという元の木阿弥にしますか;;

藻前は
  some_command | tee result.txt > some_file.bin
とかいったパイプやリダイレクトを表示専用とかシリアライズ専用とかに分けたいのかっていうか、
0697デフォルトの名無しさん (ワッチョイ e17f-hKdO)
垢版 |
2018/03/21(水) 00:44:24.33ID:p0rFESlF0
なに藻前って
0698はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO)
垢版 |
2018/03/21(水) 01:10:44.31ID:MouF+uE40
>>696
お前は何を言ってるんだ。
ここで言ってるストリームは C++ 用語のストリームだぞ。
「ストリーム『型』」ってわざわざ書いてるんだからわかれよ。
下位レイヤでは好きなところに繋げればいい。
0701デフォルトの名無しさん (ワッチョイ b180-lboF)
垢版 |
2018/03/21(水) 06:52:22.30ID:fTbDiwfs0
ストリームはもう捨てたほうが良いぞ。
おじさんからの警告だ。
0703デフォルトの名無しさん (ワッチョイ ebb6-CZ08)
垢版 |
2018/03/21(水) 07:18:35.01ID:zecIlzA/0
「29歳既婚、2年前に会社を辞めた。ボードゲーム作りを始めて3700万円を
売り上げたけど何か聞きたいことはある?」回答いろいろ
http://labaq.com/archives/51880196.html
日本ボードゲーム界の異端児に聞く!ボードゲームデザイナーとして生きていくには?
https://bodoge.hoobby.net/columns/00013
はじめてボードゲームを作ってはじめてゲームマーケットに出店した ので、ひとり反省会をしてみる。
http://datecocco.hatenablog.com/entry/2015/11/26/000000
はじめて作ったボードゲームを売った話
http://nrmgoraku.hateblo.jp/entry/2017/05/17/210000
ボードゲームイベント「ゲームマーケット」から業界が見えた!
https://entertainmentstation.jp/61107
ゲームマーケットに挑む人向けガイド
http://spa-game.com/?p=4830
ボードゲームはどう作るのか、自分なりに考えた
http://roy.hatenablog.com/entry/2014/07/09/124824
オトナも遊べるボードゲーム!自作するといくらになるのか
http://www.d-laboweb.jp/special/sp312/
ボードゲームの展示イベント「ゲームマーケット」の成長記録からこれからの
市場に必要なことを妄想してみた。6年間の来場者数推移(2016年4月時点調べ)
https://bodoge.hoobby.net/columns/00001
ボードゲーム市場がクラウドファンディングの出現で急成長を遂げ市場規模を拡大中
http://gigazine.net/news/20150820-board-game-crowdfunding/
0704デフォルトの名無しさん (ワッチョイ 1ff3-hKdO)
垢版 |
2018/03/21(水) 10:36:30.48ID:DQv7yGEy0
>>696
カンブリア紀からオルドビス紀にかけて行われた抽象化は
今でいうインターフェイスの考え方で、当たり前だが
インターフェイスを継承する実装クラスは無数にあってよい
そういうのは元の木阿弥とは言わないぞ
0705はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO)
垢版 |
2018/03/21(水) 15:09:48.71ID:MouF+uE40
>>696
さっき >>698 で説明した C++ の話題を置くとしても、
(まあ C++ スレで C++ の話題を置いちゃうのはどうかと思うが)
標準入力、標準出力、標準エラー出力のみっつしかないってことはない。

エラー出力をリダイレクトするときに 2> って書くの、どういう意味だと思ってる?
2 はファイルディスクリプタな。
デフォでオープンされてるのが 0, 1, 2 ってだけで、やりたければ 3 でも 4 でも使っていい。
0706 ◆QZaw55cn4c (ワッチョイ 9360-MOYc)
垢版 |
2018/03/21(水) 15:42:02.21ID:ZGJmhAHm0
>>705
空いているディスクリプタが使用されるとしても、自分で特定の数字を指定してディスクリプタにすることはできなかったんじゃなかったかな?
0708デフォルトの名無しさん (ワッチョイ af7e-hKdO)
垢版 |
2018/03/21(水) 15:58:29.69ID:9NBOfW2C0
coutがSTDOUTにつながってるだけでここは何につなげてもいいということ
streambufの中身はただの配列でもいいし、アプリケーションのロガーでもいいし、循環バッファでもいいし、通信のポートでもいい
0712はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO)
垢版 |
2018/03/21(水) 20:33:11.12ID:MouF+uE40
read なり write なりを「使う」のは別にいいよ。
それを C++ 上でどのように抽象化すればいいかって話なんだから。
そういうレイヤの違う話を混ぜ込んでくるなよ。
0713デフォルトの名無しさん (スップ Sd03-tAvx)
垢版 |
2018/03/21(水) 20:43:51.09ID:KgSvodNyd
そこで新しい型を設けてまで << を使う意味がない
cout にバイナリでシリアライズするときはどうすんの?
size_t serialize(const T& t, ostream& os)
とかを各型用に書く方がマシ
0714デフォルトの名無しさん (スップ Sd03-tAvx)
垢版 |
2018/03/21(水) 20:47:43.15ID:KgSvodNyd
バイナリでシリアライズするに際して
別の型のストリームオブジェクトを作ってまで
<< だの dec だの endl を使えるようにすることの利点を説明して欲しい
0715デフォルトの名無しさん (ワッチョイ af7e-hKdO)
垢版 |
2018/03/21(水) 21:36:05.23ID:9NBOfW2C0
例外を除いて
operator<<()は書式化出力
write()は非書式化出力
なのでバイナリを出力するときはwrite()を使うべき

>size_t serialize(const T& t, ostream& os)
シリアライズのような複雑な操作をするときはこれは悪い選択じゃない
というかstreamそのものを放り込むのはたまに見かける
0717はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO)
垢版 |
2018/03/21(水) 22:15:54.63ID:MouF+uE40
>>715
書式化 (formatted) ってのと、結果がバイナリかというのは直行する概念だよ。
シリアライズってのはオブジェクトのバイト列をそのまま出力することじゃなくて、
バイナリ形式の特定のフォーマットにして出力することだろ。
それは書式化って言うんだよ。
0718はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO)
垢版 |
2018/03/21(水) 22:26:24.75ID:MouF+uE40
>>714
マニピュレータを使える意味はないかもな。
使えないように定義することも出来るし、意味がないなら使えないようにしておくべき。

ここでは抽象化の話をしているんだ。
出力先が人向けのテキスト表現であるか機械向けのシリアライズ表現であるかによって
書き方を変えなきゃならない、相手を意識しなきゃならないというよりは、
相手によって自動で切り替わって欲しいってことなんだよ。

意識しなくていいデザインってのは意識しにくくなるってことと表裏一体だから、
見えなくなるのが気にくわないってのならわかる。
0722はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO)
垢版 |
2018/03/21(水) 23:50:04.75ID:MouF+uE40
>>721
俺は一貫して抽象化の話をしてるつもりなんだが。
プログラマの意図を表現できる書き方をすべきって話をしてんの。
無意味な処理をしろと書いてあるのをプログラマの意図として読み取っていいのか?
そうじゃないだろう。

C++ がせっかく用意しているライブラリを活用するのが無駄なのか?
そうじゃないだろう。
0723デフォルトの名無しさん (ワッチョイ 5b80-AyCB)
垢版 |
2018/03/22(木) 07:21:49.59ID:tiDItZ1f0
ハッキリ言ってストリームは蛇足だったわ。
廃止したほうが良いわ。
0724デフォルトの名無しさん (ワッチョイ 5b80-AyCB)
垢版 |
2018/03/22(木) 07:25:52.15ID:tiDItZ1f0
Boostもそうだけど、有り余るC++のパワーをカッコよく使いこなそうとしてやっちまったみたいな。
もうちょっと使う側の立場にたつべきだな。
0731デフォルトの名無しさん (ワッチョイ a393-4ZrE)
垢版 |
2018/03/22(木) 19:57:57.53ID:sR+euIcT0
>>726
どの資料だったか覚えてないけど、演算子オーバーロードに関して
先生は「元の演算子の意味とかけ離れた挙動をさせるのは避けるべきだ」
みたいなことも書いてるよな。

まぁ、原則は指針であって絶対の規則じゃないわけだけど、
<< >> をビットシフトからストリーム入出力に振り替えておいて
どの口で言うか、このハゲッー! とか思ったり。
0733はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5)
垢版 |
2018/03/22(木) 20:22:42.90ID:HExEyyqO0
>>731-732
まああれくらいのものになると、オブジェクトに追加で突っ込んでいくような動作が「元の演算子の意味」になっちゃってるよな。

そんなことより C++20 に入る予定のカレンダーでは日付を 2018y/mar/22 とか書けるらしくて、
これはさすがにクソやろ……。
これもいずれ普通に受け入れる気持ちになるだろうか。
0737デフォルトの名無しさん (ワッチョイ a393-4ZrE)
垢版 |
2018/03/23(金) 08:21:50.21ID:VCdaFb7Y0
>>733
標準に「日付を表す型」みたいのが追加され、
それ用リテラルの接尾語(のひとつ)が ""y で 2018y は2018年を表す、
さらにこの型では / は日付要素を区切る演算子としてオーバーロードされてる。
…といった感じか?

確かに虚心坦懐に / を見れば、割り算のコンピュータ向け代用記号だけでなく
日付の区切りや、ファイルシステムの階層区切りでもあるけど。
0740デフォルトの名無しさん (アウアウウー Sac7-zkh5)
垢版 |
2018/03/23(金) 10:45:38.60ID:COiOJTLla
「静的」、「動的」というのがよく分からないのですが、詳しく書いてある本はありますか?

ヒープ領域がどうたらとかいうのもよく分かりません。
スタックとかいうのもよく分かりません。

詳しく解説している本を教えてください。
0741デフォルトの名無しさん (アウアウウー Sac7-zkh5)
垢版 |
2018/03/23(金) 10:48:57.55ID:COiOJTLla
ロベールのC++の本を読んでいて疑問に思いました。
0746 ◆QZaw55cn4c (ワッチョイ ba60-fzSc)
垢版 |
2018/03/23(金) 19:55:59.42ID:J4dYcx4H0
>>740
C/C++ のメモリ構造について、になります。
これは基本的な事項で、初級を脱するためにはぜひとも必要な知識なんですが、
そのわりにあまりに解説されることがないような気がします
適切な説明がないものか…
0747 ◆QZaw55cn4c (ワッチョイ ba60-fzSc)
垢版 |
2018/03/23(金) 19:59:40.83ID:J4dYcx4H0
>>740
まず、メモリの管理方法として

1. スタックエリア、に格納するやり方
2. ヒープエリア、に格納するやり方

の大きく分けて二通りがあり、

2. ヒープエリア、二格納するやり方について

2-1. 「静的」:static キーワードを使うやり方
2-1. 「動的」:malloc()/free() または new/delete を使うやり方

が分類されます。
0749デフォルトの名無しさん (アウアウウー Sac7-zkh5)
垢版 |
2018/03/23(金) 20:39:25.53ID:COiOJTLla
>>746-747

ありがとうございました。

あまりそういう本はないんですか。

もしかしたら、ヘネシーらのコンピュータのハードの本とか読まないといけないんですかね?

あるいはコンパイラの本ですかね?
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況