C++相談室 part132

■ このスレッドは過去ログ倉庫に格納されています
2017/10/10(火) 00:11:34.01ID:nc/5PI4P0
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part131
http://mevius.2ch.net/test/read.cgi/tech/1501295308/

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

■長いソースを貼るときはここへ。■
 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
69デフォルトの名無しさん (ワッチョイ d108-MWTH)
垢版 |
2017/10/15(日) 21:49:59.50ID:DZC0OlhV0
>>66
そういう実験はまずVMでやれ、だよな
完全に無防備なら本来どうなっていたという話からクリアして
セキュリティの入った環境で引っかかった場合に切り分けをしながら、と
2017/10/15(日) 23:00:46.02ID:9R+c2v2L0
usleepの実装ってどんな感じ? どれくらいのμ秒の精度出んの?
ループ中に頻繁に読んでいいものなのか?
2017/10/15(日) 23:29:48.88ID:lsjR8/6b0
色々あるでしょ。
CPUが時計対応ならそっち見るだろうし、最悪ビジーループ。
不安ならchronoで寝るとかもあるぞ。
2017/10/15(日) 23:39:50.79ID:9R+c2v2L0
ググると最低4msとか出てくるな。MSみたいに最初からミリ秒単位にしとけば変な誤用されないものを。
2017/10/16(月) 12:13:18.90ID:iBTaJQF10
ガベージコレクションがないのに、安全なオブジェクト指向プログラミングなんてできるんですか?
74デフォルトの名無しさん (ワッチョイ 197f-BSx0)
垢版 |
2017/10/16(月) 12:22:08.74ID:VYCnmYA70
デ、デストラクタがあるから
2017/10/16(月) 12:25:47.42ID:CHd6usgT0
ガーベージコレクションも含めて実装するのが真のC++グラマーやでアマチャン
2017/10/16(月) 12:40:47.29ID:Ou6sbmAQM
GC付きスマポ、誰か作らんかね。
2017/10/16(月) 14:41:14.09ID:cwpW48EL0
D言語「俺を使えばいいじゃない?」
2017/10/16(月) 20:49:20.76ID:EBMdtAZpM
cli「もしかして俺の時代?」
2017/10/16(月) 20:54:28.42ID:D6Ozm2TBM
>>76
誰が使うんだよ?
2017/10/16(月) 22:26:22.71ID:uaY9uFi30
>>73
RAIIを徹底するのがC++流リソース管理法
いつ走るかわからないGCなんかよりずっとcontrollable
2017/10/16(月) 23:19:12.53ID:7Byc8Q4r0
GC要求が発生する前にプロセスが完了すりゃいいだけだろ
2017/10/17(火) 00:26:06.58ID:hVetZd8l0
最近は異常なほど高級言語志向が強いな。
2017/10/17(火) 06:56:31.57ID:BJIvhub9M
>>81
それGC要らんだろ w
2017/10/18(水) 06:24:43.21ID:syxw9nR/d
スレッド間の変数の共有って
・pthread時に引数与える
・シングルトン
・グローバル変数
これ以外に何かあるかな?
2017/10/18(水) 08:44:17.01ID:qJuCX/Qy0
C++を最近学び始めた者なんですが
ファイルへの保存で質問があるんですが良いでしょうか
テキストに保存するのと、バイナリに保存するので
文字列を保存するとバイナリが僅かに小さくなるんですが
vectorを保存すると逆にバイナリのほうがサイズが大きくなるのは
普通のことなんでしょうか?
2017/10/18(水) 08:46:30.49ID:qJuCX/Qy0
vectorの二次元配列を、forの二重ループで
テキストへは outputfile << data[i][j] << "\t";
バイナリへは outputfile.write((const char*)&data[i][j], sizeof(data[i][j]));
で書き込んでみてるのですが・・・・・・
100×100の配列を書き込むと
テキストが29キロバイト、バイナリが40キロバイトに
配列を大きくすればするほどバイナリが大きくなってしまいます
2017/10/18(水) 09:34:34.48ID:lDu9kW4oM
>>84
同一アドレス空間である以上、アドレスさえ取れればどんな方法でも共有できると思うよ。
2017/10/18(水) 09:40:31.86ID:+1GvmKA80
>>86
改行かな?
2017/10/18(水) 09:41:02.33ID:MOIHjDBn0
>>86
どんなデータかによる。intを保存しようとしててデータが全部一桁ならバイナリの方が大きくなることもあるかもしれない。

まずキャストの使い方が間違ってるので、さっくり消してみよう。
次に読み取り部分を作って正常に読み取れるか見てみよう。
2017/10/18(水) 09:45:31.83ID:4annDJqp0
>>85
dataの型が解ればもう少し推測できるけど
char data[100][100][MAX_STR_LEN];
だとして
data[0][0] = "data\0qwe"; // "qwe"はゴミ
みたいにnull terminated後の不要なゴミも書き込んでるんじゃない?
バイナリエディタでバイナリファイル覗いてみれば解るかと
サイズから推測するとMAX_STR_LENは4かな
2017/10/18(水) 09:57:25.60ID:MOIHjDBn0
あ、ofstreamのwriteって引数const char*なのか
ゴメン間違ってるってほどじゃないわ
せいぜいC++っぽくreinterpret_castに変えるくらいか
2017/10/18(水) 11:54:38.42ID:hNmHHI30M
>>91
いや、私の誤りでした、だろ
何が間違ってるほどじゃないだ
日本語間違えるなよ

>>86
出力したテキストファイルの中身は?何か差分は無いの?
少ない情報出してここで聞くより
見た方がよっぽどわかるだろ
2017/10/18(水) 11:56:58.03ID:qJuCX/Qy0
レス有難うございます。dataはintのvector二次元配列で
int a=100;
int b=100;
vector< vector<int> > data(a, vector<int>(b));
このdataに、forで
data[i][j] = rand() % 100;
の数字をいれている配列なんです
バイナリ保存したデータを、FavBinEditというものでみてみると
数字と数字のあいだに間隔があいてるので
これがサイズが大きくなってる理由なのかと思うんですが
94デフォルトの名無しさん (ブーイモ MM0d-uYMh)
垢版 |
2017/10/18(水) 12:47:08.44ID:J7UI6pACM
>>93
int型の100*100配列なら約40K byteなんだから、バイナリファイルは正しいと思うよ。
で、テキストも間違っているとは言いきれない。
例えば一桁の数字が多いなら、バイナリファイルより小さくなるよね?

サイズの違いはあって当然だと思うけど。
2017/10/18(水) 13:00:53.38ID:qJuCX/Qy0
そういうものなのですか
ネット上に、バイナリに保存するとサイズが小さくなる
という話が多いのでそう思い込んでました
自分には関係無いような、複雑なデータを扱うと小さくなるのかな
2017/10/18(水) 13:06:46.43ID:4annDJqp0
そういうもんですね 自分もintなら納得です

「rand() % 100」なら文字列にしたとき"0"(=0x30)から"99"(=0x3939)と2byteで収まり
"\t"を付けても 常に4byte(=sizeof(int) システム依存)より小さいですから
バイナリだと0を0x00000000, 99を0x63000000(リトルエンディアン)で保存してます

試しに「rand() % 100」を「10000」とか
"文字列にしたとき'\t'も含めて4文字を越える大きさ"にすれば
サイズが逆転するのが観察できるはずです

・扱う数字が小さいからテキストの方が短くて済んでる
・バイナリなら数字が大きく(当然intの最大値を越えないこと)なってもサイズが一定で済む

余談ながら
バイナリで保存するならバイトオーダー(エンディアン)には注意しとかないと
万が一エンディアンの違うシステムで動作する必要があるときに死ねます
2017/10/18(水) 16:31:39.68ID:8P8HMOssx
質問です。
とあるクラスのヘッダーに定義している文字列変数(CString)の文字列だけを変更し、ビルドしても、変更が反映されないのですがこれは仕様でしょうか?リビルドすると反映されます。
環境はVisualStudio2015 VC++です。
2017/10/18(水) 16:50:26.75ID:8P8HMOssx
自己レス。最小リビルドを無効にしたら解決しました
2017/10/18(水) 20:07:45.40ID:3bYwz/rX0
>>83
そう
それが肝心
100デフォルトの名無しさん (ブーイモ MM71-v1IO)
垢版 |
2017/10/19(木) 12:49:02.40ID:LAmWAPnYM
>>95
テキスト形式は、装飾次第で肥大化しやすいってだけだよ。
カンマやタブや改行も装飾の一部。
一桁の数字でも、スペース等で桁合わせしたら、それだけで肥大化するしね。

実際のところは、どういうフォーマットで出力してるか次第だけど。
最小桁で出力していて、rand 出力が正規分布に従うと考えれば、計算上約29k byteになるよ。
2017/10/19(木) 21:31:04.86ID:4jS9VIw90
XMLは糞。ゲイツは正しかった。
2017/10/21(土) 01:43:03.05ID:20SzWA3c0
無名名前空間内の変数にstaticがついたものを見かけました
このstaticにはどのような意味があるんでしょうか?それぞれ同じような意味だと思い込んでいたのですが・・・
2017/10/21(土) 03:20:47.47ID:NGOzoqth0
ユニファイドコールシンタックスまだー!?
104デフォルトの名無しさん (ワッチョイ 4d80-9ZeW)
垢版 |
2017/10/21(土) 05:36:54.09ID:NrRI2kzj0
>>103
要らねえよ
2017/10/21(土) 05:39:44.45ID:NGOzoqth0
>>104
黒魔術できるから楽しいぞ。
入ってくれ。
2017/10/21(土) 05:49:37.85ID:NGOzoqth0
auto R = Handle.ConnectTCP(...).WaitConnect().SendData(...).EndSettion();
auto A = Array.Map(...).Reduse(...).get();
こんな感じのことができるようになる。上は適当。
入ってくれー。
2017/10/21(土) 06:01:20.72ID:uavAERV80
糞化しようとする勢力に悪意があるな。
2017/10/21(土) 06:15:26.00ID:NGOzoqth0
一体何と戦っているんだ。
2017/10/21(土) 06:37:35.81ID:PyeytVxV0
EndSession(SendData(WaitConnect(ConnectTCP(Handle, ...)), ...));

Handle.ConnectTCP(...).WaitConnect().SendData(...).EndSession();
と書けるようにしたいと、そんな感じか?

元ネタの言語はなんだ?お兄さん怒らないから正直に申告しなさいw
2017/10/21(土) 07:18:06.90ID:fkuXV6f/0
まあSettionとか言う奴のレベルはこんなもんだ
111デフォルトの名無しさん (ワッチョイ 4d80-9ZeW)
垢版 |
2017/10/21(土) 07:40:07.85ID:NrRI2kzj0
>>109
そう書きたいなら最初からそういうAPIにすればいいだけなんだよな
2017/10/21(土) 07:54:28.52ID:uavAERV80
タイムアウトとか再試行とか異常系コードがてんこもりに入るんだからどうせ分解して書く。
そういう書き方をしたがる人は実務では一切コードを書いてない人だろう。
2017/10/21(土) 08:13:32.79ID:SZJ3Irjn0
>>112
異常系を入れる場所も階層も選ばないとか昭和初期のプログラマーーカヨ;
ていうか>>109の書式のどっちも分けて書こうと思えば書けるし…
2017/10/21(土) 08:21:55.02ID:uavAERV80
おれはこういう悪意ある黒魔術師と戦っている。
2017/10/21(土) 09:17:17.25ID:fkuXV6f/0
ちょっとしたスクリプトとかの書き捨てならワンライナーって言うのもわからなくはないけどC++には要らんわな
116デフォルトの名無しさん (ワッチョイ 5504-gh9y)
垢版 |
2017/10/21(土) 09:28:17.64ID:K7BlTjWw0
質問です。
int型のポインタが指す値に1を足したいのですが
int *a+=1;と書くと足されるのですが
int *a++;だと足されません
これはなぜでしょうか?
117デフォルトの名無しさん (ワッチョイ a57f-0GSP)
垢版 |
2017/10/21(土) 09:37:24.91ID:IwpIepkb0
(*a)++;
*(a++);
下の方になってね
118デフォルトの名無しさん (ワッチョイ 5504-gh9y)
垢版 |
2017/10/21(土) 09:42:55.21ID:K7BlTjWw0
なるほど!
カッコを付けてあげれば良いのですね
ありがとうございました。
119デフォルトの名無しさん (ワッチョイ 0aeb-bcII)
垢版 |
2017/10/21(土) 11:19:52.01ID:uaVA6cYp0
本質を理解しないと だめだぞ。
2017/10/21(土) 12:50:25.52ID:bOloMtFq0
本質ってなんや?
2017/10/21(土) 12:59:49.25ID:OLnfmZiv0
基本解ってないバカはC言語からやり直せ
C++なんぞ十年早いわ
2017/10/21(土) 13:50:17.85ID:RIH/f2PJ0
>>120
演算子には結合の優先順位があるからそれを理解しておけということかと。
2017/10/21(土) 13:53:20.33ID:SZJ3Irjn0
次はきっと評価順序に依存性がある複数の副作用を同じ式の中でやって泣く
2017/10/21(土) 14:08:40.10ID:b0s0lkOv0
本質と口走る人間は信用しないようにしている
2017/10/21(土) 14:27:26.13ID:duVZds/m0
2chは信用しているのかw
126デフォルトの名無しさん (ワッチョイ ddb3-0MKJ)
垢版 |
2017/10/21(土) 14:35:07.96ID:PVB7G2Ex0
ここは5chだが。
2017/10/21(土) 14:50:08.83ID:fkuXV6f/0
>>126
俺はまだ2chから見てる
http://mevius.2ch.net/test/read.cgi/tech/1507561894/126
2017/10/21(土) 19:41:59.47ID:I0YX3jVB0
よし、>>116 からの流れを一言でまとめてやるぞ
必要なときはカッコつけなさい
こうだ
129デフォルトの名無しさん (ワッチョイ f9d6-1OZr)
垢版 |
2017/10/21(土) 19:48:36.37ID:LO7dvffl0
>>117
おまえ病院に行ったほうがいい
変数aの定義でとち狂っている>>116より重症だぞ
2017/10/21(土) 20:09:03.62ID:NGOzoqth0
>>109
Dにもあるらしいけど、元ネタは没になったペーパー。
2017/10/21(土) 20:11:00.84ID:RIH/f2PJ0
>>129
初心者が質問でおかしな書き方したが、周りはその意味が分かって会話が通じているんだから、そんなつまらない攻撃的なツッコミする必要ないのでは?
132デフォルトの名無しさん (ワッチョイ f9d6-1OZr)
垢版 |
2017/10/21(土) 20:36:40.01ID:LO7dvffl0
>>131
意味わかった気になってるのは陽性症状だよ
幻視でint *a=+1;が見えた禁治産者がなに必死こいてんだ?
2017/10/21(土) 20:43:36.23ID:bW2z389o0
またすげえ病的なのが現れたな
2017/10/21(土) 21:07:43.36ID:MOgwtCLBH
妖精症状かは不明だが『周りはその意味が分かって会話が通じている』という決め付けは危険だし
なにより相手に対して何の説得力も無い
2017/10/21(土) 21:08:16.87ID:Hb3Ud/Wn0
++*aでいいだろ
136デフォルトの名無しさん (ワッチョイ f9d6-1OZr)
垢版 |
2017/10/21(土) 21:37:44.98ID:LO7dvffl0
>>135
よくねえよ
int ++*a; で何を宣言できるんだ
2017/10/21(土) 21:46:20.40ID:RIH/f2PJ0
誰も変数の宣言を問題にしてないと思うよ。君を除いて。
138デフォルトの名無しさん (スップ Sd7a-s5BS)
垢版 |
2017/10/21(土) 21:47:40.59ID:vcAgy2myd
知恵袋とかでよく見る質問者に説教してる奴まんまだwww
2017/10/21(土) 22:22:59.67ID:fkuXV6f/0
周りがわかってるかどうかはわからんけど>>117はわかって質問者の>>116と会話できてるからいいんじゃね?
2017/10/21(土) 22:29:56.31ID:uaVA6cYp0
俺が余計なこと言わなきゃよかったんだ
2017/10/21(土) 22:47:24.45ID:PyeytVxV0
よし、みんな大好きコンセプトの話しようぜw
2017/10/21(土) 23:16:03.82ID:ov3vGz/Dr
>>141
requires { typename T::type{} }
は文法的に正しいですか?
143名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ a127-1OZr)
垢版 |
2017/10/22(日) 07:02:44.44ID:dj2Vz85u0
>>137
それが本当なら揃いも揃って阿呆ばっかりということだ
int *a+=1;で何が起きるのかを論じてこそC++の話だ
スレ違いの阿呆どもは出て行け
2017/10/22(日) 10:10:22.77ID:ZvWpZB8L0
スレを私物化しててワロタwwwwwwwwwwwwwwwwwww
2017/10/22(日) 10:29:24.17ID:euCeLmcjM
>>143
そんなの使うな、で終わり。
議論する価値は無い。
2017/10/22(日) 11:13:45.90ID:Bsg7QecN0
うむ、これで>>116の話は終わりだな
めでたしめでたし
147名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ a1cc-1OZr)
垢版 |
2017/10/22(日) 12:06:12.78ID:W+EQ/H9/0
>>144
私物化はおまえだ
C++の話をしろボケ
148名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ a1cc-1OZr)
垢版 |
2017/10/22(日) 12:09:53.87ID:W+EQ/H9/0
ひとつ手本を見せてやる
#define a aa{nullptr}; aa
int *a+=1;
#undef a
#define aa a
おまえら(たぶん1人)はこれ以下の阿呆だ
2017/10/22(日) 12:23:06.98ID:fUpU+dpH0
レベル低い手本だな
2017/10/22(日) 19:28:43.25ID:O4jMcQm7d
typedefとdefineの違いすらわかってないのが俺

define A BだとAをBとする
typedef B AだとAをBとする
こうなるだけ?
151名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ a108-1OZr)
垢版 |
2017/10/22(日) 19:37:19.87ID:bXoG3HvV0
typedefなんかもう使うな
これからはusingだ
2017/10/22(日) 19:38:18.60ID:rLWliBun0
>>150
#defineはソースコードのテキストを字面だけで置き換えるだけ。
typedef相当のこと以外にも色々な使い方ができるが、トリッキーなことをして分かりにくくなったり弊害が大きいので、言語仕様が拡充された現在では、なるべく使用すべきでないという風潮になっている。
2017/10/22(日) 19:38:36.42ID:NTIGbrlN0
defineは置き換えでtypedefは名前変更

#define SIZE 50, 200
void SetSize(int w, int h)をSetSize(SIZE)って呼ぶことができる

typedefはtypedef std::vector<MyLonglongClassName> MyVector;
とすることで短くできる
2017/10/22(日) 19:42:10.58ID:O4jMcQm7d
>>151
>>152
>>153
defineは俺の認識であってると思ってるけど
typedefの名前変更ってなんなんだ

defineでもint hage ってしちゃうと名前変更にならない?
2017/10/22(日) 19:49:02.84ID:rLWliBun0
typedefで導入した識別子の名称は、型の名前としてコンパイラが字句解析、意味解析する際に適切に扱ってくれるけど、defineの方は字面を置き換えただけだから文脈によっては意図した通りにならないケースがある。

具体例はすぐに思いつかない…
誰か詳しい人が書いてくれるかも。
2017/10/22(日) 20:24:28.58ID:cygPpIjv0
typedef int *IntPointer; //A
#define IntPointer int* //B

//Aの場合: int x * const の意味となり、*xは変更可能
//Bの場合: const int *x と展開され、*xは変更不可能のためコンパイルエラー
void f(const IntPointer x) { *x = 0; }
157デフォルトの名無しさん (ワッチョイ 163e-v1IO)
垢版 |
2017/10/22(日) 20:29:43.27ID:KI+QlBvW0
>>150
#defineは、厳密にはコンパイラの機能では無いんだよね。
ただのテキスト置換なんで、様々なチェックが働かない。
置換後のテキストに対してコンパイルを行うから、エラーも難解になったりする。

対してtypedefはコンパイラの機能。
型に対してのみ別名を付ける事しか出来ないけど、ちゃんと型チェックが行われる。
2017/10/22(日) 21:05:01.87ID:eZyQD2ui0
typedefを一切使うなというのは無理ゲーすぐる…
std::vector<std::vector<int> > jug_array = new std::vector<std::vector<int> >(5000);
for (std::vector<std::vector<int> >::const_iterator it = jug_array.begin(); it != jug_array.end(); ++it) {
 ...
}
とかゆうのはusingでは多分std::を削れるぐらいだと思う
159デフォルトの名無しさん (ワッチョイ a57f-0GSP)
垢版 |
2017/10/22(日) 21:07:07.30ID:Nihr2kgP0
そのusingではなく
using hoge = int;
のusingだろ
160デフォルトの名無しさん (ワッチョイ c578-+Jsc)
垢版 |
2017/10/22(日) 21:50:12.47ID:DuSJV2Ke0
変数宣言に関してはC++03は苦行の極みだったな
2017/10/22(日) 22:37:08.77ID:gV0xEv2nr
typedef名が無いとintのデストラクターが呼べない
using T = int;
int{}.~T();

typedef名が無いと関数ポインターへの変換関数が書けない(たぶん)
using F = void ();
operator F *() {return nullptr;}
2017/10/22(日) 22:44:21.85ID:gV0xEv2nr
typedef名が無いと関数型をメンバーポインター型に変形させることができない
using MF = void () const;
MF class_type::* mp;

そして何より、関数内で#defineしたものは関数外に漏れる
2017/10/22(日) 23:08:06.76ID:V6KHSGcm0
>>158
型推論でいいだろ
auto jug_array = new std::vector<std::vector<int> >(5000);
for(auto it = jug_array.begin(); it != jug_array.end(); ++it) {
 ...
}
2017/10/23(月) 00:28:15.86ID:WKKpeTI2r
>usingでは多分std::を削れるぐらいだと思う
 ↓
>型推論でいいだろ

これがアスペというやつだな
165デフォルトの名無しさん (ワッチョイ 4d80-9ZeW)
垢版 |
2017/10/23(月) 00:38:49.98ID:a4CoBhRy0
>>164
俺も思ったからアスペだわ
2017/10/23(月) 01:19:27.04ID:E0HRfOuJ0
>>164がアスペという可能性も微レ存
2017/10/23(月) 02:33:22.14ID:4YhCJR4W0
アスペかどうかはわからないけど話の流れを追わないで字面で反応する人いるよね
168デフォルトの名無しさん (ワッチョイ ddb3-0GSP)
垢版 |
2017/10/23(月) 05:45:22.43ID:iFI38Dlw0
%%%%1000%%%%

000-[HUM%58*73.1\%]/2I/3NM/61.3SNMK%?%3%51.22222222222221%
001-[[[%6/4$17.6135412α3]]]]+DOM+SIL+7%
002-UML7%[61.2[31.5[!%32∂LM17.36%!16.3!%<<<%!HSTOL7%!Q!S!=3m=<2TOL<3Q9A<2.1GHz%,DOK,HAOARA,
003-[[[HEMLOT47[<\41.2%Q,===>[MLS<DPNO<\2.3>#ESOLA!5%!3MLA!>LTOSA>7TONSA>%>%end
2017/10/23(月) 06:00:11.73ID:tsKHL/vaM
>>164
はあ?
なに言ってるんだこいつ w
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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