次スレを立てる時は本文の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
探検
C++相談室 part132
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん 転載ダメ (ワッチョイ faeb-wbjw)
2017/10/10(火) 00:11:34.01ID:nc/5PI4P02デフォルトの名無しさん (ワッチョイ aaeb-wbjw)
2017/10/10(火) 00:12:56.93ID:nc/5PI4P0 散々スレ散らかしておいて挙句誰もスレ立てないとか何なんだよおい
3デフォルトの名無しさん (ワッチョイ fd79-zkbM)
2017/10/10(火) 00:17:51.84ID:UbDU2trc0 >>1乙
4デフォルトの名無しさん (ワッチョイ da34-HxEp)
2017/10/10(火) 00:20:07.57ID:QENrkQd80 swap(a,1);
5デフォルトの名無しさん (ワッチョイ dabd-mvC5)
2017/10/10(火) 00:34:49.46ID:xPjXx2fY0 int&& x=1;
乙 << x;
乙 << x;
6デフォルトの名無しさん (ワッチョイ dabd-mvC5)
2017/10/10(火) 00:37:53.16ID:xPjXx2fY0 swap(T& x, T& y) { T tmp = x; x = y; y = tmp; }を
swap(T&&x, T&& y) { T&& tmp = x; x = y; y = tmp; }とかやったら死ぬ気しかしない
swap(T&&x, T&& y) { T&& tmp = x; x = y; y = tmp; }とかやったら死ぬ気しかしない
7デフォルトの名無しさん (ワッチョイ dacf-lNhP)
2017/10/10(火) 02:42:57.50ID:wYOMkRRU0 2 名前:デフォルトの名無しさん (ワッチョイ bf54-lR6P)[sage] 投稿日:2017/03/31(金) 16:52:18.52 ID:CoeIAoH10
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
---- テンプレ ここまで ----
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
---- テンプレ ここまで ----
8デフォルトの名無しさん (ワッチョイ 5a12-wbjw)
2017/10/10(火) 12:31:02.91ID:EzEz7dGm09デフォルトの名無しさん (スプッッ Sdda-Qcsg)
2017/10/10(火) 15:13:46.21ID:S8JfuHhfd 開発的なお話で単純に構造体の要素を一つ追加するって危険な行為でしょうか?
10デフォルトの名無しさん (ブーイモ MMfa-0mrS)
2017/10/10(火) 15:40:18.46ID:NgeFZ2kOM 質問がふわふわし過ぎ
そんなんじゃまともな回答は無理
個人的には
メンバをひとつ追加する程度で
破綻のリスクが増えるというなら
それは元々破綻していて
表面化していないだけだろうと思うが
そんなんじゃまともな回答は無理
個人的には
メンバをひとつ追加する程度で
破綻のリスクが増えるというなら
それは元々破綻していて
表面化していないだけだろうと思うが
11デフォルトの名無しさん (スプッッ Sdda-Qcsg)
2017/10/10(火) 16:32:52.19ID:S8JfuHhfd12片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)
2017/10/10(火) 16:49:55.22ID:RmsAElXwd >>11
メンバー変数を増やすと、構造体のサイズが増大する。また、変数の追加する場所によっては、メンバーの相対的な位置が変化する可能性がある。
よって、その構造体のバイナリーインターフェースに依存するプログラムは死亡する可能性がある。
メンバー変数を増やすと、構造体のサイズが増大する。また、変数の追加する場所によっては、メンバーの相対的な位置が変化する可能性がある。
よって、その構造体のバイナリーインターフェースに依存するプログラムは死亡する可能性がある。
13片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)
2017/10/10(火) 17:03:33.96ID:RmsAElXwd 例えば、構造体データをバイナリーとしてファイルに出力していたら、サイズの増えた構造体では正しく読み取れない可能性がある。
構造体のメンバーの相対的位置が変化したら、古い構造体を使っている他のプログラムとは相性が悪くなる。
構造体のメンバーの相対的位置が変化したら、古い構造体を使っている他のプログラムとは相性が悪くなる。
14片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)
2017/10/10(火) 17:13:40.90ID:RmsAElXwd Windows APIでは、構造体をバージョン管理して、構造体のサイズで処理を変えたりしている。
15はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ae6f-XSap)
2017/10/10(火) 20:42:09.59ID:ISsQMV5w0 >>14
たまに半端な位置に「予約」とか説明されてるメンバがあったりするよね。
あれはバイナリサイズが変わると困るような理由があるからなんかなぁ。
まあ、たいした理由もなくやっちゃって互換性ゆえに変えられなくなったとかだろうけど。
たまに半端な位置に「予約」とか説明されてるメンバがあったりするよね。
あれはバイナリサイズが変わると困るような理由があるからなんかなぁ。
まあ、たいした理由もなくやっちゃって互換性ゆえに変えられなくなったとかだろうけど。
16片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)
2017/10/10(火) 22:10:42.42ID:RmsAElXwd17デフォルトの名無しさん (ドコグロ MM0d-xGYA)
2017/10/10(火) 22:48:32.16ID:muYZ22/tM 膝を撃ち抜く自由も良し悪しだな。
18デフォルトの名無しさん (ワッチョイ 6e8a-v8iM)
2017/10/10(火) 23:50:05.54ID:4EEs5NsC0 cURLを限りなくスペックの低い組み込み機器に入れようとしてるところで問題が起きました
・処理能力が低い
cURLをsystem関数でコマンドライン実行しようとすると、
呼び出す側の処理がCPU50%平均的に食っている+cURLもCPU喰うでまともに通信が出来ません
呼び出す側を落とすとcURLの処理速度は改善されるから
確定でCPUの食い合いが原因ってのもわかっている
対策として下記二つが出たのだけど
・呼び出す側をcURLが実行中はsleepにする
・cURLを実行ファイルで取り込むのではなくプログラミングベースで取り込む
上は常に通信をしているためにsleepを挟むことはできず
下のプログラミングベースについてもクロスコンパイルの問題でなぜか上手く行かない
これ以外の方法で対処方法ってありますか?
・処理能力が低い
cURLをsystem関数でコマンドライン実行しようとすると、
呼び出す側の処理がCPU50%平均的に食っている+cURLもCPU喰うでまともに通信が出来ません
呼び出す側を落とすとcURLの処理速度は改善されるから
確定でCPUの食い合いが原因ってのもわかっている
対策として下記二つが出たのだけど
・呼び出す側をcURLが実行中はsleepにする
・cURLを実行ファイルで取り込むのではなくプログラミングベースで取り込む
上は常に通信をしているためにsleepを挟むことはできず
下のプログラミングベースについてもクロスコンパイルの問題でなぜか上手く行かない
これ以外の方法で対処方法ってありますか?
19片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)
2017/10/10(火) 23:55:48.47ID:RmsAElXwd >>18
なぜかうまくいかないときのエラーメッセージは何だ?
なぜかうまくいかないときのエラーメッセージは何だ?
20片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)
2017/10/11(水) 00:02:11.03ID:qOpcxgfAd スペックが低いなら、そもそもマルチスレッドが未実装の可能性がある。
ならばsleepは無意味ということになるかも知れない。
ならばsleepは無意味ということになるかも知れない。
21片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)
2017/10/11(水) 00:06:14.17ID:qOpcxgfAd スペックが低すぎると、ANSI Cなどの規格に準拠してない恐れがある。
マシンとコンパイラーのマニュアルを確認して、準拠状況を確認しろ。
マシンとコンパイラーのマニュアルを確認して、準拠状況を確認しろ。
22はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ae6f-XSap)
2017/10/11(水) 02:03:02.75ID:xVJHolx5023はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ae6f-XSap)
2017/10/11(水) 02:03:35.16ID:xVJHolx50 してるってことかな。
(すまん、ミスって変なところで投稿してしもうた)
(すまん、ミスって変なところで投稿してしもうた)
24はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ae6f-XSap)
2017/10/11(水) 02:18:21.03ID:xVJHolx5025片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)
2017/10/11(水) 02:27:32.03ID:qOpcxgfAd http://www.ne.jp/asahi/hishidama/home/tech/c/exec.html#h_fork
forkを使えば、プロセスを分けることができるらしい。
forkを使えば、プロセスを分けることができるらしい。
26デフォルトの名無しさん (ワッチョイ 6e8a-v8iM)
2017/10/11(水) 06:22:13.21ID:Fgfx0EWk0 >>19
undefined 系統のエラーが沢山出る
arm-linux-gnueabi-gccを使ってコンパイルするとそうなる
ただgccだとエラーは起きない。ただi386系になるから実行環境で動かない
クロスコンパイルでcURLの単体がARMにできているから
.aファイルもARM担っていると思っているのだけどもなっていないのだろうか
objdump実行でARMって文字を確認したからARMだと思いたいとこではあるが…
エラー時の実行例
arm-linux-gnueabi-gcc test.c -o test.out -LXXXXXX -lcurl
通るけどi386系で実行環境で実行できない
gcc test.c -o test.out -LXXXXXX -lcurl
>>22
今の状況はPCA-PCBと通信がしたい。着目しているのはPCA
PCAがPCBと通信をする独自規格を元々持っていたのだけど、そのPCAが持っている独自規格を色々な規格をサポートしているcURLに置き換えるって話
今まではPCAの中のメインプロセス(CPUを一番食っているやつ)が通信を行っていただけだったから特に問題は発生しなかったけども
今回はメインプロセスがcURLをコマンドライン実行で呼び出す設計にしようとしている
そのためメインプロセスと別のcURLというプロセスが起動することになると考えている
なので、実装前にメインプロセスが生きている状態で直接コマンドプロンプトでcURLを実行し、動作検証したら通信自体はできるけど動作がとても遅いってとこ露に行きついた
調べてみると、メインプロセス・cURLともにCPUを食いあって速度が遅くなっていることも確認できて
どうやったら上手く実装できるだろうか…と悩んでいるところです
sleepに関しては実装して確認したわけではないけど、kill -stop PIDで実行したら
上手く行ったからsleepも上手く組み込めば対応できrのではないかと思ってる
>>25
forkでこれ以上増えるとさらに遅くなると思ってる…
undefined 系統のエラーが沢山出る
arm-linux-gnueabi-gccを使ってコンパイルするとそうなる
ただgccだとエラーは起きない。ただi386系になるから実行環境で動かない
クロスコンパイルでcURLの単体がARMにできているから
.aファイルもARM担っていると思っているのだけどもなっていないのだろうか
objdump実行でARMって文字を確認したからARMだと思いたいとこではあるが…
エラー時の実行例
arm-linux-gnueabi-gcc test.c -o test.out -LXXXXXX -lcurl
通るけどi386系で実行環境で実行できない
gcc test.c -o test.out -LXXXXXX -lcurl
>>22
今の状況はPCA-PCBと通信がしたい。着目しているのはPCA
PCAがPCBと通信をする独自規格を元々持っていたのだけど、そのPCAが持っている独自規格を色々な規格をサポートしているcURLに置き換えるって話
今まではPCAの中のメインプロセス(CPUを一番食っているやつ)が通信を行っていただけだったから特に問題は発生しなかったけども
今回はメインプロセスがcURLをコマンドライン実行で呼び出す設計にしようとしている
そのためメインプロセスと別のcURLというプロセスが起動することになると考えている
なので、実装前にメインプロセスが生きている状態で直接コマンドプロンプトでcURLを実行し、動作検証したら通信自体はできるけど動作がとても遅いってとこ露に行きついた
調べてみると、メインプロセス・cURLともにCPUを食いあって速度が遅くなっていることも確認できて
どうやったら上手く実装できるだろうか…と悩んでいるところです
sleepに関しては実装して確認したわけではないけど、kill -stop PIDで実行したら
上手く行ったからsleepも上手く組み込めば対応できrのではないかと思ってる
>>25
forkでこれ以上増えるとさらに遅くなると思ってる…
27デフォルトの名無しさん (ワッチョイ dabd-mvC5)
2017/10/11(水) 07:22:11.99ID:pdXZ47r80 メンバ変数が1個増えたぐらいで崩壊するのは
対外的にはカプセル化がうまくいっていない例、
内部的にはクラスのふるまいに激甚な影響を与えるような重大なメンバ変数の追加が
後から必要になるというのはマズーな設計の例、
対外的にはカプセル化がうまくいっていない例、
内部的にはクラスのふるまいに激甚な影響を与えるような重大なメンバ変数の追加が
後から必要になるというのはマズーな設計の例、
28デフォルトの名無しさん (ワッチョイ dabd-mvC5)
2017/10/11(水) 07:26:23.14ID:pdXZ47r80 フォークは低速な外部記憶からプログラムコードを新たにロードする手間が無い分高速な可能性が微レ存、
フォーク先とフォーク元でコードが共有されるためメモリ使用効率も多少UP、
あとサーバとクライアントの関係にある処理を(無理矢理)1本のプログラムとして書けるので
開発環境のリソース自体厳しく制限されていた昔はややうれしかったのかも知れん、、
フォーク先とフォーク元でコードが共有されるためメモリ使用効率も多少UP、
あとサーバとクライアントの関係にある処理を(無理矢理)1本のプログラムとして書けるので
開発環境のリソース自体厳しく制限されていた昔はややうれしかったのかも知れん、、
29デフォルトの名無しさん (ワッチョイ dabd-mvC5)
2017/10/11(水) 07:54:56.70ID:pdXZ47r80 ていうか根本的な疑問として
CPUが低速であるとわかっていながら応答速度の要求があるタスクの一環に
プロセスの起動を含めるのってどうなんじゃ…
(プロセスやスレッドの起動は低廉なOSでは一般にリアルタイム性が全く最強度で担保されない
応答速度の要求が見積もれていなかったんだとすると極めてご愁傷様な話…
CPUが低速であるとわかっていながら応答速度の要求があるタスクの一環に
プロセスの起動を含めるのってどうなんじゃ…
(プロセスやスレッドの起動は低廉なOSでは一般にリアルタイム性が全く最強度で担保されない
応答速度の要求が見積もれていなかったんだとすると極めてご愁傷様な話…
30デフォルトの名無しさん (ワッチョイ 0db3-XSap)
2017/10/11(水) 20:57:32.43ID:gwIT2xqO031デフォルトの名無しさん (ワッチョイ dabd-mvC5)
2017/10/11(水) 22:47:02.58ID:pdXZ47r80 つかだいたいやるべきこと:
1. プログラムを全般的に速くする
2. (今から可能ならば)要求元とハンドシェークして必要なだけ待ってもらうしくみにする
3. 間に合わせたい処理の優先度を間に合っている処理より上げる
(できればワーストケースでの応答時間の上限を担保する
>>20
sleepしてもスレッドコンテキストが切り替わらないOSというのはさすがに都市伝説なんじゃ…
1. プログラムを全般的に速くする
2. (今から可能ならば)要求元とハンドシェークして必要なだけ待ってもらうしくみにする
3. 間に合わせたい処理の優先度を間に合っている処理より上げる
(できればワーストケースでの応答時間の上限を担保する
>>20
sleepしてもスレッドコンテキストが切り替わらないOSというのはさすがに都市伝説なんじゃ…
32デフォルトの名無しさん (ワッチョイ 1334-7k5d)
2017/10/12(木) 05:46:12.53ID:4g8heiq80 ハンドシェイカー?時間の支配者?
33デフォルトの名無しさん (ワッチョイ 13bd-ZX73)
2017/10/12(木) 07:21:15.63ID:K6ixfN2F0 訂正
×: プログラムを全般的に速くする
●: プログラムのボトルネック箇所を探して速くする
この場合プロセスの起動がボトルネックなのはまちがいなさげなのでそこを速くなるように修正汁、
×: プログラムを全般的に速くする
●: プログラムのボトルネック箇所を探して速くする
この場合プロセスの起動がボトルネックなのはまちがいなさげなのでそこを速くなるように修正汁、
34デフォルトの名無しさん (ワッチョイ 0b87-zJYH)
2017/10/12(木) 09:09:50.72ID:VRKsQXfP0 汁?
35デフォルトの名無しさん (ワッチョイ 0b32-MWTH)
2017/10/12(木) 11:20:59.76ID:PQ1d1y2O0 汁=しろ
2ch地方の方言たい
2ch地方の方言たい
36デフォルトの名無しさん (ワッチョイ b3eb-B6a6)
2017/10/12(木) 12:07:42.25ID:GDIRJBKR0 汁を知らないのにも今時汁を見られたのにも戸惑う
37デフォルトの名無しさん (ワッチョイ 1183-B6a6)
2017/10/12(木) 13:46:59.50ID:CaCBhzNq0 cURLでググったらlibcurlってのがある。こっち使えばすべて解決する話じゃないの。
そもそもC++スレなのにlib使わずコマンド経由する理由が謎。
そもそもC++スレなのにlib使わずコマンド経由する理由が謎。
38デフォルトの名無しさん (ガックシ 06eb-HijE)
2017/10/12(木) 14:05:01.65ID:OhN0e73F6 ウンコの画像を生成するプログラムの作り方を教えて下さい
40デフォルトの名無しさん (ガックシ 06eb-HijE)
2017/10/12(木) 14:29:18.75ID:OhN0e73F6 お願いします!
41片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)
2017/10/12(木) 14:44:27.75ID:loBt1/dEd MMD、Blender、メタセコイアなど好きなヤツを使ってオブジェクトを三次元モデリングしろ。
ボーンを設定して、思ったとおりに変形できるようにしろ。
レンダリングして、画像として保存しろ。
ボーンを設定して、思ったとおりに変形できるようにしろ。
レンダリングして、画像として保存しろ。
42デフォルトの名無しさん (ガックシ 06eb-HijE)
2017/10/12(木) 14:45:58.16ID:OhN0e73F6 線を引いて多様なウンコ画像を生成するプログラムお願いします!
43片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)
2017/10/12(木) 14:49:53.72ID:loBt1/dEd 基本オブジェクトをいくつか作れ。
基本オブジェクトを変形し、組み合わせれば、求める画像がレンダリングできる。
重力とボーンを考慮すれば自然な形になる。
基本オブジェクトを変形し、組み合わせれば、求める画像がレンダリングできる。
重力とボーンを考慮すれば自然な形になる。
44デフォルトの名無しさん (ワッチョイ b3eb-qUyi)
2017/10/12(木) 14:52:00.26ID:y2YbOREJ0 AIがウンコ画像を識別できるなら、逆にウンコ画像を生成することもできるのではないか?
これを応用するとエロ画像を識別できるAIにエロ画像を生成させることもできるのでは?
これを応用するとエロ画像を識別できるAIにエロ画像を生成させることもできるのでは?
45片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)
2017/10/12(木) 16:00:49.56ID:Q2Fs2fOZd まずは、MMD、Blender、メタセコイアのどれかを選んでダウンロード&インストールしろ。
46デフォルトの名無しさん (ワッチョイ 99b3-BSx0)
2017/10/12(木) 19:02:41.71ID:eq5Al9lp0 >ボーンを設定して、思ったとおりに変形
要らんだろ・・・・w
アラレちゃんにつんつんでもさせるのかよ
要らんだろ・・・・w
アラレちゃんにつんつんでもさせるのかよ
47デフォルトの名無しさん (ワッチョイ fb8a-ECK6)
2017/10/12(木) 21:58:15.37ID:9n97WZ1N0 cURLの起動云々の話に答えてくれた人ありがとう
応答速度についてはめちゃくちゃ遅いってレベルにならなければ問題なく
プロセスを立ち上げるような処理を入れても問題ないとの判断
極端な話10秒で終わっていたのが20秒になりましたぐらいなら問題なく、これが600秒かかりますとかなら問題あった
実際にプロセスを立ち上げてみて処理させてみたけど
CPUの食い合いがなければこの問題は解決できていると考えている
処理についてsleep入れるのは無理そうってレスしたけども
ソースコードを追ってみたらpollなどではなくwhile&usleepでの待機が存在していて
CPU喰ってたからこいつをちゃんと制御すれば問題なさそうってなりました
考えてくれた人ありがとう
別案件なんだけど何か良い実装方法がないか相談させてほしい
応答速度についてはめちゃくちゃ遅いってレベルにならなければ問題なく
プロセスを立ち上げるような処理を入れても問題ないとの判断
極端な話10秒で終わっていたのが20秒になりましたぐらいなら問題なく、これが600秒かかりますとかなら問題あった
実際にプロセスを立ち上げてみて処理させてみたけど
CPUの食い合いがなければこの問題は解決できていると考えている
処理についてsleep入れるのは無理そうってレスしたけども
ソースコードを追ってみたらpollなどではなくwhile&usleepでの待機が存在していて
CPU喰ってたからこいつをちゃんと制御すれば問題なさそうってなりました
考えてくれた人ありがとう
別案件なんだけど何か良い実装方法がないか相談させてほしい
48デフォルトの名無しさん (ワッチョイ 8b80-hLkI)
2017/10/12(木) 22:19:04.32ID:BE/Y4M/40 >while&usleep
時間の掛かる、I/O で、busy wait する奴って、素人だろ
時間の掛かる、I/O で、busy wait する奴って、素人だろ
49デフォルトの名無しさん (ワッチョイ fb8a-ECK6)
2017/10/12(木) 22:24:29.13ID:9n97WZ1N0 1. PCA→PCBへのインストールで新規にcURLの実行形式ファイルを入れることになった
2. インストールが完了して再起動をしたら今後はcURLをsystem関数で実行して通信する
この状況下でダウングレードを試みようと考えた時に
3. PCA→PCBへのダウングレード(インストール)をcURLを用いてする
4. インストールが完了して再起動をしたら今後は独自プロトコルでの通信に戻る
こういう状況になった。
その時に、cURLを削除するタイミングが見付からなくて今困っている。
3を実行したときに判断しようとしたのだけどダウングレードだと判断するに至る材料がない。
ファイルを一個ずつ指定して送信して・・・の繰り返しだからリストにcURLがあるかないかも判断できずってなっている
2. インストールが完了して再起動をしたら今後はcURLをsystem関数で実行して通信する
この状況下でダウングレードを試みようと考えた時に
3. PCA→PCBへのダウングレード(インストール)をcURLを用いてする
4. インストールが完了して再起動をしたら今後は独自プロトコルでの通信に戻る
こういう状況になった。
その時に、cURLを削除するタイミングが見付からなくて今困っている。
3を実行したときに判断しようとしたのだけどダウングレードだと判断するに至る材料がない。
ファイルを一個ずつ指定して送信して・・・の繰り返しだからリストにcURLがあるかないかも判断できずってなっている
50デフォルトの名無しさん (ワッチョイ fb8a-ECK6)
2017/10/12(木) 22:25:11.03ID:9n97WZ1N0 書いてて気づいたけどこれC++の話じゃないって
もうスレチだと気づいたので無視してください
スレ汚しすまん
もうスレチだと気づいたので無視してください
スレ汚しすまん
51デフォルトの名無しさん (ワッチョイ 13bd-ZX73)
2017/10/13(金) 05:33:30.13ID:SZtyoNBi052デフォルトの名無しさん (ワッチョイ 0b3f-MWTH)
2017/10/13(金) 06:42:57.49ID:/fw1jTt60 usleepしてるんなら優先度関係ないだろ
誰だ変なこと言ってるのは
誰だ変なこと言ってるのは
53デフォルトの名無しさん (ワッチョイ 8b80-hLkI)
2017/10/13(金) 07:21:38.02ID:JHJOvcP00 ネット回線なんか、秒の単位だから、busy wait の範囲を超えてる
busy wait は、せいぜい、1ms 以下とか、
マイコン・リアルタイムOS での話
busy wait は、せいぜい、1ms 以下とか、
マイコン・リアルタイムOS での話
54デフォルトの名無しさん (ワッチョイ 0b3f-MWTH)
2017/10/13(金) 10:38:57.55ID:/fw1jTt60 もしかしてusleepがビジーウエイトで実装されているとでも思っているのか
55デフォルトの名無しさん (ワッチョイ 8b80-hLkI)
2017/10/13(金) 10:41:47.57ID:JHJOvcP00 CPU 使用率が、100% になってたんじゃないのか?
56デフォルトの名無しさん (ワッチョイ 13bd-ZX73)
2017/10/13(金) 22:27:44.28ID:SZtyoNBi0 >>52
あるわ;
優先度が高いスレッドにビジーループされるとそいつがsleepしてくれる間隔が
全スレッドの応答時間の下限になってしまう
優先度が低いスレッドのビジーループならsleepを待たずに割り込めるからそこまで甚大にならない
ただしI/O命令があってそいつが数百マイクロ棒かかると
より高いスレッドであってもワーストケースの応答時間が数百マイクロ棒に劣化する
あるわ;
優先度が高いスレッドにビジーループされるとそいつがsleepしてくれる間隔が
全スレッドの応答時間の下限になってしまう
優先度が低いスレッドのビジーループならsleepを待たずに割り込めるからそこまで甚大にならない
ただしI/O命令があってそいつが数百マイクロ棒かかると
より高いスレッドであってもワーストケースの応答時間が数百マイクロ棒に劣化する
57デフォルトの名無しさん (ワッチョイ 13bd-ZX73)
2017/10/13(金) 22:29:57.37ID:SZtyoNBi0 usleepは普通電気が無駄なのでhaltでもしてハードウェアに割り込みを待たせるが
マルチコア対応OSやったら気分次第でスピンロックでビージループすることもあるかも試練、
マルチコア対応OSやったら気分次第でスピンロックでビージループすることもあるかも試練、
58デフォルトの名無しさん (ワッチョイ 13bd-ZX73)
2017/10/13(金) 22:46:36.70ID:SZtyoNBi0 スマン
>usleepは普通電気が無駄なのでhaltでもして
というのは他に実行権待ちのスレッドが無かった場合の話ェ、
>usleepは普通電気が無駄なのでhaltでもして
というのは他に実行権待ちのスレッドが無かった場合の話ェ、
59デフォルトの名無しさん (ワッチョイ 8b80-hLkI)
2017/10/13(金) 23:08:17.12ID:JHJOvcP00 OS は、たぶん優先度を上下させるから、要注意。
優先度の低いスレッドでも、カーネルモードに入ると、優先度を上げるのじゃ?
優先度の低いスレッドのカーネルモードが、
優先度の高いスレッドのユーザーモードよりも、優先されるかも?
ただ、CPU 使用率が、100% と表示されていても、
本当は、CPUを使っていない場合もあるとか、聞いた事もある
優先度の低いスレッドでも、カーネルモードに入ると、優先度を上げるのじゃ?
優先度の低いスレッドのカーネルモードが、
優先度の高いスレッドのユーザーモードよりも、優先されるかも?
ただ、CPU 使用率が、100% と表示されていても、
本当は、CPUを使っていない場合もあるとか、聞いた事もある
60デフォルトの名無しさん (ワッチョイ 1904-Y3bU)
2017/10/14(土) 02:15:22.32ID:hYPsSpip0 ウニファイドコールシンタックスはまだか!?
6152 (ワッチョイ 0bf0-MWTH)
2017/10/14(土) 07:10:59.60ID:F19RwFTi062デフォルトの名無しさん (ワッチョイ 13bd-ZX73)
2017/10/14(土) 07:17:25.54ID:nAGT83AF063デフォルトの名無しさん (スプッッ Sd65-E+Ow)
2017/10/15(日) 15:18:57.35ID:6+blsnLXd ftpサーバを立てられないからプログラミングまで進まない悲しい
530エラーってなんでえええ
IIS使いにくい
530エラーってなんでえええ
IIS使いにくい
64デフォルトの名無しさん (ワッチョイ fb8a-ECK6)
2017/10/15(日) 15:51:56.38ID:NUNtAlCN0 俺もIISでFTPSサーバ立てられなくて困ってるわ
IIS思った以上に使いにくい
IISでオレオレ証明書を作成して
FTPS通信をcURLで確立したいだけなのに
本当にできるのだろうか
IIS思った以上に使いにくい
IISでオレオレ証明書を作成して
FTPS通信をcURLで確立したいだけなのに
本当にできるのだろうか
65デフォルトの名無しさん (ワッチョイ d3f9-QUVh)
2017/10/15(日) 20:46:54.60ID:jTAoV9hu0 >>63,64
まあそういう話は適切なスレに行ってしてくるといいぞ
まあそういう話は適切なスレに行ってしてくるといいぞ
66片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)
2017/10/15(日) 20:50:15.37ID:3VVV/TO4d セキュリティソフトやファイアウォールが通信の邪魔をしている場合があるから、気を付けな。
67デフォルトの名無しさん (ワッチョイ 138a-wUXQ)
2017/10/15(日) 21:16:20.68ID:TMBfPksM0 xamppでは出来ないんだっけ
68デフォルトの名無しさん (ワッチョイ 13d2-NIAW)
2017/10/15(日) 21:45:19.70ID:bPqYmEmS0 なんか難しい設定あったかな
SFTPできないならありそうだが
SFTPできないならありそうだが
69デフォルトの名無しさん (ワッチョイ d108-MWTH)
2017/10/15(日) 21:49:59.50ID:DZC0OlhV070デフォルトの名無しさん (ワッチョイ 1183-B6a6)
2017/10/15(日) 23:00:46.02ID:9R+c2v2L0 usleepの実装ってどんな感じ? どれくらいのμ秒の精度出んの?
ループ中に頻繁に読んでいいものなのか?
ループ中に頻繁に読んでいいものなのか?
71デフォルトの名無しさん (ワッチョイ 1904-Y3bU)
2017/10/15(日) 23:29:48.88ID:lsjR8/6b0 色々あるでしょ。
CPUが時計対応ならそっち見るだろうし、最悪ビジーループ。
不安ならchronoで寝るとかもあるぞ。
CPUが時計対応ならそっち見るだろうし、最悪ビジーループ。
不安ならchronoで寝るとかもあるぞ。
72デフォルトの名無しさん (ワッチョイ 1183-B6a6)
2017/10/15(日) 23:39:50.79ID:9R+c2v2L0 ググると最低4msとか出てくるな。MSみたいに最初からミリ秒単位にしとけば変な誤用されないものを。
73デフォルトの名無しさん (ワッチョイ 8be8-B6a6)
2017/10/16(月) 12:13:18.90ID:iBTaJQF10 ガベージコレクションがないのに、安全なオブジェクト指向プログラミングなんてできるんですか?
74デフォルトの名無しさん (ワッチョイ 197f-BSx0)
2017/10/16(月) 12:22:08.74ID:VYCnmYA70 デ、デストラクタがあるから
75デフォルトの名無しさん (ワッチョイ 1334-7k5d)
2017/10/16(月) 12:25:47.42ID:CHd6usgT0 ガーベージコレクションも含めて実装するのが真のC++グラマーやでアマチャン
76デフォルトの名無しさん (ドコグロ MM7d-6xzC)
2017/10/16(月) 12:40:47.29ID:Ou6sbmAQM GC付きスマポ、誰か作らんかね。
77デフォルトの名無しさん (ワッチョイ b3eb-89ZN)
2017/10/16(月) 14:41:14.09ID:cwpW48EL0 D言語「俺を使えばいいじゃない?」
78デフォルトの名無しさん (ブーイモ MM0d-Hl19)
2017/10/16(月) 20:49:20.76ID:EBMdtAZpM cli「もしかして俺の時代?」
79デフォルトの名無しさん (ドコグロ MM63-itUa)
2017/10/16(月) 20:54:28.42ID:D6Ozm2TBM >>76
誰が使うんだよ?
誰が使うんだよ?
80デフォルトの名無しさん (ワッチョイ 8b8a-qami)
2017/10/16(月) 22:26:22.71ID:uaY9uFi3081デフォルトの名無しさん (ワッチョイ 41a5-Yjam)
2017/10/16(月) 23:19:12.53ID:7Byc8Q4r0 GC要求が発生する前にプロセスが完了すりゃいいだけだろ
82デフォルトの名無しさん (ワッチョイ 1183-B6a6)
2017/10/17(火) 00:26:06.58ID:hVetZd8l0 最近は異常なほど高級言語志向が強いな。
83デフォルトの名無しさん (ドコグロ MM33-itUa)
2017/10/17(火) 06:56:31.57ID:BJIvhub9M >>81
それGC要らんだろ w
それGC要らんだろ w
84デフォルトの名無しさん (スプッッ Sd65-E+Ow)
2017/10/18(水) 06:24:43.21ID:syxw9nR/d スレッド間の変数の共有って
・pthread時に引数与える
・シングルトン
・グローバル変数
これ以外に何かあるかな?
・pthread時に引数与える
・シングルトン
・グローバル変数
これ以外に何かあるかな?
85デフォルトの名無しさん (ワッチョイ 8bab-EwbT)
2017/10/18(水) 08:44:17.01ID:qJuCX/Qy0 C++を最近学び始めた者なんですが
ファイルへの保存で質問があるんですが良いでしょうか
テキストに保存するのと、バイナリに保存するので
文字列を保存するとバイナリが僅かに小さくなるんですが
vectorを保存すると逆にバイナリのほうがサイズが大きくなるのは
普通のことなんでしょうか?
ファイルへの保存で質問があるんですが良いでしょうか
テキストに保存するのと、バイナリに保存するので
文字列を保存するとバイナリが僅かに小さくなるんですが
vectorを保存すると逆にバイナリのほうがサイズが大きくなるのは
普通のことなんでしょうか?
86デフォルトの名無しさん (ワッチョイ 8bab-EwbT)
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キロバイトに
配列を大きくすればするほどバイナリが大きくなってしまいます
テキストへは outputfile << data[i][j] << "\t";
バイナリへは outputfile.write((const char*)&data[i][j], sizeof(data[i][j]));
で書き込んでみてるのですが・・・・・・
100×100の配列を書き込むと
テキストが29キロバイト、バイナリが40キロバイトに
配列を大きくすればするほどバイナリが大きくなってしまいます
87デフォルトの名無しさん (ブーイモ MM5d-Hl19)
2017/10/18(水) 09:34:34.48ID:lDu9kW4oM >>84
同一アドレス空間である以上、アドレスさえ取れればどんな方法でも共有できると思うよ。
同一アドレス空間である以上、アドレスさえ取れればどんな方法でも共有できると思うよ。
88デフォルトの名無しさん (ワッチョイ 1334-7k5d)
2017/10/18(水) 09:40:31.86ID:+1GvmKA80 >>86
改行かな?
改行かな?
89デフォルトの名無しさん (ワッチョイ 138a-13gS)
2017/10/18(水) 09:41:02.33ID:MOIHjDBn0 >>86
どんなデータかによる。intを保存しようとしててデータが全部一桁ならバイナリの方が大きくなることもあるかもしれない。
まずキャストの使い方が間違ってるので、さっくり消してみよう。
次に読み取り部分を作って正常に読み取れるか見てみよう。
どんなデータかによる。intを保存しようとしててデータが全部一桁ならバイナリの方が大きくなることもあるかもしれない。
まずキャストの使い方が間違ってるので、さっくり消してみよう。
次に読み取り部分を作って正常に読み取れるか見てみよう。
90デフォルトの名無しさん (ワッチョイ 912d-0Wb2)
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かな
dataの型が解ればもう少し推測できるけど
char data[100][100][MAX_STR_LEN];
だとして
data[0][0] = "data\0qwe"; // "qwe"はゴミ
みたいにnull terminated後の不要なゴミも書き込んでるんじゃない?
バイナリエディタでバイナリファイル覗いてみれば解るかと
サイズから推測するとMAX_STR_LENは4かな
91デフォルトの名無しさん (ワッチョイ 138a-13gS)
2017/10/18(水) 09:57:25.60ID:MOIHjDBn0 あ、ofstreamのwriteって引数const char*なのか
ゴメン間違ってるってほどじゃないわ
せいぜいC++っぽくreinterpret_castに変えるくらいか
ゴメン間違ってるってほどじゃないわ
せいぜいC++っぽくreinterpret_castに変えるくらいか
92デフォルトの名無しさん (ブーイモ MM0d-qY8G)
2017/10/18(水) 11:54:38.42ID:hNmHHI30M93デフォルトの名無しさん (ワッチョイ 8bab-EwbT)
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というものでみてみると
数字と数字のあいだに間隔があいてるので
これがサイズが大きくなってる理由なのかと思うんですが
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なんだから、バイナリファイルは正しいと思うよ。
で、テキストも間違っているとは言いきれない。
例えば一桁の数字が多いなら、バイナリファイルより小さくなるよね?
サイズの違いはあって当然だと思うけど。
int型の100*100配列なら約40K byteなんだから、バイナリファイルは正しいと思うよ。
で、テキストも間違っているとは言いきれない。
例えば一桁の数字が多いなら、バイナリファイルより小さくなるよね?
サイズの違いはあって当然だと思うけど。
95デフォルトの名無しさん (ワッチョイ 8bab-EwbT)
2017/10/18(水) 13:00:53.38ID:qJuCX/Qy0 そういうものなのですか
ネット上に、バイナリに保存するとサイズが小さくなる
という話が多いのでそう思い込んでました
自分には関係無いような、複雑なデータを扱うと小さくなるのかな
ネット上に、バイナリに保存するとサイズが小さくなる
という話が多いのでそう思い込んでました
自分には関係無いような、複雑なデータを扱うと小さくなるのかな
96デフォルトの名無しさん (ワッチョイ 912d-0Wb2)
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の最大値を越えないこと)なってもサイズが一定で済む
余談ながら
バイナリで保存するならバイトオーダー(エンディアン)には注意しとかないと
万が一エンディアンの違うシステムで動作する必要があるときに死ねます
「rand() % 100」なら文字列にしたとき"0"(=0x30)から"99"(=0x3939)と2byteで収まり
"\t"を付けても 常に4byte(=sizeof(int) システム依存)より小さいですから
バイナリだと0を0x00000000, 99を0x63000000(リトルエンディアン)で保存してます
試しに「rand() % 100」を「10000」とか
"文字列にしたとき'\t'も含めて4文字を越える大きさ"にすれば
サイズが逆転するのが観察できるはずです
・扱う数字が小さいからテキストの方が短くて済んでる
・バイナリなら数字が大きく(当然intの最大値を越えないこと)なってもサイズが一定で済む
余談ながら
バイナリで保存するならバイトオーダー(エンディアン)には注意しとかないと
万が一エンディアンの違うシステムで動作する必要があるときに死ねます
97デフォルトの名無しさん (アークセー Sx45-jnAP)
2017/10/18(水) 16:31:39.68ID:8P8HMOssx 質問です。
とあるクラスのヘッダーに定義している文字列変数(CString)の文字列だけを変更し、ビルドしても、変更が反映されないのですがこれは仕様でしょうか?リビルドすると反映されます。
環境はVisualStudio2015 VC++です。
とあるクラスのヘッダーに定義している文字列変数(CString)の文字列だけを変更し、ビルドしても、変更が反映されないのですがこれは仕様でしょうか?リビルドすると反映されます。
環境はVisualStudio2015 VC++です。
9897 (アークセー Sx45-jnAP)
2017/10/18(水) 16:50:26.75ID:8P8HMOssx 自己レス。最小リビルドを無効にしたら解決しました
99デフォルトの名無しさん (ワッチョイ 41a5-PxAS)
2017/10/18(水) 20:07:45.40ID:3bYwz/rX0100デフォルトの名無しさん (ブーイモ MM71-v1IO)
2017/10/19(木) 12:49:02.40ID:LAmWAPnYM >>95
テキスト形式は、装飾次第で肥大化しやすいってだけだよ。
カンマやタブや改行も装飾の一部。
一桁の数字でも、スペース等で桁合わせしたら、それだけで肥大化するしね。
実際のところは、どういうフォーマットで出力してるか次第だけど。
最小桁で出力していて、rand 出力が正規分布に従うと考えれば、計算上約29k byteになるよ。
テキスト形式は、装飾次第で肥大化しやすいってだけだよ。
カンマやタブや改行も装飾の一部。
一桁の数字でも、スペース等で桁合わせしたら、それだけで肥大化するしね。
実際のところは、どういうフォーマットで出力してるか次第だけど。
最小桁で出力していて、rand 出力が正規分布に従うと考えれば、計算上約29k byteになるよ。
101デフォルトの名無しさん (ワッチョイ c183-bcII)
2017/10/19(木) 21:31:04.86ID:4jS9VIw90 XMLは糞。ゲイツは正しかった。
102デフォルトの名無しさん (ワッチョイ 5580-U5aN)
2017/10/21(土) 01:43:03.05ID:20SzWA3c0 無名名前空間内の変数にstaticがついたものを見かけました
このstaticにはどのような意味があるんでしょうか?それぞれ同じような意味だと思い込んでいたのですが・・・
このstaticにはどのような意味があるんでしょうか?それぞれ同じような意味だと思い込んでいたのですが・・・
103デフォルトの名無しさん (ワッチョイ a504-h3yZ)
2017/10/21(土) 03:20:47.47ID:NGOzoqth0 ユニファイドコールシンタックスまだー!?
104デフォルトの名無しさん (ワッチョイ 4d80-9ZeW)
2017/10/21(土) 05:36:54.09ID:NrRI2kzj0 >>103
要らねえよ
要らねえよ
105デフォルトの名無しさん (ワッチョイ a504-h3yZ)
2017/10/21(土) 05:39:44.45ID:NGOzoqth0106デフォルトの名無しさん (ワッチョイ a504-h3yZ)
2017/10/21(土) 05:49:37.85ID:NGOzoqth0 auto R = Handle.ConnectTCP(...).WaitConnect().SendData(...).EndSettion();
auto A = Array.Map(...).Reduse(...).get();
こんな感じのことができるようになる。上は適当。
入ってくれー。
auto A = Array.Map(...).Reduse(...).get();
こんな感じのことができるようになる。上は適当。
入ってくれー。
107デフォルトの名無しさん (ワッチョイ c183-bcII)
2017/10/21(土) 06:01:20.72ID:uavAERV80 糞化しようとする勢力に悪意があるな。
108デフォルトの名無しさん (ワッチョイ a504-h3yZ)
2017/10/21(土) 06:15:26.00ID:NGOzoqth0 一体何と戦っているんだ。
109デフォルトの名無しさん (ワッチョイ 4aeb-U5aN)
2017/10/21(土) 06:37:35.81ID:PyeytVxV0 EndSession(SendData(WaitConnect(ConnectTCP(Handle, ...)), ...));
を
Handle.ConnectTCP(...).WaitConnect().SendData(...).EndSession();
と書けるようにしたいと、そんな感じか?
元ネタの言語はなんだ?お兄さん怒らないから正直に申告しなさいw
を
Handle.ConnectTCP(...).WaitConnect().SendData(...).EndSession();
と書けるようにしたいと、そんな感じか?
元ネタの言語はなんだ?お兄さん怒らないから正直に申告しなさいw
110デフォルトの名無しさん (ワッチョイ 7ab3-RYXs)
2017/10/21(土) 07:18:06.90ID:fkuXV6f/0 まあSettionとか言う奴のレベルはこんなもんだ
111デフォルトの名無しさん (ワッチョイ 4d80-9ZeW)
2017/10/21(土) 07:40:07.85ID:NrRI2kzj0 >>109
そう書きたいなら最初からそういうAPIにすればいいだけなんだよな
そう書きたいなら最初からそういうAPIにすればいいだけなんだよな
112デフォルトの名無しさん (ワッチョイ c183-bcII)
2017/10/21(土) 07:54:28.52ID:uavAERV80 タイムアウトとか再試行とか異常系コードがてんこもりに入るんだからどうせ分解して書く。
そういう書き方をしたがる人は実務では一切コードを書いてない人だろう。
そういう書き方をしたがる人は実務では一切コードを書いてない人だろう。
113デフォルトの名無しさん (ワッチョイ 7abd-GnHq)
2017/10/21(土) 08:13:32.79ID:SZJ3Irjn0114デフォルトの名無しさん (ワッチョイ c183-bcII)
2017/10/21(土) 08:21:55.02ID:uavAERV80 おれはこういう悪意ある黒魔術師と戦っている。
115デフォルトの名無しさん (ワッチョイ 7ab3-RYXs)
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++;だと足されません
これはなぜでしょうか?
int型のポインタが指す値に1を足したいのですが
int *a+=1;と書くと足されるのですが
int *a++;だと足されません
これはなぜでしょうか?
117デフォルトの名無しさん (ワッチョイ a57f-0GSP)
2017/10/21(土) 09:37:24.91ID:IwpIepkb0 (*a)++;
*(a++);
下の方になってね
*(a++);
下の方になってね
118デフォルトの名無しさん (ワッチョイ 5504-gh9y)
2017/10/21(土) 09:42:55.21ID:K7BlTjWw0 なるほど!
カッコを付けてあげれば良いのですね
ありがとうございました。
カッコを付けてあげれば良いのですね
ありがとうございました。
119デフォルトの名無しさん (ワッチョイ 0aeb-bcII)
2017/10/21(土) 11:19:52.01ID:uaVA6cYp0 本質を理解しないと だめだぞ。
120デフォルトの名無しさん (ワッチョイ 4afb-+cZg)
2017/10/21(土) 12:50:25.52ID:bOloMtFq0 本質ってなんや?
121デフォルトの名無しさん (ワッチョイ 7a34-HQAI)
2017/10/21(土) 12:59:49.25ID:OLnfmZiv0 基本解ってないバカはC言語からやり直せ
C++なんぞ十年早いわ
C++なんぞ十年早いわ
122デフォルトの名無しさん (ワッチョイ daf9-3CFD)
2017/10/21(土) 13:50:17.85ID:RIH/f2PJ0 >>120
演算子には結合の優先順位があるからそれを理解しておけということかと。
演算子には結合の優先順位があるからそれを理解しておけということかと。
123デフォルトの名無しさん (ワッチョイ 7abd-GnHq)
2017/10/21(土) 13:53:20.33ID:SZJ3Irjn0 次はきっと評価順序に依存性がある複数の副作用を同じ式の中でやって泣く
124デフォルトの名無しさん (ワッチョイ fa12-bcII)
2017/10/21(土) 14:08:40.10ID:b0s0lkOv0 本質と口走る人間は信用しないようにしている
125デフォルトの名無しさん (ワッチョイ 5581-/wYC)
2017/10/21(土) 14:27:26.13ID:duVZds/m0 2chは信用しているのかw
126デフォルトの名無しさん (ワッチョイ ddb3-0MKJ)
2017/10/21(土) 14:35:07.96ID:PVB7G2Ex0 ここは5chだが。
127デフォルトの名無しさん (ワッチョイ 7ab3-RYXs)
2017/10/21(土) 14:50:08.83ID:fkuXV6f/0128デフォルトの名無しさん (ワッチョイ c5b3-PvcH)
2017/10/21(土) 19:41:59.47ID:I0YX3jVB0129デフォルトの名無しさん (ワッチョイ f9d6-1OZr)
2017/10/21(土) 19:48:36.37ID:LO7dvffl0130デフォルトの名無しさん (ワッチョイ a504-h3yZ)
2017/10/21(土) 20:09:03.62ID:NGOzoqth0 >>109
Dにもあるらしいけど、元ネタは没になったペーパー。
Dにもあるらしいけど、元ネタは没になったペーパー。
131デフォルトの名無しさん (ワッチョイ daf9-3CFD)
2017/10/21(土) 20:11:00.84ID:RIH/f2PJ0 >>129
初心者が質問でおかしな書き方したが、周りはその意味が分かって会話が通じているんだから、そんなつまらない攻撃的なツッコミする必要ないのでは?
初心者が質問でおかしな書き方したが、周りはその意味が分かって会話が通じているんだから、そんなつまらない攻撃的なツッコミする必要ないのでは?
132デフォルトの名無しさん (ワッチョイ f9d6-1OZr)
2017/10/21(土) 20:36:40.01ID:LO7dvffl0133デフォルトの名無しさん (ワッチョイ 867f-ms5P)
2017/10/21(土) 20:43:36.23ID:bW2z389o0 またすげえ病的なのが現れたな
134デフォルトの名無しさん (JP 0H85-+cZg)
2017/10/21(土) 21:07:43.36ID:MOgwtCLBH 妖精症状かは不明だが『周りはその意味が分かって会話が通じている』という決め付けは危険だし
なにより相手に対して何の説得力も無い
なにより相手に対して何の説得力も無い
135デフォルトの名無しさん (ワッチョイ 19a5-FNU/)
2017/10/21(土) 21:08:16.87ID:Hb3Ud/Wn0 ++*aでいいだろ
136デフォルトの名無しさん (ワッチョイ f9d6-1OZr)
2017/10/21(土) 21:37:44.98ID:LO7dvffl0137デフォルトの名無しさん (ワッチョイ daf9-3CFD)
2017/10/21(土) 21:46:20.40ID:RIH/f2PJ0 誰も変数の宣言を問題にしてないと思うよ。君を除いて。
138デフォルトの名無しさん (スップ Sd7a-s5BS)
2017/10/21(土) 21:47:40.59ID:vcAgy2myd 知恵袋とかでよく見る質問者に説教してる奴まんまだwww
139デフォルトの名無しさん (ワッチョイ 7ab3-RYXs)
2017/10/21(土) 22:22:59.67ID:fkuXV6f/0140デフォルトの名無しさん (ワッチョイ 0aeb-bcII)
2017/10/21(土) 22:29:56.31ID:uaVA6cYp0 俺が余計なこと言わなきゃよかったんだ
141デフォルトの名無しさん (ワッチョイ 4aeb-U5aN)
2017/10/21(土) 22:47:24.45ID:PyeytVxV0 よし、みんな大好きコンセプトの話しようぜw
142デフォルトの名無しさん (オッペケ Sr85-+cZg)
2017/10/21(土) 23:16:03.82ID:ov3vGz/Dr143名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ a127-1OZr)
2017/10/22(日) 07:02:44.44ID:dj2Vz85u0144名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ 0aeb-bcII)
2017/10/22(日) 10:10:22.77ID:ZvWpZB8L0 スレを私物化しててワロタwwwwwwwwwwwwwwwwwww
145名無しさん@そうだ選挙に行こう! Go to vote! (ドコグロ MMe2-hejz)
2017/10/22(日) 10:29:24.17ID:euCeLmcjM146名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ e5b3-+cZg)
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/0148名無しさん@そうだ選挙に行こう! 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人)はこれ以下の阿呆だ
#define a aa{nullptr}; aa
int *a+=1;
#undef a
#define aa a
おまえら(たぶん1人)はこれ以下の阿呆だ
149名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ 7a34-HQAI)
2017/10/22(日) 12:23:06.98ID:fUpU+dpH0 レベル低い手本だな
150名無しさん@そうだ選挙に行こう! Go to vote! (スプッッ Sd7a-7kQB)
2017/10/22(日) 19:28:43.25ID:O4jMcQm7d typedefとdefineの違いすらわかってないのが俺
define A BだとAをBとする
typedef B AだとAをBとする
こうなるだけ?
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だ
これからはusingだ
152名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ daf9-3CFD)
2017/10/22(日) 19:38:18.60ID:rLWliBun0 >>150
#defineはソースコードのテキストを字面だけで置き換えるだけ。
typedef相当のこと以外にも色々な使い方ができるが、トリッキーなことをして分かりにくくなったり弊害が大きいので、言語仕様が拡充された現在では、なるべく使用すべきでないという風潮になっている。
#defineはソースコードのテキストを字面だけで置き換えるだけ。
typedef相当のこと以外にも色々な使い方ができるが、トリッキーなことをして分かりにくくなったり弊害が大きいので、言語仕様が拡充された現在では、なるべく使用すべきでないという風潮になっている。
153名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ f9c3-6Gfg)
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;
とすることで短くできる
#define SIZE 50, 200
void SetSize(int w, int h)をSetSize(SIZE)って呼ぶことができる
typedefはtypedef std::vector<MyLonglongClassName> MyVector;
とすることで短くできる
154名無しさん@そうだ選挙に行こう! Go to vote! (スプッッ Sd7a-7kQB)
2017/10/22(日) 19:42:10.58ID:O4jMcQm7d155名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ daf9-3CFD)
2017/10/22(日) 19:49:02.84ID:rLWliBun0 typedefで導入した識別子の名称は、型の名前としてコンパイラが字句解析、意味解析する際に適切に扱ってくれるけど、defineの方は字面を置き換えただけだから文脈によっては意図した通りにならないケースがある。
具体例はすぐに思いつかない…
誰か詳しい人が書いてくれるかも。
具体例はすぐに思いつかない…
誰か詳しい人が書いてくれるかも。
156デフォルトの名無しさん (ワッチョイ 3aa2-0GSP)
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; }
#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はコンパイラの機能。
型に対してのみ別名を付ける事しか出来ないけど、ちゃんと型チェックが行われる。
#defineは、厳密にはコンパイラの機能では無いんだよね。
ただのテキスト置換なんで、様々なチェックが働かない。
置換後のテキストに対してコンパイルを行うから、エラーも難解になったりする。
対してtypedefはコンパイラの機能。
型に対してのみ別名を付ける事しか出来ないけど、ちゃんと型チェックが行われる。
158デフォルトの名無しさん (ワッチョイ 7abd-GnHq)
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::を削れるぐらいだと思う
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だろ
using hoge = int;
のusingだろ
160デフォルトの名無しさん (ワッチョイ c578-+Jsc)
2017/10/22(日) 21:50:12.47ID:DuSJV2Ke0 変数宣言に関してはC++03は苦行の極みだったな
161デフォルトの名無しさん (オッペケ Sr85-+cZg)
2017/10/22(日) 22:37:08.77ID:gV0xEv2nr typedef名が無いとintのデストラクターが呼べない
using T = int;
int{}.~T();
typedef名が無いと関数ポインターへの変換関数が書けない(たぶん)
using F = void ();
operator F *() {return nullptr;}
using T = int;
int{}.~T();
typedef名が無いと関数ポインターへの変換関数が書けない(たぶん)
using F = void ();
operator F *() {return nullptr;}
162デフォルトの名無しさん (オッペケ Sr85-+cZg)
2017/10/22(日) 22:44:21.85ID:gV0xEv2nr typedef名が無いと関数型をメンバーポインター型に変形させることができない
using MF = void () const;
MF class_type::* mp;
そして何より、関数内で#defineしたものは関数外に漏れる
using MF = void () const;
MF class_type::* mp;
そして何より、関数内で#defineしたものは関数外に漏れる
163デフォルトの名無しさん (ワッチョイ 7ab3-RYXs)
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) {
...
}
型推論でいいだろ
auto jug_array = new std::vector<std::vector<int> >(5000);
for(auto it = jug_array.begin(); it != jug_array.end(); ++it) {
...
}
164デフォルトの名無しさん (オッペケ Sr85-+cZg)
2017/10/23(月) 00:28:15.86ID:WKKpeTI2r >usingでは多分std::を削れるぐらいだと思う
↓
>型推論でいいだろ
これがアスペというやつだな
↓
>型推論でいいだろ
これがアスペというやつだな
165デフォルトの名無しさん (ワッチョイ 4d80-9ZeW)
2017/10/23(月) 00:38:49.98ID:a4CoBhRy0 >>164
俺も思ったからアスペだわ
俺も思ったからアスペだわ
166デフォルトの名無しさん (ワッチョイ 7a8a-Jp9u)
2017/10/23(月) 01:19:27.04ID:E0HRfOuJ0 >>164がアスペという可能性も微レ存
167デフォルトの名無しさん (ワッチョイ fa23-976O)
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
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
169デフォルトの名無しさん (ドコグロ MMe2-RYXs)
2017/10/23(月) 06:00:11.73ID:tsKHL/vaM170デフォルトの名無しさん (ワッチョイ 7abd-GnHq)
2017/10/23(月) 07:39:17.13ID:FnrJWB1+0 CPUはアスペルガー
アスペルガーはプログラミング対象としては正しい
アスペルガーはプログラミング対象としては正しい
171デフォルトの名無しさん (ワッチョイ d68a-AUSJ)
2017/10/23(月) 11:48:03.94ID:L0yyts890172デフォルトの名無しさん (ワッチョイ d68a-AUSJ)
2017/10/23(月) 11:49:59.55ID:L0yyts890 あっそうかジャヴァカコーダー上がりか
173デフォルトの名無しさん (ワッチョイ d68a-AUSJ)
2017/10/23(月) 12:28:15.79ID:L0yyts890 ヴァカ+auto→地獄
174デフォルトの名無しさん (ワッチョイ 4d80-9ZeW)
2017/10/23(月) 15:37:17.98ID:a4CoBhRy0175デフォルトの名無しさん (ワッチョイ 7abd-GnHq)
2017/10/23(月) 20:39:12.10ID:FnrJWB1+0 newはちょっと手が滑っただけ;
もちろんスマポとセットで無いとnewとか滅多に使わない
もちろんスマポとセットで無いとnewとか滅多に使わない
176デフォルトの名無しさん (ドコグロ MMb5-RYXs)
2017/10/23(月) 21:07:31.46ID:/BPh9WwQM auto知らなかった老害が暴れてるのか w
177デフォルトの名無しさん (ワッチョイ d68a-AUSJ)
2017/10/23(月) 22:09:17.50ID:L0yyts890178デフォルトの名無しさん (ワッチョイ cee7-LaKm)
2017/10/23(月) 22:27:44.44ID:D0YLsnUF0 C言語の知識があるんだけどC++も応用できる?
179デフォルトの名無しさん (ワッチョイ 163e-v1IO)
2017/10/23(月) 22:37:44.10ID:/pLbKGxJ0 できる!
180片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd9a-f2Bm)
2017/10/23(月) 22:38:51.33ID:aoVPN+Cqd >>178
まずはデストラクターの便利さを学んでね。
まずはデストラクターの便利さを学んでね。
181デフォルトの名無しさん (スップ Sd7a-7kQB)
2017/10/24(火) 00:14:32.80ID:HCv33Y/ud auto pointerのこと?
あれいつ見ても使うタイミングわかんないや
define typedefこたえてくれたひとありがとう
>>156のAのやつがなぜこうなるのか頭のなかでさっぱり理解できんけどがんばる
あれいつ見ても使うタイミングわかんないや
define typedefこたえてくれたひとありがとう
>>156のAのやつがなぜこうなるのか頭のなかでさっぱり理解できんけどがんばる
182デフォルトの名無しさん (ワッチョイ a504-h3yZ)
2017/10/24(火) 01:23:29.92ID:6ceRFBNE0 オートポインターは廃止になった。
スマポ使おう。
スマポ使おう。
183デフォルトの名無しさん (ワッチョイ daf9-3CFD)
2017/10/24(火) 01:26:01.20ID:grT3veHx0184デフォルトの名無しさん (ワッチョイ ddb3-0MKJ)
2017/10/24(火) 03:02:15.07ID:Od9TZRLJ0 ポインタは型なのだろうか。
185デフォルトの名無しさん (ワッチョイ c183-bcII)
2017/10/24(火) 03:19:16.91ID:F7KgZr1H0 コードの書かない奴ほどC++をやっつけスクリプト言語化しようとする。
auto馬鹿どもを駆逐せよ。
auto馬鹿どもを駆逐せよ。
186デフォルトの名無しさん (ドコグロ MM99-RYXs)
2017/10/24(火) 07:17:33.32ID:4VNEc1KXM187デフォルトの名無しさん (ワッチョイ d68a-AUSJ)
2017/10/24(火) 08:02:35.16ID:/FFLOfov0 ヴァカが精一杯頑張って吐き出したクッサイ唾がこれ↑
188デフォルトの名無しさん (ドコグロ MM99-RYXs)
2017/10/24(火) 08:42:18.81ID:4VNEc1KXM > 動的型付けと型推論の違いも理解できない老害
は否定できないんだ w
は否定できないんだ w
189デフォルトの名無しさん (スプッッ Sd7a-6gne)
2017/10/24(火) 10:20:18.72ID:kyzMRAwBd >>186
autoのことをanyやvariantと勘違いしてるとか?
autoのことをanyやvariantと勘違いしてるとか?
190デフォルトの名無しさん (ワッチョイ d68a-AUSJ)
2017/10/24(火) 12:37:21.38ID:/FFLOfov0 そんな勘違いしてるとなんで思い込むか全く分からんわ
まあヴァカの考えることなんて分かったら大変だけど
まあヴァカの考えることなんて分かったら大変だけど
191デフォルトの名無しさん (ワッチョイ d68a-AUSJ)
2017/10/24(火) 12:42:47.65ID:/FFLOfov0 こいつの脳内には「動的型付けと型推論の違いも理解できない老害 」
とやらが住んでいてるんだろうな。
それ少し前のお前自身の姿だからゲラゲラ
とやらが住んでいてるんだろうな。
それ少し前のお前自身の姿だからゲラゲラ
192デフォルトの名無しさん (ワッチョイ ddb3-0MKJ)
2017/10/24(火) 12:43:32.89ID:Od9TZRLJ0 世の中バカばかり、自分だけがよくわかっている。
ってことでしょうか。
ってことでしょうか。
193デフォルトの名無しさん (ワッチョイ 0aeb-Q7KS)
2017/10/24(火) 16:53:21.77ID:RCW9qhL70 こいつプログラミング板荒らしまわってる某コテハンと同じ臭いがする
194デフォルトの名無しさん (ドコグロ MMe2-hejz)
2017/10/24(火) 17:21:11.13ID:xOeS6ucYM まぁ、もうそろそろNG設定かね。俺は設定した。
大した技術持って無さそうだし。
大した技術持って無さそうだし。
195片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd9a-f2Bm)
2017/10/24(火) 17:41:23.62ID:+CxSIN/Vd 2ちゃんねるのコテハンにはろくなヤツがいないって、戦後生まれのじっちゃんが言っていた。
196片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd9a-f2Bm)
2017/10/24(火) 18:40:29.57ID:+CxSIN/Vd そろそろ仕事やめて、めしにしようぜ
カレーライスとお子様ランチのどっちがいい?
カレーライスとお子様ランチのどっちがいい?
197片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd9a-f2Bm)
2017/10/24(火) 18:53:07.38ID:+CxSIN/Vd ギロッポンでめしにすっべ
今日は俺のおごりだ
今日は俺のおごりだ
198デフォルトの名無しさん (ドコグロ MM99-RYXs)
2017/10/24(火) 20:33:42.55ID:4VNEc1KXM199デフォルトの名無しさん (ワッチョイ 7abd-GnHq)
2017/10/24(火) 20:44:02.68ID:yRLde5ii0200デフォルトの名無しさん (オッペケ Sr85-+cZg)
2017/10/24(火) 20:53:50.44ID:YuTKkjXTr auto jug_array = std::vector<std::vector<int>>(5000);
という書き方は2012年ごろにさっちんとメイヤーが広めようとしていた
C++17でこの書き方が広まったら>>185はもう出家するしかない
という書き方は2012年ごろにさっちんとメイヤーが広めようとしていた
C++17でこの書き方が広まったら>>185はもう出家するしかない
201デフォルトの名無しさん (ワッチョイ 0aeb-bcII)
2017/10/24(火) 20:55:00.66ID:FyKtaGrZ0 autoに関して応答なさそうですね
202デフォルトの名無しさん (オッペケ Sr85-+cZg)
2017/10/24(火) 20:56:05.26ID:YuTKkjXTr 昭和のアロマが強烈
203デフォルトの名無しさん (ワッチョイ 7abd-GnHq)
2017/10/24(火) 21:14:49.95ID:yRLde5ii0 良く考えずに書いたが良く考えたら普通は
std::vector<std::vector<int>> jug_array(5000);
と書くところだったなあ…
std::vector<std::vector<int>> jug_array(5000);
と書くところだったなあ…
204デフォルトの名無しさん (ワッチョイ bab3-QZhF)
2017/10/24(火) 21:50:21.25ID:018tmIsf0 UWPスレとか毛色が違うみたいだし、C++/CLIスレとか落ちてるんでここで教えて下さい
VS2017のC++/WinRTで新しいプロジェクトを作成
(Visual C++ → Windowsユニバーサル → 単体テストアプリ)
実行すると TEST APP 、Unit Test 、Tests Running の3つの文字が出てくるウィンドウが出てきます
しかし、UnitTestApp.xaml の Application要素の中身は、空っぽです
新しくブランクページを作ると、Page要素になって、デザインできる上にボタン等を貼り付けると
Page要素の中に要素が作られます
Application要素の中身は一体どこにあるのでしょう?
VS2017のC++/WinRTで新しいプロジェクトを作成
(Visual C++ → Windowsユニバーサル → 単体テストアプリ)
実行すると TEST APP 、Unit Test 、Tests Running の3つの文字が出てくるウィンドウが出てきます
しかし、UnitTestApp.xaml の Application要素の中身は、空っぽです
新しくブランクページを作ると、Page要素になって、デザインできる上にボタン等を貼り付けると
Page要素の中に要素が作られます
Application要素の中身は一体どこにあるのでしょう?
205デフォルトの名無しさん (ワッチョイ d681-wEwp)
2017/10/24(火) 22:02:36.84ID:hjkLVxi70206デフォルトの名無しさん (ワッチョイ bab3-QZhF)
2017/10/24(火) 22:15:38.33ID:018tmIsf0207デフォルトの名無しさん (ワッチョイ e5b3-2TAP)
2017/10/25(水) 18:49:27.48ID:qOXOqU1a0 c++でダックタイピングのようなものをやりたいです。
void型で受け取ったクラスを自前で用意したインターフェースクラスにキャストして関数を呼び出すって可能ですか?
やり方や参考になるサイトなどあれば教えて欲しいです。
templateでの型消去はコンパイル段階でクラスを知らないせいで弾かれてしまっているようです……
void型で受け取ったクラスを自前で用意したインターフェースクラスにキャストして関数を呼び出すって可能ですか?
やり方や参考になるサイトなどあれば教えて欲しいです。
templateでの型消去はコンパイル段階でクラスを知らないせいで弾かれてしまっているようです……
208デフォルトの名無しさん (ワッチョイ 7a8a-WXi2)
2017/10/25(水) 19:02:03.57ID:16XMr+7o0 vfptrの実装状況によるから、未知の抽象クラスのメソッドって
呼べないと思うんだが
呼べないと思うんだが
209デフォルトの名無しさん (ワッチョイ e5b3-2TAP)
2017/10/25(水) 19:20:07.39ID:qOXOqU1a0210デフォルトの名無しさん (ワッチョイ a504-7unl)
2017/10/25(水) 19:21:19.49ID:Srjg9fpL0211デフォルトの名無しさん (ワッチョイ a504-7unl)
2017/10/25(水) 19:28:12.28ID:Srjg9fpL0212デフォルトの名無しさん (ワッチョイ e5b3-2TAP)
2017/10/25(水) 19:38:49.97ID:qOXOqU1a0213デフォルトの名無しさん (ブーイモ MM71-v1IO)
2017/10/25(水) 20:09:22.57ID:r5sy60NsM おおっと、auto の話題には注意しないとな。
214デフォルトの名無しさん (オッペケ Sr85-+cZg)
2017/10/25(水) 20:51:07.58ID:t7oUy/d3r 昭和生まれの老害はそろそろ引退すべき
215デフォルトの名無しさん (ブーイモ MM71-VTYL)
2017/10/25(水) 20:55:21.88ID:SS3Ej639M 64年生まれの妹が不憫でならない
216デフォルトの名無しさん (スプッッ Sd7a-7kQB)
2017/10/25(水) 22:31:10.63ID:Nep/tIRvd .outからsoファイル呼び出す形を作ってるのだけど
変数の共有するのってグローバル変数にするのとシングルとんみたいなの作る以外にある?
関数の引数にはできない状態だと
変数の共有するのってグローバル変数にするのとシングルとんみたいなの作る以外にある?
関数の引数にはできない状態だと
217デフォルトの名無しさん (ワッチョイ 6b3e-gj0X)
2017/10/26(木) 01:08:27.67ID:KrANDw+50218デフォルトの名無しさん (ワッチョイ e983-nu9H)
2017/10/26(木) 01:17:12.83ID:SQPezUK20219デフォルトの名無しさん (ワッチョイ d178-4HSd)
2017/10/26(木) 02:08:33.19ID:s0ODk43E0 イッツautoマーチック
220デフォルトの名無しさん (ワッチョイ 1323-Lz9C)
2017/10/26(木) 03:38:24.52ID:H69oM85Y0221デフォルトの名無しさん (ワッチョイ 6b3e-gj0X)
2017/10/26(木) 08:42:36.44ID:KrANDw+50 >>219
まんまやん
まんまやん
222デフォルトの名無しさん (ワッチョイ 6b3e-gj0X)
2017/10/26(木) 08:43:28.94ID:KrANDw+50 >>220
ああ、確かに環境変数も使うね。
ああ、確かに環境変数も使うね。
223デフォルトの名無しさん (ササクッテロロ Sp9d-Ol9m)
2017/10/26(木) 14:14:49.39ID:yHns7wn+p >>218
パッケージソフトやゲームはガン無視か
パッケージソフトやゲームはガン無視か
224デフォルトの名無しさん (スプッッ Sd73-Gmo/)
2017/10/26(木) 14:32:13.77ID:3HeaIUwTd OSと組み込みとドライバって特権階級かなんかなの?
225デフォルトの名無しさん (アウアウカー Saed-UWC9)
2017/10/26(木) 14:59:42.90ID:97gM9QaUa >>218がその世界しか知らない(それ以外は俺にはかんけーない)ということにじゃないかな
226デフォルトの名無しさん (ワッチョイ 93b3-FaL7)
2017/10/26(木) 16:12:23.15ID:fpqT055X0 OS内部とかドライバとか、位置によってはメモリ確保の方法変わってくるし
組み込みで動的にメモリ確保とか怖くってやってらんねーとかじゃい?
静的か自動変数にインスタンスの実体置くなら一応なんとかなるんだろうけど・・・
いや、静的だとコンストラクタがくっそ面倒か? auto とか生きてくるのって、
大抵ばかすかコンテナに要素しこたま抱える様な用途だしな
組み込みで動的にメモリ確保とか怖くってやってらんねーとかじゃい?
静的か自動変数にインスタンスの実体置くなら一応なんとかなるんだろうけど・・・
いや、静的だとコンストラクタがくっそ面倒か? auto とか生きてくるのって、
大抵ばかすかコンテナに要素しこたま抱える様な用途だしな
227223 (ワッチョイ 11b3-20SA)
2017/10/26(木) 16:48:19.15ID:sfpBhfHr0 いやautoの議論にケチつけたつもりは無いよ(俺も滅多にauto使わんし
C++の実用される現場といえばOS、組み込み、ドライバくらいしか挙げない人が多いから釘刺したかっただけ
C++の実用される現場といえばOS、組み込み、ドライバくらいしか挙げない人が多いから釘刺したかっただけ
228デフォルトの名無しさん (ワッチョイ 917f-20SA)
2017/10/26(木) 17:11:31.86ID:kUEk6KjE0 auto使わないとか頭固すぎ
使えるところは全てautoだわ
使えるところは全てautoだわ
229デフォルトの名無しさん (ワッチョイ 1323-Lz9C)
2017/10/26(木) 17:59:27.25ID:obzhKUOY0 単なるシンタックスシュガーでなんのオーバーヘッドや副作用があるわけじゃ無いしな
230デフォルトの名無しさん (ワッチョイ 69b3-20SA)
2017/10/26(木) 18:40:54.94ID:se7vIA1E0 auto下痢症
231デフォルトの名無しさん (ワッチョイ eb8a-1LOm)
2017/10/26(木) 18:55:08.38ID:EF3aiwNW0 autoネタ大人気だな
俺もiteratorなんかじゃ迷わずauto使うけど
ポインタすらちゃんと理解してないような奴が無闇にauto使ってるのを見るとね
俺もiteratorなんかじゃ迷わずauto使うけど
ポインタすらちゃんと理解してないような奴が無闇にauto使ってるのを見るとね
232デフォルトの名無しさん (ワッチョイ 0beb-nu9H)
2017/10/26(木) 18:57:53.27ID:KmwbyHDC0 それ以上autoの話をするのはアウトだぞ
233デフォルトの名無しさん (ワッチョイ 69b3-20SA)
2017/10/26(木) 19:55:30.03ID:se7vIA1E0 おぉっと
234デフォルトの名無しさん (ワッチョイ 9193-cGPg)
2017/10/26(木) 20:20:21.90ID:8UQnYlEC0 同じ話題ばかりで食傷気味、もう吐きそう。
…というこの書き込みも同系ネタで済まぬ。
…というこの書き込みも同系ネタで済まぬ。
235デフォルトの名無しさん (ドコグロ MM3d-DDuF)
2017/10/26(木) 22:27:19.25ID:oyaJ8gC3M236片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/26(木) 22:29:12.27ID:LcK6lNJBd237デフォルトの名無しさん (ワッチョイ ebe8-nu9H)
2017/10/26(木) 22:31:49.27ID:6866r+hk0 嘔吐嘔吐、うるせーなぁ(´・ω・`)
238デフォルトの名無しさん (ワッチョイ 6b5b-OCcV)
2017/10/27(金) 04:04:41.73ID:lyx9X4ms0 >>228
同感
同感
240デフォルトの名無しさん (スップ Sd73-Gmo/)
2017/10/27(金) 08:33:50.52ID:beF6mKBOd C++使わないとか頭固すぎ
使えるところは全部C++だわ
使えるところは全部C++だわ
241デフォルトの名無しさん (ワッチョイ 1323-Lz9C)
2017/10/27(金) 08:39:18.11ID:2A0a9mBA0 単なるシンタックスシュガーでオーバーヘッドとか副作用無いしねw
242デフォルトの名無しさん (ワッチョイ 1323-Lz9C)
2017/10/27(金) 08:39:47.11ID:2A0a9mBA0 いやテンプレートは違うか
244デフォルトの名無しさん (ワッチョイ e983-nu9H)
2017/10/27(金) 09:37:02.86ID:EP/R3fy90 ID:2A0a9mBA0 ←こういう馬鹿が本当にC++使ってるとは思えない。無職だろう。
245デフォルトの名無しさん (ワンミングク MM53-9Hsu)
2017/10/27(金) 09:50:50.86ID:+sOx5VXfM auto絶対使わないマンってややこしい型も、全部手で書いてるの?
ET使うときとかどうしてんだろ。
ET使うときとかどうしてんだろ。
246デフォルトの名無しさん (スプッッ Sd73-Lz9C)
2017/10/27(金) 10:00:22.45ID:tbT2n0brd テンプレートを除いた部分は単なるシンタックスシュガーだよ?
o->vftbl->f(o, a) と書こうが o->f(a) と書こうが何の違いもない。
テンプレートはチューリングマシンとしての計算能力があるから別だけど。
o->vftbl->f(o, a) と書こうが o->f(a) と書こうが何の違いもない。
テンプレートはチューリングマシンとしての計算能力があるから別だけど。
247デフォルトの名無しさん (ワッチョイ 11b3-20SA)
2017/10/27(金) 10:25:02.18ID:n3hllmLr0 >>245
ET使う時って評価するときか?
auto a = b + c * d;
これやるとautoの型は式テンプレートで、評価が起きないから困ったことになるぞ
(まだ評価せずに組み合わせる場合は逆にautoが便利だけど)
ET作るときや実装時は確かに型がややこしいけど、普通returnの一文で終わるから
return {うんたらかんたら};
で済むと思う
あと、ET周りの関数の宣言時をautoでやってしまうと、実装完了まで使用できないというのが足かせになると思うぞ
ET使う時って評価するときか?
auto a = b + c * d;
これやるとautoの型は式テンプレートで、評価が起きないから困ったことになるぞ
(まだ評価せずに組み合わせる場合は逆にautoが便利だけど)
ET作るときや実装時は確かに型がややこしいけど、普通returnの一文で終わるから
return {うんたらかんたら};
で済むと思う
あと、ET周りの関数の宣言時をautoでやってしまうと、実装完了まで使用できないというのが足かせになると思うぞ
248デフォルトの名無しさん (ワッチョイ 13cf-ZNW+)
2017/10/27(金) 11:54:16.72ID:2++1MvhW0 auto使うのって例えば
template <class U, class V>
auto func(U& a, V& b) -> decltype(a + b);
みたいに戻り値の型が簡単に推測しにくい時に使ってるけどな
template <class U, class V>
auto func(U& a, V& b) -> decltype(a + b);
みたいに戻り値の型が簡単に推測しにくい時に使ってるけどな
249デフォルトの名無しさん (ワッチョイ ebe8-O+EC)
2017/10/27(金) 19:49:19.03ID:+sWf4zsJ0 auto LocalFunc = [&]() { ... };
250デフォルトの名無しさん (ブーイモ MMeb-gj0X)
2017/10/27(金) 22:31:31.38ID:67YjQzLBM251デフォルトの名無しさん (ワッチョイ 13e7-20SA)
2017/10/27(金) 22:53:59.94ID:cIkV9qHA0 同じだろう
252デフォルトの名無しさん (ワッチョイ 93b3-FaL7)
2017/10/28(土) 01:40:27.36ID:rDr3prXm0 mapみたいな複数行にまたがるようなのを
for( auto const & r: hoge ){}
とかにまとめる用途にしか怖くて使えんな
意図しない型になってたけどたまたまコンパイルに通ってたとか
後で仕様変更とか根元の hoge 書き換え後にたまたまコンパイルに通ってたりとかで
期待したメソッドの動作にならなかったりとかされるとハマりそうで怖い
for( auto const & r: hoge ){}
とかにまとめる用途にしか怖くて使えんな
意図しない型になってたけどたまたまコンパイルに通ってたとか
後で仕様変更とか根元の hoge 書き換え後にたまたまコンパイルに通ってたりとかで
期待したメソッドの動作にならなかったりとかされるとハマりそうで怖い
253デフォルトの名無しさん (ワッチョイ a180-aATY)
2017/10/28(土) 02:17:51.25ID:pC+TnRxI0 >>252
暗黙の型変換乱用しないかぎりそんな事ならんと思うが
暗黙の型変換乱用しないかぎりそんな事ならんと思うが
254デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/28(土) 08:28:41.62ID:Jnrw/MWj0 テクノロジーに善悪は無い
255デフォルトの名無しさん (ワッチョイ 93b3-FaL7)
2017/10/28(土) 08:44:41.02ID:rDr3prXm0 >>253
暗黙の云々とかoperator=とかが怖いってだけ
それに後から読み返した時、どんな戻り値が欲しかったのかとか
autoだとわかり辛いって事がままあるし、autoはなるべくあちこちに散乱させたくない
.NET方面のvarとかも気持ち悪いったらありゃしない・・・
暗黙の云々とかoperator=とかが怖いってだけ
それに後から読み返した時、どんな戻り値が欲しかったのかとか
autoだとわかり辛いって事がままあるし、autoはなるべくあちこちに散乱させたくない
.NET方面のvarとかも気持ち悪いったらありゃしない・・・
256デフォルトの名無しさん (スップ Sd73-0RRx)
2017/10/28(土) 08:56:43.01ID:JVsxHO5Xd autoの数々の利点のほうが大きいからどの言語でも型推論は基本になってきてるな
メイヤーズも言ってるしマイクロソフトも推奨してるし
メイヤーズも言ってるしマイクロソフトも推奨してるし
257デフォルトの名無しさん (ワッチョイ 6b15-OCcV)
2017/10/28(土) 09:55:15.82ID:QoaQu2To0 autoはどのように推定されるかを理解して使うもので、
断じてバカ用のヘルパーではない
バカ自身はそれがわからないから変な杞憂に陥るってだけ
断じてバカ用のヘルパーではない
バカ自身はそれがわからないから変な杞憂に陥るってだけ
258デフォルトの名無しさん (ワッチョイ 33eb-Eec1)
2017/10/28(土) 11:02:25.42ID:J8kLZQh+0 バカだけどIDEさんが、IDEさんさえいてくれれば大丈夫だ問題ない
259デフォルトの名無しさん (ワッチョイ eb8a-1LOm)
2017/10/28(土) 12:14:14.53ID:BDtptoiy0 初心者はまずauto使わずにプログラミング出来るようになってからにした方がいいね
260デフォルトの名無しさん (ワッチョイ 9193-cGPg)
2017/10/28(土) 17:38:09.89ID:VIxhg0oq0 auto使わずにコンパイラの警告レベルを最高、警告は即エラーって設定にして
テンプレートライブラリ使ったテストプログラムを書いてみると
autoのありがた味が分かると思う。
ループの制御変数の型がえらいことになったりするからな。
いわんやイテレータをや。
テンプレートライブラリ使ったテストプログラムを書いてみると
autoのありがた味が分かると思う。
ループの制御変数の型がえらいことになったりするからな。
いわんやイテレータをや。
261デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/28(土) 22:00:09.12ID:Jnrw/MWj0 例えば
Bar x;
auto z = x;
としたときに、zはの型は必ずBarになってBarの基底クラスになったりしないの?
Bar x;
auto z = x;
としたときに、zはの型は必ずBarになってBarの基底クラスになったりしないの?
263デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/28(土) 22:03:17.64ID:Jnrw/MWj0 Barの基底クラスがFooだとして、
実はBarはコピコンがprivateでなぜかoperator Foo()だけがpublicで定義されているかもしれない
かもしれない運転、
実はBarはコピコンがprivateでなぜかoperator Foo()だけがpublicで定義されているかもしれない
かもしれない運転、
264デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/28(土) 22:11:30.59ID:Jnrw/MWj0 あるいは
class Foo {
void assign(const &Foo) { ... } // (A)
};
class Bar : public Foo {
void assign(const &Foo) { ... } // (B)
};
Foo x1, x2;
Bar y;
auto z = x1;
z.assign(x2); // (C)
y = z;
とかなときに(C)で呼ばれるassign()はどっち?
class Foo {
void assign(const &Foo) { ... } // (A)
};
class Bar : public Foo {
void assign(const &Foo) { ... } // (B)
};
Foo x1, x2;
Bar y;
auto z = x1;
z.assign(x2); // (C)
y = z;
とかなときに(C)で呼ばれるassign()はどっち?
266片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/28(土) 22:16:47.80ID:TWx2GtJid 参照なしのautoで代入だから、この場合は同じ型でコピーだね。メソッドは仮想関数でもないから、同じクラスのメソッドが呼ばれるはずだ。
267デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/28(土) 22:57:04.67ID:Jnrw/MWj0 C++で起き得るBarとFooのパターン全てについてテストケースを考えるのは無理ゲーすぐる、
auto儲はどのようにして有限の人生と無限に近い(ときに想像を絶する結果をもたらす)C++の自由度との折り合いを付けているのであろうか…
auto儲はどのようにして有限の人生と無限に近い(ときに想像を絶する結果をもたらす)C++の自由度との折り合いを付けているのであろうか…
268片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/28(土) 23:02:38.36ID:TWx2GtJid かしこいIDE使ってるなら、ビルドしたらその場でautoの型がわかるはず。スマートに行こうぜ、スマートに。
269デフォルトの名無しさん (オッペケ Sr9d-SZnS)
2017/10/28(土) 23:49:55.51ID:n2BUqhCar struct S {};
using Bar = S const;
Bar x;
auto z = x;
必ずしも同じ型ではないな
using Bar = S const;
Bar x;
auto z = x;
必ずしも同じ型ではないな
270デフォルトの名無しさん (ワッチョイ a180-aATY)
2017/10/29(日) 01:18:54.15ID:jdBIz2nU0271デフォルトの名無しさん (ワッチョイ e983-nu9H)
2017/10/29(日) 05:32:17.05ID:0yKrkLYC0 大量のC++のコードを読み、大量のC++を書いてきた人は今更シンタックスを変えようとは思わない。
碌にコードを読んだことがない、書かない人が文法を変えたがるのだ。
外国人の日本語入門者が「は」と「が」が難しいからautoにしろ、どっちの意味かは読む人、聞く人が考えろと言ってるうなもの。
ひらがなとカタカナを統一しろとかね。日本人ならそうは思わない。日本語を使い続けて必要な理由を知ってるから。
日本語から「が」がなくなれば不便で仕方がない。
だからauto使いは大学デビューとか言われるのだ。未だコードネイティブではないのだ。
10年使ってからautoが必要かどうか考えろ。答えは明らかだ。
碌にコードを読んだことがない、書かない人が文法を変えたがるのだ。
外国人の日本語入門者が「は」と「が」が難しいからautoにしろ、どっちの意味かは読む人、聞く人が考えろと言ってるうなもの。
ひらがなとカタカナを統一しろとかね。日本人ならそうは思わない。日本語を使い続けて必要な理由を知ってるから。
日本語から「が」がなくなれば不便で仕方がない。
だからauto使いは大学デビューとか言われるのだ。未だコードネイティブではないのだ。
10年使ってからautoが必要かどうか考えろ。答えは明らかだ。
272デフォルトの名無しさん (ワッチョイ 6b15-OCcV)
2017/10/29(日) 07:32:07.72ID:m60zTw010 > 大量のC++を書いてきた人は今更シンタックスを変えようとは思わない。
これは嘘
autoだけでなくtrailing return typeやusing aliasなど
かゆいところにやっと手が届いたシンタックス変更は大歓迎している
C++11以後に拒否反応しまくって、未だにC++98のマゾプレーを続行中の変態は
頭固すぎだ
# 自分で言うのも何だが、俺に頭固いなんて言われるのは極端すぎだ
これは嘘
autoだけでなくtrailing return typeやusing aliasなど
かゆいところにやっと手が届いたシンタックス変更は大歓迎している
C++11以後に拒否反応しまくって、未だにC++98のマゾプレーを続行中の変態は
頭固すぎだ
# 自分で言うのも何だが、俺に頭固いなんて言われるのは極端すぎだ
273デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 07:55:51.29ID:Heo7FnD+0 >>270
藻前の呼びたかったassign()は実はFoo::assign()(基底クラスの方)だったかもしれないじゃん?
藻前の呼びたかったassign()は実はFoo::assign()(基底クラスの方)だったかもしれないじゃん?
274デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 08:02:49.06ID:5nFESEae0 ところでこれからC++を始めたいのだが、純粋にC++が始めたいのではなくてc言語の代わりとして
C++を使ってみたい。多少なりともC++の方が便利だろうとおもうから。一つ二つ制約があって
ROMが256バイトしかない。RAMが8Kしかない。こういう場合に今までROM48Kバイト、RAM8K
バイトでおさまっていたプログラムをC++で移植するのは余裕だろうか? それとも便利になる分
スペースがとられてRomエリアが少なすぎるってレベルだろうか?
C++を使ってみたい。多少なりともC++の方が便利だろうとおもうから。一つ二つ制約があって
ROMが256バイトしかない。RAMが8Kしかない。こういう場合に今までROM48Kバイト、RAM8K
バイトでおさまっていたプログラムをC++で移植するのは余裕だろうか? それとも便利になる分
スペースがとられてRomエリアが少なすぎるってレベルだろうか?
275デフォルトの名無しさん (ワッチョイ 9104-VtrM)
2017/10/29(日) 08:05:45.00ID:6IgW6Wrm0 アセンブリで書けるレベルじゃね?それ。
276デフォルトの名無しさん (ワッチョイ 1341-2BKa)
2017/10/29(日) 08:07:50.71ID:XRmGRjwZ0 >>271
要出典:auto使いは大学デビュー
ラムダ式を変数に入れたいときはどうやるの?
コンテナのイテレータを変数に入れたいときは型名全部書くの?
std::bindの戻り値を変数に入れたいときはどうするの?
何でもかんでもauto使うのはどうかと思うがこういう面倒なところはautoでいいんじゃね
要出典:auto使いは大学デビュー
ラムダ式を変数に入れたいときはどうやるの?
コンテナのイテレータを変数に入れたいときは型名全部書くの?
std::bindの戻り値を変数に入れたいときはどうするの?
何でもかんでもauto使うのはどうかと思うがこういう面倒なところはautoでいいんじゃね
277片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 08:09:27.19ID:k1qoOab2d278デフォルトの名無しさん (ワッチョイ 138a-whYl)
2017/10/29(日) 08:10:20.13ID:XyYI0EpP0 cでもキツいな
279デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 08:14:51.32ID:Heo7FnD+0 多分printf()がリンクされたら死ぬレベル
280片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 08:19:49.13ID:k1qoOab2d281デフォルトの名無しさん (ワッチョイ 1341-2BKa)
2017/10/29(日) 08:25:23.25ID:XRmGRjwZ0 >>274
ROMは256Kの誤記だとして
RAM8Kはきついな
マイコン向けの開発環境も無償版や評価版なんてのがあるから一回試した方がいいと思う
コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに
C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな
ROMは256Kの誤記だとして
RAM8Kはきついな
マイコン向けの開発環境も無償版や評価版なんてのがあるから一回試した方がいいと思う
コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに
C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな
282デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 08:51:05.52ID:5nFESEae0 ROMは256kの間違い。外部RAMは256kbある。(ただしSPIでアクセスするので遅い)
だから8kは純粋にワークとして使える。
8kのRAMがきついと思うのは何故?
C++もワークはスタックを使うと思うけど、プログラムの実行エリアとして例えばクラスインスタンスを
作るのにRAMを消費することになるんだろうか? 動的にインスタンスを作成するとそのクラスが大きいと
RAMエリア(mallocで確保してロードしたら、解放するまではRAMエリアを使う)を圧迫することになる。
ということはRAMをあまり消費しない手法ってあるんだろうか?
だから8kは純粋にワークとして使える。
8kのRAMがきついと思うのは何故?
C++もワークはスタックを使うと思うけど、プログラムの実行エリアとして例えばクラスインスタンスを
作るのにRAMを消費することになるんだろうか? 動的にインスタンスを作成するとそのクラスが大きいと
RAMエリア(mallocで確保してロードしたら、解放するまではRAMエリアを使う)を圧迫することになる。
ということはRAMをあまり消費しない手法ってあるんだろうか?
283デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 09:18:10.76ID:Heo7FnD+0 普通は処理系が要求するコード、CONSTデータ、、スタック、初期値付きデータ、BSSの各セクションを
プログラマーが明示的にリンカに指示して割り当てさせるんじゃね;;
これはCもC++も同じなのでCでのやり方を理解しているなんならC++でも同じようにやれば良い
(グローバルなオブジェクトの構築と破棄の手当てが追加になるだけぐらいしか違いが無い
プログラマーが明示的にリンカに指示して割り当てさせるんじゃね;;
これはCもC++も同じなのでCでのやり方を理解しているなんならC++でも同じようにやれば良い
(グローバルなオブジェクトの構築と破棄の手当てが追加になるだけぐらいしか違いが無い
284デフォルトの名無しさん (ワッチョイ 1341-2BKa)
2017/10/29(日) 09:30:39.20ID:XRmGRjwZ0 >>282
最適化切って動作確認したり、デバッグ用のコードを仕込んだりしてると8Kは意外とすぐに使いきれてしまう
当然プログラムの規模や書き方によるところだから必ず足りないわけではないけど
C++だから足りないというわけではない
元のプログラムがCで書かれてて8Kで動いてたならまぁ大丈夫か
最適化切って動作確認したり、デバッグ用のコードを仕込んだりしてると8Kは意外とすぐに使いきれてしまう
当然プログラムの規模や書き方によるところだから必ず足りないわけではないけど
C++だから足りないというわけではない
元のプログラムがCで書かれてて8Kで動いてたならまぁ大丈夫か
285デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 09:31:08.74ID:Heo7FnD+0 >>282
>8kのRAMがきついと思うのは何故?
全てはID:5nFESEae0が上記各セクションをROMやRAMにどのように割り付けようとしているのかにかかってゐるのだが、
仮にスタックと初期値つきデータとBSSを全部8 KBのRAMに割り付けた場合、
コード以外の全て(malloc()含む)のメモリ消費がトータルで8 KBに収まらねばならず、
メモリ不足のせいでやれることは相当にきびしくなるとおもー
>8kのRAMがきついと思うのは何故?
全てはID:5nFESEae0が上記各セクションをROMやRAMにどのように割り付けようとしているのかにかかってゐるのだが、
仮にスタックと初期値つきデータとBSSを全部8 KBのRAMに割り付けた場合、
コード以外の全て(malloc()含む)のメモリ消費がトータルで8 KBに収まらねばならず、
メモリ不足のせいでやれることは相当にきびしくなるとおもー
286デフォルトの名無しさん (ワッチョイ e983-nu9H)
2017/10/29(日) 09:38:54.44ID:0yKrkLYC0 ID:XRmGRjwZ0
> RAM8Kはきついな
> コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに
> C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな
こいつレベル低すぎだろ。ド素人にもほどがある。
完全に組み込み経験なしじゃねーか。学生じゃねーのか。
> RAM8Kはきついな
> コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに
> C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな
こいつレベル低すぎだろ。ド素人にもほどがある。
完全に組み込み経験なしじゃねーか。学生じゃねーのか。
287デフォルトの名無しさん (ワッチョイ 9104-VtrM)
2017/10/29(日) 09:49:26.98ID:6IgW6Wrm0 コンテナクラスの消費バイトは12バイト。だっけ?
288デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 09:56:55.29ID:Heo7FnD+0 sizeof(コンテナクラス)すればワカル、
ただしコンテナに要素の追加でmalloc()される分は別枠
ただしコンテナに要素の追加でmalloc()される分は別枠
289デフォルトの名無しさん (JP 0Hc5-xXVv)
2017/10/29(日) 10:05:31.40ID:NWVP0NdTH290デフォルトの名無しさん (ワッチョイ eb80-4ToH)
2017/10/29(日) 10:24:19.89ID:9Q+tOYh80 Microchip マイコン PIC24FJ128GA006-I/PT 16ビット RISC PIC24FJ,
32MHz, 128 kB フラッシュ, 8 kB RAM, 64-Pin
http://jp.rs-online.com/web/p/microcontrollers/6230897/
8KB RAM は、400円のPIC マイコンとかだろ
そもそも、C++ のコンパイラが無い
32MHz, 128 kB フラッシュ, 8 kB RAM, 64-Pin
http://jp.rs-online.com/web/p/microcontrollers/6230897/
8KB RAM は、400円のPIC マイコンとかだろ
そもそも、C++ のコンパイラが無い
291デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 10:29:34.45ID:5nFESEae0 コンパイラはありますよ。C/C++とうたってるので恐らくC++もできると思うが、、、
TIとかHewとか他にもKeilとか
TIとかHewとか他にもKeilとか
292デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 10:41:22.70ID:5nFESEae0 >グローバルなオブジェクトの構築と破棄の手当てが追加になるだけぐらいしか違いが無い
おお、心強いお言葉。
例えば
class MyClass
{
int buf[1000];
int no = 0;
void inputdisp(int aa){
sprintf(buf," aa=%d",aa);
}
};
int sub1()
{
MyClass aaa;
aaa.disp(333);
return 0;
}
こういう場合はaaaはbufは2000バイトのRAMを使うけれども、stackに確保するんだろうか?
aaa自体はrom上にできると考えていい?
それなら、cと混在で徐々にC++に変えていく程度でも問題ないのかなとは思っている。
おお、心強いお言葉。
例えば
class MyClass
{
int buf[1000];
int no = 0;
void inputdisp(int aa){
sprintf(buf," aa=%d",aa);
}
};
int sub1()
{
MyClass aaa;
aaa.disp(333);
return 0;
}
こういう場合はaaaはbufは2000バイトのRAMを使うけれども、stackに確保するんだろうか?
aaa自体はrom上にできると考えていい?
それなら、cと混在で徐々にC++に変えていく程度でも問題ないのかなとは思っている。
293デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 10:52:19.32ID:Heo7FnD+0294デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 11:05:38.47ID:5nFESEae0 動的にNewを使ってインスタンスを生成した場合には、コードは必然的にRam上に置かれる。しかしスタティックに
生成した場合は、Code部分は原理的にはRom上にも置くことができる。そういう機能があるかどうか?って質問。
生成した場合は、Code部分は原理的にはRom上にも置くことができる。そういう機能があるかどうか?って質問。
295デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 11:08:14.46ID:Heo7FnD+0296デフォルトの名無しさん (ワッチョイ a180-aATY)
2017/10/29(日) 11:14:29.67ID:jdBIz2nU0 >>292
aaaもbufも同じ場所。大抵のコンパイラでは同じアドレスを指す。C解るならclassをstructに置き換えて考えたらいい。それと一緒。
aaaもbufも同じ場所。大抵のコンパイラでは同じアドレスを指す。C解るならclassをstructに置き換えて考えたらいい。それと一緒。
297片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 11:15:45.86ID:k1qoOab2d operator newの再定義ね。
298デフォルトの名無しさん (ワッチョイ 13bd-01LR)
2017/10/29(日) 11:29:26.33ID:Heo7FnD+0 ていうか>>294ハ質問者本人かしつれいorz
>>292のMyClass::inputdisp(int aa)のコードは、名前が適当にマングルされて(*1)
void hoge(MyClass* this, int aa) // (1)
という2引数の関数としてコードセクションにコードが格納される、というのが真実(*2)(*3)
オブジェクトaaaを動的にNewを使ってインスタンスを生成しようがスタティックに生成しようが、
そんなこととは無関係に、aaa.inputdisp((int型データ))というメソッドの呼び出しは(1)の関数呼び出しにコンパイルされる
*1: ここでは簡単のため’hoge’という名前にマングルされたとしている。本当は引数の型や戻り値も情報として含む名前になるが省略
*2: C++の言語規格でそうせよ決まっているかどうかは知らないが、そう処理する処理系しか無いと思う
*3: コードセクションがROM上なのかRAM上なのかはプログラマーがコードセクションをどう割り付けたかによる
>>292のMyClass::inputdisp(int aa)のコードは、名前が適当にマングルされて(*1)
void hoge(MyClass* this, int aa) // (1)
という2引数の関数としてコードセクションにコードが格納される、というのが真実(*2)(*3)
オブジェクトaaaを動的にNewを使ってインスタンスを生成しようがスタティックに生成しようが、
そんなこととは無関係に、aaa.inputdisp((int型データ))というメソッドの呼び出しは(1)の関数呼び出しにコンパイルされる
*1: ここでは簡単のため’hoge’という名前にマングルされたとしている。本当は引数の型や戻り値も情報として含む名前になるが省略
*2: C++の言語規格でそうせよ決まっているかどうかは知らないが、そう処理する処理系しか無いと思う
*3: コードセクションがROM上なのかRAM上なのかはプログラマーがコードセクションをどう割り付けたかによる
299デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 12:14:39.69ID:5nFESEae0 >296
うろ覚えで使ってるが、
Section Type of Memory Section Type of Memory
.bss RAM
.stack RAM
.data RAM
.sysmem RAM
.text ROM これがコード部分
.その他 ROM
こういうのがある。
Hewの場合#pragumaでセクションを生成できたとおもうが、一般的に#pragma とかで割り当てできるんだろうか?
今回はTiのコンパイラを使う予定なので初めての試み。
多分
static Myclass aaa;
みたいにスタティックかなにかを冠して宣言すれば.textにコードは配置されると思うが、どうなんだろう。
スタティックなんだから原理的には配置はどうにでもなる筈。
うろ覚えで使ってるが、
Section Type of Memory Section Type of Memory
.bss RAM
.stack RAM
.data RAM
.sysmem RAM
.text ROM これがコード部分
.その他 ROM
こういうのがある。
Hewの場合#pragumaでセクションを生成できたとおもうが、一般的に#pragma とかで割り当てできるんだろうか?
今回はTiのコンパイラを使う予定なので初めての試み。
多分
static Myclass aaa;
みたいにスタティックかなにかを冠して宣言すれば.textにコードは配置されると思うが、どうなんだろう。
スタティックなんだから原理的には配置はどうにでもなる筈。
300デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 12:18:36.34ID:5nFESEae0 問題はスタティックにした場合, コードは.textに配置されるとしてもdataが.dataに配置されると非常にまずい。
スタックでやってもらえないと困る。
スタックでやってもらえないと困る。
301デフォルトの名無しさん (ブーイモ MM33-96Io)
2017/10/29(日) 12:34:41.62ID:n8H8yUIJM302デフォルトの名無しさん (ワッチョイ 719f-Akqv)
2017/10/29(日) 12:40:57.57ID:oFRxn/Jf0 >>289
30年ぐらい前に ROM2KB, RAM2KB の Z80 ボード用プログラムをC言語で作ったことあるよ。
30年ぐらい前に ROM2KB, RAM2KB の Z80 ボード用プログラムをC言語で作ったことあるよ。
303デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 12:43:00.92ID:5nFESEae0 例えば、パネル表示をまとめたクラスのような場合にはクラスのメソッド部分が非常に大きくなる。しかもライブラリ
的に使うわけだから、階層のわりと下で使うことになる。3階層あって、2階層目くらいから同時にいくつかが
生成されてしまう可能性も高い。するとRAMエリアが直ぐにパンクする。なのでメソッドを大量に含んだライブラリ的な
働きをするクラスに関しては、.textにあってほしい。それは可能だと思うがじゃあそのクラス内でつかうバッファなどの
変数なんかが問題になる。これは動的に生成しないとクラスの使い道が非常に限られてくる。第一suba()で使っていて
subb()で使うとバッファエリアが壊れてしまう。
1.bufを持てないクラスなんて殆ど意味がない。
2.bufをスタティックにしか配置できないクラスなんて使い道がない。
3.小規模マイコンでメソッドをramに確保するなんて馬鹿げている。
これは明らかだよね。
つまりMyclassのbuf[1000]、メソード関数()(例えば50個)をスタックと.textにそれぞれ上手く配置する工夫が
絶対に必要ってことだね。
的に使うわけだから、階層のわりと下で使うことになる。3階層あって、2階層目くらいから同時にいくつかが
生成されてしまう可能性も高い。するとRAMエリアが直ぐにパンクする。なのでメソッドを大量に含んだライブラリ的な
働きをするクラスに関しては、.textにあってほしい。それは可能だと思うがじゃあそのクラス内でつかうバッファなどの
変数なんかが問題になる。これは動的に生成しないとクラスの使い道が非常に限られてくる。第一suba()で使っていて
subb()で使うとバッファエリアが壊れてしまう。
1.bufを持てないクラスなんて殆ど意味がない。
2.bufをスタティックにしか配置できないクラスなんて使い道がない。
3.小規模マイコンでメソッドをramに確保するなんて馬鹿げている。
これは明らかだよね。
つまりMyclassのbuf[1000]、メソード関数()(例えば50個)をスタックと.textにそれぞれ上手く配置する工夫が
絶対に必要ってことだね。
304デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 12:45:06.72ID:5nFESEae0305sage (ワッチョイ ebe8-KIob)
2017/10/29(日) 12:54:06.20ID:t3scGPtZ0 組み込みはPCで動くの違って配置も考えないといけないから大変だな
マイコンでの配置に関してはここより組み込みが普通の電電板のマイコンスレでの方が良いような気がするが。
マイコンでの配置に関してはここより組み込みが普通の電電板のマイコンスレでの方が良いような気がするが。
306デフォルトの名無しさん (ワッチョイ 13b3-X7g4)
2017/10/29(日) 16:49:46.36ID:9sOuhtQV0 >>274
純粋にC言語の書き方するだけならコンパイラの能力次第だと思う
純粋にC言語の書き方するだけならコンパイラの能力次第だと思う
307デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 18:26:51.08ID:5nFESEae0 ヘッダファイルに型定義して、実装をCPPに書くのってどうかなーと思う。特に組み込み
だとファイルを分ける意味がわからない。分けるとクラスのイメージが掴みにくい気がする。
だとファイルを分ける意味がわからない。分けるとクラスのイメージが掴みにくい気がする。
308片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 18:28:45.31ID:k1qoOab2d >>307
コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね?
コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね?
309デフォルトの名無しさん (ワッチョイ 13b3-X7g4)
2017/10/29(日) 18:58:48.05ID:9sOuhtQV0310デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 19:08:11.02ID:5nFESEae0 クラスってのは型の定義なんだから、使う時は全部インクルードではだめなの?
例えば
clsAAA.h
clsBBB.h
...
clsXXX.h
main.cpp
の中で
include "cls\clsAAA.h"
include "cls\clsBBB.h"
....
include "cls\clsXXX.h"
例えば
clsAAA.h
clsBBB.h
...
clsXXX.h
main.cpp
の中で
include "cls\clsAAA.h"
include "cls\clsBBB.h"
....
include "cls\clsXXX.h"
311デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 19:13:52.28ID:5nFESEae0 >コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね?
100個くらいクラスがあってもどってことないと思うが、、、ロード時間が問題になるんだったら
clsディレクトリにクラスファイルを入れて
prtディレクトリにメソッドを実装しない型だけ抜き出したのを入れといて、xxx.prtをインクルードする
方がいいと思う。
100個くらいクラスがあってもどってことないと思うが、、、ロード時間が問題になるんだったら
clsディレクトリにクラスファイルを入れて
prtディレクトリにメソッドを実装しない型だけ抜き出したのを入れといて、xxx.prtをインクルードする
方がいいと思う。
312デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 19:15:39.48ID:5nFESEae0 prtは自動生成できるって前提だy。
313デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 19:18:10.19ID:5nFESEae0 やっぱりメッソドがデータなんかと分離するのはわかり難い。他のオブジェクト指向のコンパイラでもそんなことはしないしね。
314デフォルトの名無しさん (ワッチョイ 99c3-6HUO)
2017/10/29(日) 19:21:46.87ID:qxWnFrvp0 ヘッダだけだと循環参照起きるし、循環参照起きるところだけcppってのも気持ち悪い
315デフォルトの名無しさん (ワッチョイ 13e1-Zxfq)
2017/10/29(日) 19:34:33.73ID:XE573cMW0316片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 19:36:43.09ID:k1qoOab2d >>314
inlineキーワード使って定義もヘッダーに書いちゃえば?
inlineキーワード使って定義もヘッダーに書いちゃえば?
317デフォルトの名無しさん (ワッチョイ 13b3-X7g4)
2017/10/29(日) 20:07:38.66ID:9sOuhtQV0318デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 20:13:48.53ID:5nFESEae0 >314
前方宣言でいいのでは?
そういうのは特殊な場合だけだから
前方宣言でいいのでは?
そういうのは特殊な場合だけだから
319デフォルトの名無しさん (ワッチョイ 99c3-6HUO)
2017/10/29(日) 22:07:47.02ID:qxWnFrvp0320片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 22:10:20.28ID:k1qoOab2d >>319
宣言を両方最初に書いておき、定義を後に書く。
宣言を両方最初に書いておき、定義を後に書く。
321デフォルトの名無しさん (ワッチョイ 99c3-6HUO)
2017/10/29(日) 22:21:25.90ID:qxWnFrvp0 >>320
class Aとclass Bが同じファイルで定義されてるならいいかもしれないけど、そうじゃない場合のほうが多いでしょ
class Aとclass Bが同じファイルで定義されてるならいいかもしれないけど、そうじゃない場合のほうが多いでしょ
322デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 22:40:54.16ID:5nFESEae0 いづれにしてもメソッドをばらして別ファイルに書くほうが良いという根拠にはならんだろ。
323デフォルトの名無しさん (ワッチョイ 99c3-6HUO)
2017/10/29(日) 22:52:18.92ID:qxWnFrvp0 一部分けなきゃできないところがあるから全部分けるだけで、できるならc#とかみたいに全部一つのファイルに書きたい
324デフォルトの名無しさん (ワッチョイ 13e7-20SA)
2017/10/29(日) 23:53:27.12ID:OlzRTZr+0 それだとクラスが縦に長くなって範囲がぱっと見わからなる
1クラス1ファイルの場合はいいけどさ
1クラス1ファイルの場合はいいけどさ
325デフォルトの名無しさん (ワッチョイ eb81-peU6)
2017/10/30(月) 01:18:16.05ID:ImI1HNcW0 てかコードの利用者はヘッダしか見ねーんだから普通に分けとけよ
326デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/30(月) 03:59:29.97ID:XQpDzkmg0 >323
できないところってどんなところ? C#にできてC++にできないなんてどういうことか意味わからん。
cls::とか邪魔くさい。悪しき慣習だろ。あまりにばかげてるからC#では止めにしただけでしょ。
できないところってどんなところ? C#にできてC++にできないなんてどういうことか意味わからん。
cls::とか邪魔くさい。悪しき慣習だろ。あまりにばかげてるからC#では止めにしただけでしょ。
327デフォルトの名無しさん (ワッチョイ 6b3b-OCcV)
2017/10/30(月) 05:31:15.27ID:shFErbol0328デフォルトの名無しさん (ドコグロ MMa3-6HUO)
2017/10/30(月) 09:03:26.26ID:d9bwD/eVM >>327
ヘッダとソースを分けないでって意味でシングルソースってことではないと思うぞ
ヘッダとソースを分けないでって意味でシングルソースってことではないと思うぞ
329はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-20SA)
2017/10/30(月) 10:19:54.36ID:/9ncNuq00 モジュールについては検討中みたいだからそのうち仕様に入るんじゃね?
コンセプト並みのビッグトピックだからどんどん後ろ倒しされそうな気もするけど。
コンセプト並みのビッグトピックだからどんどん後ろ倒しされそうな気もするけど。
330デフォルトの名無しさん (ワッチョイ 6b5f-ZDdo)
2017/10/30(月) 22:49:10.56ID:ao9CiOaa0 vector<shared_ptr<T>>を使う場合、
shared_ptrから自分自身のvector上のindexを取得するにはvector要素を1つずつ走査していくしかないんかね?
vector[0]のアドレスをうまく引き算すればうまくいくかと思いきや、
shared_ptr自体は同じアドレスを持つインスタンスがvectorに格納されているわけでないのでうまく行かんのです
shared_ptrから自分自身のvector上のindexを取得するにはvector要素を1つずつ走査していくしかないんかね?
vector[0]のアドレスをうまく引き算すればうまくいくかと思いきや、
shared_ptr自体は同じアドレスを持つインスタンスがvectorに格納されているわけでないのでうまく行かんのです
331デフォルトの名無しさん (ワッチョイ 6b3e-qypI)
2017/10/30(月) 23:15:50.92ID:GaTL14js0332デフォルトの名無しさん (ワッチョイ d98a-1LOm)
2017/10/31(火) 01:31:02.70ID:Bb7HxcAo0 もしindexが変わらんのであれば別にmap<shared_ptr<T>, int>持つとか
Tにindex持たせるとか
Tにindex持たせるとか
333デフォルトの名無しさん (ワッチョイ 1b8a-zApk)
2017/10/31(火) 06:49:36.25ID:/ULkeF1E0 cppで作ったライブラリ(.a)をcに取り込むときって何か注意いる?
cppには公開apiを1つ用意して、そのなかでクラスを作って計算させようとしてる
cppには公開apiを1つ用意して、そのなかでクラスを作って計算させようとしてる
334デフォルトの名無しさん (ワッチョイ 6b3e-qypI)
2017/10/31(火) 08:34:02.64ID:tApLOrdW0 >>333
その公開apiをextern "C"するのを忘れない事。
その公開apiをextern "C"するのを忘れない事。
335はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-20SA)
2017/10/31(火) 09:33:49.44ID:54GXLgHP0 extern "C" しとかないと大抵はリンクの段階で失敗してくれるから、そんなにおかしなことにもならないだろうけどね。
あとは C++ 側で作ったライブラリから例外が送出されると C 側を通過できなくてクラッシュする環境がある。
あとは C++ 側で作ったライブラリから例外が送出されると C 側を通過できなくてクラッシュする環境がある。
336デフォルトの名無しさん (ワッチョイ 1b9f-20SA)
2017/10/31(火) 11:08:02.92ID:B8ReYjkr0 >>300
やり方しだいジャネーノ?C++推奨しないが、スタックが〜 ramが〜っていうなら自分で管理するか、newに任せるにして実験すればいいんじゃね?
#include <stdio.h>
#include <string.h>
char buf_hige[1000];
class Hoge {
private: char *m_pBuf; int m_size, m_IsNew;
public:
Hoge(char *p, int s) { m_size = s; m_pBuf = p; m_IsNew = 0; }
Hoge() : m_size(100) { m_pBuf = new char[m_size]; m_IsNew = 1; }
~Hoge() { if (m_IsNew) { delete[]m_pBuf; printf("~Hoge()自動削除\n"); } else printf("~Hoge()\n"); }
void zero() { memset(m_pBuf, 0, m_size); }
void show() { printf("アドレス %p size %d\n", m_pBuf, m_size); }
};
void main() {
char buf_hoge[200];
Hoge a(buf_hige, sizeof(buf_hige));// 自分でメモリー割り当ててクラスを使う 普通は ram.. #pragmaとかで移動できる?
Hoge b(buf_hoge, sizeof(buf_hoge));// 自分でメモリー割り当ててクラスを使う mainのstack
Hoge c;// 内部でnew/deleteして動的に使う ram
a.zero(); b.zero(); c.zero(); a.show(); b.show(); c.show();
}
やり方しだいジャネーノ?C++推奨しないが、スタックが〜 ramが〜っていうなら自分で管理するか、newに任せるにして実験すればいいんじゃね?
#include <stdio.h>
#include <string.h>
char buf_hige[1000];
class Hoge {
private: char *m_pBuf; int m_size, m_IsNew;
public:
Hoge(char *p, int s) { m_size = s; m_pBuf = p; m_IsNew = 0; }
Hoge() : m_size(100) { m_pBuf = new char[m_size]; m_IsNew = 1; }
~Hoge() { if (m_IsNew) { delete[]m_pBuf; printf("~Hoge()自動削除\n"); } else printf("~Hoge()\n"); }
void zero() { memset(m_pBuf, 0, m_size); }
void show() { printf("アドレス %p size %d\n", m_pBuf, m_size); }
};
void main() {
char buf_hoge[200];
Hoge a(buf_hige, sizeof(buf_hige));// 自分でメモリー割り当ててクラスを使う 普通は ram.. #pragmaとかで移動できる?
Hoge b(buf_hoge, sizeof(buf_hoge));// 自分でメモリー割り当ててクラスを使う mainのstack
Hoge c;// 内部でnew/deleteして動的に使う ram
a.zero(); b.zero(); c.zero(); a.show(); b.show(); c.show();
}
337デフォルトの名無しさん (ワッチョイ 138a-whYl)
2017/10/31(火) 14:04:56.90ID:QkT+8axj0 普通の opereter new 定義するだけじゃ駄目なの?
338デフォルトの名無しさん (ワッチョイ 0923-Lz9C)
2017/10/31(火) 15:27:26.38ID:ivXWtcCM0 その例なら m_pBuf とか m_size とか m_isNew がどこに置かれるかって話してるんだよ
339はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-20SA)
2017/10/31(火) 15:50:52.40ID:54GXLgHP0 >>300
リンカスクリプトで定義できるんじゃねーの
リンカスクリプトで定義できるんじゃねーの
340デフォルトの名無しさん (ブーイモ MMd5-ZDdo)
2017/10/31(火) 20:31:59.83ID:cRyJj2TVM341デフォルトの名無しさん (ワッチョイ 1b9f-20SA)
2017/11/01(水) 09:45:22.08ID:Rrk0WseL0 >>338
リンカーでMAP指定して確認したらいいんじゃねーの?アドレスわかるだろ?
リンカーでMAP指定して確認したらいいんじゃねーの?アドレスわかるだろ?
342デフォルトの名無しさん (ワッチョイ 0beb-nu9H)
2017/11/01(水) 23:49:32.94ID:KV/dR0JW0 共用体って使い道あるの?
素人目からしたら役に立つようには到底思えない
素人目からしたら役に立つようには到底思えない
343はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-lboT)
2017/11/02(木) 00:33:40.96ID:4tfXXWiS0 使わずに済むならそれにこしたことはないだろうけど、
部分的に動的型みたいにしたいときは有るよ。
yacc が生成するコードに出てきたりする。
部分的に動的型みたいにしたいときは有るよ。
yacc が生成するコードに出てきたりする。
344デフォルトの名無しさん (ワッチョイ 82b3-6lPO)
2017/11/02(木) 01:14:44.84ID:6O09mL2X0 >>342
例えば通信パケットとかで必ず固定長だけど、複数の箇所のコマンドとか意味とかのコードで
内容がコロコロ変わる様な時は便利かも知れない?
それぞれの構造体にキャストしろよって言いたくもなるけど、
複数の人で開発してると通信パケットの内容とかで下らない不具合出したくないから
1つのヘッダで全部規定したりって事はあったな
例えば通信パケットとかで必ず固定長だけど、複数の箇所のコマンドとか意味とかのコードで
内容がコロコロ変わる様な時は便利かも知れない?
それぞれの構造体にキャストしろよって言いたくもなるけど、
複数の人で開発してると通信パケットの内容とかで下らない不具合出したくないから
1つのヘッダで全部規定したりって事はあったな
345デフォルトの名無しさん (ワッチョイ 82b3-6lPO)
2017/11/02(木) 01:35:58.84ID:6O09mL2X0 あ、後H8開発してた時とか、メモリマップドIOとかがモードでコロコロ意味変わる時、
1バイトのデータになったりビットフィールドになったりなとことかがunionになってた
1バイトのデータになったりビットフィールドになったりなとことかがunionになってた
346デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/02(木) 04:56:03.82ID:i8MAyZKO0 union RGBA{
struct {R:5,G:5,B:5,A:1};
std::uint16_t Colors;
};
こんな感じのことするけど。たまに。
struct {R:5,G:5,B:5,A:1};
std::uint16_t Colors;
};
こんな感じのことするけど。たまに。
347デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/02(木) 04:57:25.31ID:i8MAyZKO0 あ、片宣言抜けてた。
たまにしか使わないからなぁ。
struct {std::uint16_t R:5,G:5,B:5,A:1};
たまにしか使わないからなぁ。
struct {std::uint16_t R:5,G:5,B:5,A:1};
348デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/02(木) 09:40:30.47ID:N8nuZaLN0 union { double d; int i; char c;} u;
は1番大きな要素、この場合は double d のサイズと
メモリアライメントを持つというのが union の重要な機能
これのおかげで非ワード境界からワードを読もうとするようなコードを避けられる
は1番大きな要素、この場合は double d のサイズと
メモリアライメントを持つというのが union の重要な機能
これのおかげで非ワード境界からワードを読もうとするようなコードを避けられる
349デフォルトの名無しさん (ワッチョイ 42d2-81c4)
2017/11/02(木) 21:55:55.26ID:JP+uyw1T0 #pragma data_seg
でdllの共有領域を作ってるんですけど
ここにクラスのインスタンスを置いておくことはできますか?
でdllの共有領域を作ってるんですけど
ここにクラスのインスタンスを置いておくことはできますか?
350デフォルトの名無しさん (エムゾネ FF62-S23b)
2017/11/02(木) 22:11:01.00ID:e7UKjGN4F コンストラクタのない、構造体にメンバ関数付いただけのクラスのインスタンスなら大丈夫じゃないかな。
動的にメモリをアロケーションするクラスではアロケーションしたメモリは共有されないので注意。
動的にメモリをアロケーションするクラスではアロケーションしたメモリは共有されないので注意。
351デフォルトの名無しさん (スップ Sdc2-S23b)
2017/11/02(木) 22:11:46.90ID:m+SMCXhed ↑
共有されないってのは「プロセス間で」ということね
共有されないってのは「プロセス間で」ということね
352デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/02(木) 23:18:08.17ID:H/ANuUhm0 >>348
『プログラミング言語C』のmalloc()の実装例のやつで見た
『プログラミング言語C』のmalloc()の実装例のやつで見た
353デフォルトの名無しさん (ワッチョイ 2e80-frTj)
2017/11/03(金) 00:39:07.86ID:Xm/a3Zyv0 共用体は、パリティチェックで使う
あるサイズの内容を、ある方法で計算して、データが破壊・改変されていないか。
通信データが正しいかどうか
あるサイズの内容を、ある方法で計算して、データが破壊・改変されていないか。
通信データが正しいかどうか
354デフォルトの名無しさん (ブーイモ MM6d-5Y2u)
2017/11/03(金) 01:31:20.38ID:f3hy7vD8M355デフォルトの名無しさん (ワッチョイ 4d08-S32u)
2017/11/03(金) 07:14:49.06ID:3SB+84d60 境界調整はalignasでできるようになった
356デフォルトの名無しさん (ワッチョイ 6e5f-Osc9)
2017/11/03(金) 18:27:07.09ID:6x/Gce9W0 string::format()マダァー?
<<は失敗だったって早く認めようぜ
<<は失敗だったって早く認めようぜ
357デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/03(金) 21:32:49.68ID:A4m/loi/0 printf()系関数とstring::c_str()(ていうかbasic_string<T>::c_str())があるから無問題
358デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/03(金) 21:34:26.06ID:A4m/loi/0 入力はscanf()系とか使うとCの経験が長いプログラマーには軽蔑の眼差しで見られるが
cinとかより速くて使い勝手も良いのだから仕方が無い
cinとかより速くて使い勝手も良いのだから仕方が無い
359デフォルトの名無しさん (ワッチョイ ad2d-7GNV)
2017/11/03(金) 21:46:14.60ID:+rn5t+yk0 boost::format よく使ってる
360デフォルトの名無しさん (ワッチョイ e178-HrHe)
2017/11/03(金) 23:08:11.68ID:veVAWEWL0 可変テンプレート使えるんならprintfにクラス喰わせたりすることぐらいできるだろ
361デフォルトの名無しさん (ワッチョイ 6e5f-Osc9)
2017/11/04(土) 00:02:18.18ID:9Iye7uTf0 snprintfじゃstringstreamの代わりとしては役者不足だろ
362デフォルトの名無しさん (ワッチョイ 6278-9hO9)
2017/11/04(土) 07:27:21.97ID:CbR/PKzh0 「役者不足」は造語なんで使わないほうが無難
363デフォルトの名無しさん (ワイモマー MMa5-FISE)
2017/11/04(土) 09:25:02.17ID:v7stxdd6M >>362
しかも「役不足」じゃあ、「役より実力が遥かに高い」の意味だしね。
しかも「役不足」じゃあ、「役より実力が遥かに高い」の意味だしね。
364デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/04(土) 12:54:53.20ID:z55RyEJo0 「力不足」な
365デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/04(土) 14:09:16.93ID:CaxSQdEs0 >>361
全然wwwwwwwwwww
自作クラスのシリアライズ/デシリアライズの下請け関数として使う分には
機能上全く困らない上に速いのだから
で、シリアライズ/デシリアライズおあ
void ISeriarizable::seriarize(FILE* fp)とvoid ISeriarizable::deseriarize(FILE* fp)
にして「<<」や「>>」のオーバーロードみたいな変態じみたことはせずに同等の柔軟性を確保できる
全然wwwwwwwwwww
自作クラスのシリアライズ/デシリアライズの下請け関数として使う分には
機能上全く困らない上に速いのだから
で、シリアライズ/デシリアライズおあ
void ISeriarizable::seriarize(FILE* fp)とvoid ISeriarizable::deseriarize(FILE* fp)
にして「<<」や「>>」のオーバーロードみたいな変態じみたことはせずに同等の柔軟性を確保できる
366デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/04(土) 14:29:00.75ID:+71Y93dj0 設計が古いな。
367デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/04(土) 15:30:32.32ID:2OIo1NJb0 cin,cout って組み込みで使えるんかい?
何処をどう書き換えるとそうなるん?
何処をどう書き換えるとそうなるん?
368デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/04(土) 15:34:07.08ID:2OIo1NJb0 string s1("foo");
const char *p = NULL;
p = s1.c_str();
cout << p << endl;
return 0;
????
cout << s1<<endl; じゃダメなん?
const char *p = NULL;
p = s1.c_str();
cout << p << endl;
return 0;
????
cout << s1<<endl; じゃダメなん?
369デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/04(土) 22:22:05.63ID:2OIo1NJb0 Coutを実験してみたがコードがバカでかくなるので駄目だな。組み込みでは使えない。
370デフォルトの名無しさん (ドコグロ MM29-r/51)
2017/11/04(土) 22:34:50.04ID:WXoZTt/lM >>369
組み込みで何をやりたいのか知らんけど普通coutを書き換えるだろ
組み込みで何をやりたいのか知らんけど普通coutを書き換えるだろ
371デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/04(土) 22:37:40.26ID:z55RyEJo0 組み込みに使うなら実験とかじゃなくちゃんとどんなコードか把握しろよw怖いわ
372デフォルトの名無しさん (ワッチョイ d2eb-7T4N)
2017/11/04(土) 22:57:54.30ID:GShvEvWZ0 そもそも組み込みの標準入出力がどんなもんなのかすら想像できないw
373デフォルトの名無しさん (ワッチョイ c2e1-bcP5)
2017/11/04(土) 23:37:09.27ID:wPtyVAZ40 組み込みでは使えないなんていう次元ならそもそも標準ライブラリ使わないだろ
374デフォルトの名無しさん (ワッチョイ e178-HrHe)
2017/11/05(日) 00:56:53.05ID:1GSqUY/t0 デバッグ担当「なぁ?なんかログにアホとかハゲとかあるんだけどナニコレ?オレの事おちょくってんじゃねーだろうなぁ?!あ!!!!」
375デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/05(日) 05:24:49.90ID:qHZ+DCMx0 streamの変更ムズいんだけど。
入力だとstreambufのunderflow実装すると思うけど、エラー発生したときどうやってistreamに通知すんの?
入力だとstreambufのunderflow実装すると思うけど、エラー発生したときどうやってistreamに通知すんの?
376デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 06:18:13.15ID:vRj0Z3ir0 struct lock_interrupt {
lock_interrupt() : masked(get_imask_ccr()) {
set_imask_ccr(1);
}
〜lock_interrupt() {
set_imask_ccr(masked);
}
bool masked;
};
// in some function...
lock_interrupt lk;
// do critical action, lets forget unmask interrupt flag!
}
このコード lock_interrupt() : masked(get_imask_ccr()) {
ここの部分の”:”ってどういう意味なの?
何となくコンストラクタとディストラクタがせっとになってるだろうなー
だから”}”に出会うと自動的にディストラクトされるコードだろうか?
ってくらいしかわからないレベルだから、、、、是非ともこのコードを
使い倒してみたい。
lock_interrupt() : masked(get_imask_ccr()) {
set_imask_ccr(1);
}
〜lock_interrupt() {
set_imask_ccr(masked);
}
bool masked;
};
// in some function...
lock_interrupt lk;
// do critical action, lets forget unmask interrupt flag!
}
このコード lock_interrupt() : masked(get_imask_ccr()) {
ここの部分の”:”ってどういう意味なの?
何となくコンストラクタとディストラクタがせっとになってるだろうなー
だから”}”に出会うと自動的にディストラクトされるコードだろうか?
ってくらいしかわからないレベルだから、、、、是非ともこのコードを
使い倒してみたい。
377デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/05(日) 06:23:01.44ID:U5vPVsbz0 メンバイニシャライザでググれ
てか初等文法くらい勉強しろよ
てか初等文法くらい勉強しろよ
378デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 06:27:09.42ID:vRj0Z3ir0 >組み込みで何をやりたいのか知らんけど普通coutを書き換えるだろ
ん?
普通はcoutを使わないという意味だろうか? それなら同意する。
#include <iostream>
を追加しただけで256kbyteを超えてしまう。これではマイコンじゃ使えないな。
もちろんcoutが使えないって意味だよ。使えないなら書き換える? まあそれは
むりだな。なぜなら書き換える場合でもiostramをインクルードするひつようがあるからね。
つまり書き換えなんてできない。つまり使えないし使わない。すなわち結論としては
Cのsprintfを使うってのが順当かと思う。
ん?
普通はcoutを使わないという意味だろうか? それなら同意する。
#include <iostream>
を追加しただけで256kbyteを超えてしまう。これではマイコンじゃ使えないな。
もちろんcoutが使えないって意味だよ。使えないなら書き換える? まあそれは
むりだな。なぜなら書き換える場合でもiostramをインクルードするひつようがあるからね。
つまり書き換えなんてできない。つまり使えないし使わない。すなわち結論としては
Cのsprintfを使うってのが順当かと思う。
379デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/05(日) 06:30:56.15ID:U5vPVsbz0 >>376
あとついでにクラス全体を説明すると、コンストラクタで割り込みをマスクして
デストラクタで元に戻している。
こんな感じで使う
void foo () {
lock_intterupt lock; // 以下割り込み禁止
if (...) {
....
return;
}
.....
return;
}
割り込み禁止を解除するコードを書き忘れたり複数書いたりせずに済む。
あとついでにクラス全体を説明すると、コンストラクタで割り込みをマスクして
デストラクタで元に戻している。
こんな感じで使う
void foo () {
lock_intterupt lock; // 以下割り込み禁止
if (...) {
....
return;
}
.....
return;
}
割り込み禁止を解除するコードを書き忘れたり複数書いたりせずに済む。
380デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 06:35:39.18ID:vRj0Z3ir0 >メンバイニシャライザでググれ
キーワードありがとう。
ググってみた。メンバーイニシャライザってことはわかったんだがなんか特殊だな
masked = get_imask_ccr();
こういうことか? なるほど。
キーワードありがとう。
ググってみた。メンバーイニシャライザってことはわかったんだがなんか特殊だな
masked = get_imask_ccr();
こういうことか? なるほど。
381デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:06:11.45ID:vRj0Z3ir0 ここでlockという名称は何でもいいんですよね。要するにstructを生成するだけだから。
2か所でlockしたいような場合には使えないという欠点があるね。
void foo() {
lock_intterupt lock; // 以下割り込み禁止
if (...) {
....
return;
}
lock.unlock();
.....
.....
.....
lock.relock(); // ここでも割り込み禁止
if (...) {
....
return;
}
.....
return; // ここでlock(割り込み禁止)した部分が解除される。
}
こうするにはどうしたらいい?
2か所でlockしたいような場合には使えないという欠点があるね。
void foo() {
lock_intterupt lock; // 以下割り込み禁止
if (...) {
....
return;
}
lock.unlock();
.....
.....
.....
lock.relock(); // ここでも割り込み禁止
if (...) {
....
return;
}
.....
return; // ここでlock(割り込み禁止)した部分が解除される。
}
こうするにはどうしたらいい?
382デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:09:12.73ID:vRj0Z3ir0 なんでclassにしないでstructなのだろうか?
383デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:26:22.28ID:vRj0Z3ir0 C++の本見るとcout,cinの例が必ず出ているが、これは大きな間違いだな。なぜなら
1.マイコンではiostremは馬鹿でかくて使えない。だからcout,cinは使えない。
2.じゃあパソコンで使うのかというと、パソコンならjavaかC#があるのにC++なんて
使うのは間違い。
以上の理由からサンプルにcout使うのは馬鹿。
1.マイコンではiostremは馬鹿でかくて使えない。だからcout,cinは使えない。
2.じゃあパソコンで使うのかというと、パソコンならjavaかC#があるのにC++なんて
使うのは間違い。
以上の理由からサンプルにcout使うのは馬鹿。
384デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:28:47.99ID:vRj0Z3ir0 というか、もっとmiimaizeしたiostream実装しろよな。といいたい。
385デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 08:04:41.58ID:3uuR82Hq0 >>381
> 2か所でlockしたいような場合には使えないという欠点があるね。
ブロックも知らんのかよ...
void foo(){
{
lock_intterupt lock; // 以下割り込み禁止
if(...){
...
return;
}
}
...
...
{
lock_interrupt lock; // ここでも割り込み禁止
if(...){
...
return;
}
}
return; // ここでlock(割り込み禁止)した部分が解除される。
}
> 2か所でlockしたいような場合には使えないという欠点があるね。
ブロックも知らんのかよ...
void foo(){
{
lock_intterupt lock; // 以下割り込み禁止
if(...){
...
return;
}
}
...
...
{
lock_interrupt lock; // ここでも割り込み禁止
if(...){
...
return;
}
}
return; // ここでlock(割り込み禁止)した部分が解除される。
}
386デフォルトの名無しさん (ワッチョイ d2fb-K7eU)
2017/11/05(日) 09:19:24.45ID:fHP76uUy0 メンバーイニシャライザーなんて上級者向け
387デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 09:44:11.28ID:vRj0Z3ir0 >>ブロックも知らんのかよ...
そういうのがあったのか。 ブロックってスコープだけの問題ではないんだ。
スコープ外れるとディストラクトされるんだ。
いがいと使えるなー。
そういうのがあったのか。 ブロックってスコープだけの問題ではないんだ。
スコープ外れるとディストラクトされるんだ。
いがいと使えるなー。
388デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 09:47:03.86ID:vRj0Z3ir0 >メンバーイニシャライザーなんて上級者向け
イニシャルなんて基本中の基本なのに、上級者でしか使えないほど分かりづらい構造になっている。
素直に=をつかったらいいのにな。
イニシャルなんて基本中の基本なのに、上級者でしか使えないほど分かりづらい構造になっている。
素直に=をつかったらいいのにな。
389デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 09:49:48.35ID:vRj0Z3ir0 lock_interrupt(){
masked = get_imask_ccr();
set_imask_ccr(1);
}
これでいいじゃん。
masked = get_imask_ccr();
set_imask_ccr(1);
}
これでいいじゃん。
390デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/05(日) 10:01:45.17ID:U5vPVsbz0 物知らず自慢されても周りの人は当惑するだけですよ。
メンバーイニシャライザが何故必要なのかはメンバーイニシャライザでググってください。
メンバーイニシャライザが何故必要なのかはメンバーイニシャライザでググってください。
391デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/05(日) 10:06:52.16ID:+AqtjiW/0 自虐ネタですかね?
392デフォルトの名無しさん (ワッチョイ 2ee8-Swf1)
2017/11/05(日) 10:08:40.02ID:t3ZH1B/20 このスレ和むね
393デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 10:23:28.34ID:vRj0Z3ir0 メンバーイニシャライザでググると
メリット1:const指定のメンバ変数の初期化ができる
メリット2:メンバイニシャライザの方が効率的
メリット3:クラスを継承する場合は、メンバイニシャライザに基底クラスのコンストラクタを記述します。
メリット4:メンバイニシャライザを使えるようになると、プログラミングが上手になったような気分になれます。
とあるが、
1はあまり意味がない。constを初期化しないで使うケースは皆無。
2は理由が不明。わかり難いし、効率が変わる理由がない。効率を変えることができるなら、コンストラクタの効率も上げればいいだけだ。
3も意味不明だ。基底クラスのコンストラクタをイニシャライザに記入する必要性がないと思うが、出来ないのか? この方法でしか
できないのならそれはデメリットというのが正しい日本語だ。
4はこれが最大のメリットだろうな。
メリット1:const指定のメンバ変数の初期化ができる
メリット2:メンバイニシャライザの方が効率的
メリット3:クラスを継承する場合は、メンバイニシャライザに基底クラスのコンストラクタを記述します。
メリット4:メンバイニシャライザを使えるようになると、プログラミングが上手になったような気分になれます。
とあるが、
1はあまり意味がない。constを初期化しないで使うケースは皆無。
2は理由が不明。わかり難いし、効率が変わる理由がない。効率を変えることができるなら、コンストラクタの効率も上げればいいだけだ。
3も意味不明だ。基底クラスのコンストラクタをイニシャライザに記入する必要性がないと思うが、出来ないのか? この方法でしか
できないのならそれはデメリットというのが正しい日本語だ。
4はこれが最大のメリットだろうな。
394デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 10:28:17.46ID:vRj0Z3ir0 結論
テクを自慢したい人以外はメンバーイニシャライザは使うべきではない。
テクを自慢したい人以外はメンバーイニシャライザは使うべきではない。
395デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/05(日) 10:30:41.33ID:qHZ+DCMx0 >>393
代入するまでそれがどういう状態になるのか考えた?
代入するまでそれがどういう状態になるのか考えた?
396デフォルトの名無しさん (オッペケ Srf1-K7eU)
2017/11/05(日) 10:31:58.48ID:GarpakNhr >>393の文才に嫉妬
397デフォルトの名無しさん (ワッチョイ 1e7f-3ZLQ)
2017/11/05(日) 10:33:41.73ID:PHl2cqXG0 上級者すげー
398デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 10:38:30.72ID:vRj0Z3ir0 >代入するまでそれがどういう状態になるのか考えた?
ん? constとは定数ですよ。代入なんてありえません。設定です。コンパイラーがシコシコ考えて設定済みです。
プログラムが走る時には最初から決まってるもの、最初を決めるのに別にイニシャライザで
やろうが、コンストラクタでやろうが関係ないです。はい。
ちがった?
ん? constとは定数ですよ。代入なんてありえません。設定です。コンパイラーがシコシコ考えて設定済みです。
プログラムが走る時には最初から決まってるもの、最初を決めるのに別にイニシャライザで
やろうが、コンストラクタでやろうが関係ないです。はい。
ちがった?
399デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/05(日) 10:42:52.94ID:qHZ+DCMx0 >>398
うん。君はC++使わない方がいいね。
うん。君はC++使わない方がいいね。
400デフォルトの名無しさん (スプッッ Sdc2-OC8P)
2017/11/05(日) 10:44:47.64ID:tNj/Rw6Vd c#とかのconstと勘違いしてない?
401デフォルトの名無しさん (スップ Sd62-3K0w)
2017/11/05(日) 10:51:53.00ID:bjKo+Lyid 初期化と代入の違い
constとコンパイル時定数の違い
constとコンパイル時定数の違い
402デフォルトの名無しさん (ワッチョイ 22f9-hwZj)
2017/11/05(日) 10:52:44.25ID:W+ILxFMJ0403デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 11:05:07.65ID:3uuR82Hq0 >>398
> constとは定数ですよ。
残念ながら違う
class c {
private:
const int n;
public:
c(const int x): n(x){}
...
}
なんてことができる
> constとは定数ですよ。
残念ながら違う
class c {
private:
const int n;
public:
c(const int x): n(x){}
...
}
なんてことができる
404デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/05(日) 11:16:27.20ID:+AqtjiW/0 >>402
そんな本は存在しない。
そんな本は存在しない。
405デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 11:25:28.59ID:edJGSUmw0 メンバーイニシャライザの構文は必要悪
だとは感じる
基底クラスやconstメンバの初期化構文が別途必要だったというのは必要悪ながら必要性がワカルが
その他のメリットはあんまはっきりしない
だとは感じる
基底クラスやconstメンバの初期化構文が別途必要だったというのは必要悪ながら必要性がワカルが
その他のメリットはあんまはっきりしない
406デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 11:38:09.47ID:vRj0Z3ir0 >class c {
>private:
> const int n;
>public:
> c(const int x): n(x){}
> ...
>}
>なんてことができる。
定数ではなくて、変更禁止の変数ってことだね。それにどれだけ意味があるんだろう。
イニシャライザ―でしか変更できないんでしょ。クラスを生成したときにしか設定できない変数になる
から、定数と同じ機能しかないよ。
const int n = 9600;って書く方が分かりやすい。
しかし別のインスタンスを生成する時は
c rs(115200);みたいに初期値を変更したい場合がある。これを実現できるのはイニシャライザ以外にはないってことか。
なるほど。
全く意味がないってことはないな。たしかにメリットはある。
>private:
> const int n;
>public:
> c(const int x): n(x){}
> ...
>}
>なんてことができる。
定数ではなくて、変更禁止の変数ってことだね。それにどれだけ意味があるんだろう。
イニシャライザ―でしか変更できないんでしょ。クラスを生成したときにしか設定できない変数になる
から、定数と同じ機能しかないよ。
const int n = 9600;って書く方が分かりやすい。
しかし別のインスタンスを生成する時は
c rs(115200);みたいに初期値を変更したい場合がある。これを実現できるのはイニシャライザ以外にはないってことか。
なるほど。
全く意味がないってことはないな。たしかにメリットはある。
407デフォルトの名無しさん (ワッチョイ beeb-Q/5A)
2017/11/05(日) 11:46:35.42ID:8p1KlMD80 目醒ましたら香ばしいのがおるなあ
408デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 11:49:30.00ID:vRj0Z3ir0 結論を変更
メリット1:クラスのインスタンスごとにconst指定のメンバ変数のユニークな初期化ができる
メリット2:const指定のメンバ変数はユニークに設定できるにも拘わらずコードをまったく消費しない。
メリット1:クラスのインスタンスごとにconst指定のメンバ変数のユニークな初期化ができる
メリット2:const指定のメンバ変数はユニークに設定できるにも拘わらずコードをまったく消費しない。
409デフォルトの名無しさん (ドコグロ MM75-r/51)
2017/11/05(日) 11:50:18.72ID:brx6OlnVM410デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 12:04:33.48ID:vRj0Z3ir0 コンストラクタの構文があるんだから並置してつくるべきだね。
たとえはこんな感じだ。
class cass {
private:
const int n;
public:
cass(const int x){}
cass{ n = 9600 }
...
}
たとえはこんな感じだ。
class cass {
private:
const int n;
public:
cass(const int x){}
cass{ n = 9600 }
...
}
411デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 12:06:36.32ID:vRj0Z3ir0 ~cass()があるんだから
!cass()でもいい。
!cass()でもいい。
412デフォルトの名無しさん (スップ Sd62-3K0w)
2017/11/05(日) 12:25:46.31ID:bjKo+Lyid413デフォルトの名無しさん (ドコグロ MM0a-r/51)
2017/11/05(日) 12:29:36.35ID:uz/X8WP/M >>410
こいつはコンストラクタを複数持てることも知らんのか...
マジで初心者スレに行けよ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1509780815/
こいつはコンストラクタを複数持てることも知らんのか...
マジで初心者スレに行けよ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1509780815/
414デフォルトの名無しさん (ドコグロ MM0a-r/51)
2017/11/05(日) 12:31:24.75ID:uz/X8WP/M >>412
そう言う意味ではC#のreadonlyの方が近い感じだな
そう言う意味ではC#のreadonlyの方が近い感じだな
415デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 12:58:59.38ID:vRj0Z3ir0 >C++のconstは、ユーザー入力など実行時に決まる値に固定化した変数を作れる
実行時は無理でしょ。インスタンス生成時でしょ。見かけ上実行時にインスタンスを生成することで
可能というだけですよね。
実行時は無理でしょ。インスタンス生成時でしょ。見かけ上実行時にインスタンスを生成することで
可能というだけですよね。
416デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 12:59:54.85ID:vRj0Z3ir0 >こいつはコンストラクタを複数持てることも知らんのか...
オーバーロードってことかな? イニシャライザとはなんも関係ないね。
オーバーロードってことかな? イニシャライザとはなんも関係ないね。
417デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 13:00:39.74ID:vRj0Z3ir0 >あと組み込みを前提に考えるのもやめとけ。
C++は組み込みにしか活路がない。というか組み込みに特化すべきだと思う。
PCの場合はJavaとかC#の方が圧倒的にいいからね。
組み込みにCではなくてC++を使うべき最大の理由は?
最大のメリットはScopeが使えることだと思う。NameSpaceとかブロックとかだね。
まあClassの基本構造もスコープを制限できるという意味では含める。これらを使うだけでも
価値がある。
Cでは少しプログラムが大きくなると名前付けで混乱してくる。多少はコード効率が落ちてもC++の方がいい。
C++はすでに化石かと思っていたがなかなか使えそう。
C++は組み込みにしか活路がない。というか組み込みに特化すべきだと思う。
PCの場合はJavaとかC#の方が圧倒的にいいからね。
組み込みにCではなくてC++を使うべき最大の理由は?
最大のメリットはScopeが使えることだと思う。NameSpaceとかブロックとかだね。
まあClassの基本構造もスコープを制限できるという意味では含める。これらを使うだけでも
価値がある。
Cでは少しプログラムが大きくなると名前付けで混乱してくる。多少はコード効率が落ちてもC++の方がいい。
C++はすでに化石かと思っていたがなかなか使えそう。
418デフォルトの名無しさん (ワントンキン MM92-K6ym)
2017/11/05(日) 13:07:42.41ID:CS19J9ATM 普通にデータベースとかC++で書かれてるが…
419デフォルトの名無しさん (ワッチョイ 81b3-ip3T)
2017/11/05(日) 13:12:57.94ID:PxmV+gVs0 多分パフォーマンス重視のソフトとか一つも知らないんじゃね
420デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/05(日) 13:15:03.92ID:+AqtjiW/0 速度が要求される用途ということは、アセンブラの代替としての言語なのだ。
高級言語志向の奴はKotlinでも使ってろ。
高級言語志向の奴はKotlinでも使ってろ。
421デフォルトの名無しさん (ワッチョイ 81b3-ip3T)
2017/11/05(日) 13:17:22.43ID:PxmV+gVs0 C++で数百万行になるプロジェクトをアセで書けと?
422デフォルトの名無しさん (スップ Sd62-3K0w)
2017/11/05(日) 13:18:14.72ID:bjKo+Lyid423デフォルトの名無しさん (ワッチョイ 2e80-frTj)
2017/11/05(日) 13:31:02.52ID:kyKiHR5g0 メンバイニシャライザって、基本だろ。
初期化と代入は異なるから、マシン語も異なるし、効率的
君らは、実行ファイル中の、BSS セクションとか、
異なるセクションのデータが、異なるマシン語になる事も、知らんのか?
初期化と代入は異なるから、マシン語も異なるし、効率的
君らは、実行ファイル中の、BSS セクションとか、
異なるセクションのデータが、異なるマシン語になる事も、知らんのか?
424デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/05(日) 13:47:24.79ID:+AqtjiW/0 もはやマシン語がバズワードに見える
425デフォルトの名無しさん (スップ Sd62-3K0w)
2017/11/05(日) 13:47:40.95ID:bjKo+Lyid >>423
そんなのはプロでもなきゃあまり知らないんじゃない?
そんなのはプロでもなきゃあまり知らないんじゃない?
426デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 13:52:54.16ID:vRj0Z3ir0 >たとえばインスタンス生成時のシステム時刻をconst変数にセットするとする。
>これを実行時と呼ばずになんと呼ぶんだ?
クラスを起点で説明するときには、実行時というのはクラスインスタンスのメソードを実行したり
プロパティにアクセスする時が実行時だね。
インスタンス生成時とは区別したほうが分かりやすい。
クラスは大まかには
1.生成して
2.実行して
3.消滅する
というサイクルがある。
constは生成時にしか設定できない。
>これを実行時と呼ばずになんと呼ぶんだ?
クラスを起点で説明するときには、実行時というのはクラスインスタンスのメソードを実行したり
プロパティにアクセスする時が実行時だね。
インスタンス生成時とは区別したほうが分かりやすい。
クラスは大まかには
1.生成して
2.実行して
3.消滅する
というサイクルがある。
constは生成時にしか設定できない。
427デフォルトの名無しさん (スップ Sd62-3K0w)
2017/11/05(日) 13:59:00.72ID:bjKo+Lyid428デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 14:41:08.77ID:3uuR82Hq0429デフォルトの名無しさん (ワッチョイ 4193-ZDq4)
2017/11/05(日) 14:59:59.34ID:NfAeb+vj0 メンバイニシャライザの構文、
class Aclass {
public:
Aclass(int val) : _member(val) {}
...
}
の評判が悪いけど、C++11から使えるようになった{}初期化なら
いくらかマシじゃないかな。
class Aclass {
public:
Aclass(int val) : _member {val} {}
...
}
メンバに初期値を与える部分が関数呼び出しに見える、
という事態は解消されてるかと。
class Aclass {
public:
Aclass(int val) : _member(val) {}
...
}
の評判が悪いけど、C++11から使えるようになった{}初期化なら
いくらかマシじゃないかな。
class Aclass {
public:
Aclass(int val) : _member {val} {}
...
}
メンバに初期値を与える部分が関数呼び出しに見える、
という事態は解消されてるかと。
430デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 15:13:21.78ID:edJGSUmw0 >>409
なんでそのnのケースで構文を新たに作る話になりますか…
なんでそのnのケースで構文を新たに作る話になりますか…
431デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/05(日) 15:37:01.01ID:U5vPVsbz0 お前ら
T t(args);
って形の初期化付き変数宣言使ったことも見たこともない素人ばかりかよ...
インスタンスとクラスの違いも知らずに他人と話そうとする迷惑な人もいるし。
T t(args);
って形の初期化付き変数宣言使ったことも見たこともない素人ばかりかよ...
インスタンスとクラスの違いも知らずに他人と話そうとする迷惑な人もいるし。
432デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/05(日) 15:40:38.86ID:+AqtjiW/0 自虐ネタするときはひろしですって言ってください。
433デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 15:47:09.77ID:3uuR82Hq0434デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 16:23:38.88ID:vRj0Z3ir0 >オーバーロードしたコンストラクタ毎に異なる初期値を与えられるんだが>>410の構文でどうやって実現するつもりなんだよ w
ass():{ assmember = 12; }{
....
}
ass(int you ):{ assmember = 99 }{
....
}
ass():{ assmember = 12; }{
....
}
ass(int you ):{ assmember = 99 }{
....
}
435デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 16:32:02.93ID:3uuR82Hq0436デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 16:34:19.30ID:vRj0Z3ir0 知らないでもすぐにまともな構文が考え付くというのに、わざわざ仕様を変更したというのに
またしてもろくでもない構文とは、どういうことだ。
またしてもろくでもない構文とは、どういうことだ。
437デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/05(日) 16:38:07.45ID:qHZ+DCMx0 こんな浅い思いつきだけで喋ってるやつによくつき合ってるな
438デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 17:21:19.00ID:edJGSUmw0439デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/05(日) 17:33:27.29ID:qHZ+DCMx0 >>438
コピー出来ないクラスはどうすんだよ。コンストラクタ内でのメンバーの代入はメンバーの構築とみなすという特殊ルールでも付けるのか?
コピー出来ないクラスはどうすんだよ。コンストラクタ内でのメンバーの代入はメンバーの構築とみなすという特殊ルールでも付けるのか?
440デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 17:35:00.88ID:3uuR82Hq0441デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 17:42:24.41ID:3uuR82Hq0442デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 17:44:56.54ID:edJGSUmw0 >>439
まあYESということもできる
クラスFooのメンバm_a (∈クラスT)は、Fooのコンストラクタ実行前に構築されているはずはないのだから
m_a = (some クラスTのオブジェクト)
というのがコンストラクタ内に現れたら、むしろそれを代入と解釈するわけにはいかない
すわなち話がただちにコピコンの出番に絞られる
まあYESということもできる
クラスFooのメンバm_a (∈クラスT)は、Fooのコンストラクタ実行前に構築されているはずはないのだから
m_a = (some クラスTのオブジェクト)
というのがコンストラクタ内に現れたら、むしろそれを代入と解釈するわけにはいかない
すわなち話がただちにコピコンの出番に絞られる
443デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 17:53:44.93ID:edJGSUmw0444デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 17:58:22.61ID:edJGSUmw0 まあ漏れの案の欠陥としては、
コンストラクタ内でthisを他の関数bar()(すでにコンパイル済みかもしれない)に渡して
barの中でthis->m_aに代入するのはどうなんじゃ、というのはあるが
(C#はこの点現行C++と同じ実行時コストを支払っているハズ…
つまりデフォルトコンストラクタでFoo::m_aを構築した状態でコンストラクタに入る
コンストラクタ内でthisを他の関数bar()(すでにコンパイル済みかもしれない)に渡して
barの中でthis->m_aに代入するのはどうなんじゃ、というのはあるが
(C#はこの点現行C++と同じ実行時コストを支払っているハズ…
つまりデフォルトコンストラクタでFoo::m_aを構築した状態でコンストラクタに入る
445デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 17:59:06.73ID:3uuR82Hq0 >>443
> 基底クラスとconstメンバの初期化以外の用途はコンストラクタ内でのメンバへの(一見)代入(に見える構文)で十分なのでわ!?
お前がそう思うのは勝手だが、わざわざ用途毎に構文を分けるのは悪手だろ
って言うだけのこと
> 基底クラスとconstメンバの初期化以外の用途はコンストラクタ内でのメンバへの(一見)代入(に見える構文)で十分なのでわ!?
お前がそう思うのは勝手だが、わざわざ用途毎に構文を分けるのは悪手だろ
って言うだけのこと
446デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 18:10:51.69ID:edJGSUmw0 スマン>>444の末尾2行は抹消
C#はオブジェクトを参照型でしか扱わないから、明示的にFoo::m_aに対して
どっかで明治t系にnew T()を書かねば何も起きないから、書かなかった場合の実行時コストも糞も無い
C#はオブジェクトを参照型でしか扱わないから、明示的にFoo::m_aに対して
どっかで明治t系にnew T()を書かねば何も起きないから、書かなかった場合の実行時コストも糞も無い
447デフォルトの名無しさん (ワッチョイ 417f-dVlt)
2017/11/05(日) 18:14:02.62ID:XS4+4qja0 ↓structもあるとか言い出すアホ
448デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 18:31:44.21ID:edJGSUmw0449デフォルトの名無しさん (ワッチョイ 6e3e-cSXK)
2017/11/05(日) 18:57:45.52ID:rSDVGL6P0 しっかし「漏れ」って久々に聞いたぞ。
450デフォルトの名無しさん (ワッチョイ c212-Q/5A)
2017/11/05(日) 19:58:56.84ID:miuEyx390 黎明期からROMやっててUNIX板の騒動を解決した御仁もいるんだろ
451デフォルトの名無しさん (ブーイモ MM6d-Osc9)
2017/11/05(日) 21:08:22.04ID:g4RG1qZKM >>361
<<を使ったフォーマットだと語順を簡単に変えられなくて翻訳対応しづらいという問題もある。
<<を使ったフォーマットだと語順を簡単に変えられなくて翻訳対応しづらいという問題もある。
452デフォルトの名無しさん (ワッチョイ 79f2-7T4N)
2017/11/06(月) 04:26:03.89ID:2+QNBq450 なんか、相談室じゃなく、テクニックを披露し合って
自慢ごっこスレになってるな。
初心者は入れないし、もし書いたら、さげすむばかりだし。
本当に自慢ごっこスレだな。
おまえらだって、最初はなんにも知らなかった・わからなかったのに。
ちょっとわかる様になったら、自慢ごっこだな。
本当にわかっている人は、簡単な言語で良いソフトを作っているよ。
テクニック自慢ごっこはやめれ。
自慢ごっこスレになってるな。
初心者は入れないし、もし書いたら、さげすむばかりだし。
本当に自慢ごっこスレだな。
おまえらだって、最初はなんにも知らなかった・わからなかったのに。
ちょっとわかる様になったら、自慢ごっこだな。
本当にわかっている人は、簡単な言語で良いソフトを作っているよ。
テクニック自慢ごっこはやめれ。
453デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/06(月) 05:16:27.05ID:gbsDrhzw0 テクニックでもなんでもない
「c++知らない人の考えた正しいc++論」なんか要らんってだけ
「c++知らない人の考えた正しいc++論」なんか要らんってだけ
454デフォルトの名無しさん (ワッチョイ 1e7f-3ZLQ)
2017/11/06(月) 05:26:32.69ID:BSAOW8np0 煽れば答えを教えてくれると思ってるとでも思ってるのかねぇ。
まともな人はスルーするだけだし、テキトーに答える人がいてそれにかみつく人がいて荒れるいつもの流れ。
まともな人はスルーするだけだし、テキトーに答える人がいてそれにかみつく人がいて荒れるいつもの流れ。
455デフォルトの名無しさん (ワッチョイ 1e7f-3ZLQ)
2017/11/06(月) 05:30:04.94ID:BSAOW8np0456デフォルトの名無しさん (ワッチョイ 45c3-Q/5A)
2017/11/06(月) 05:52:30.70ID:YMdKjlXe0 visual studio comunity 2015のc++で下記コンソールプログラムを実行すると
「0x73AD36A8 (tmmon.dll) で例外がスローされました (ConsoleApplication1.exe 内)
: 0xC0000005: 場所 0x0058F180 の読み取り中にアクセス違反が発生しました」
というエラーが出て停止するんだけど、原因が分かったら教えてください
ちなみに、コンパイル時にエラーは出ないし、プログラムも実行できるけど、プログラムの終了時にエラーが出ます
tmmon.dllというのはウィルスバスター関係のソフトらしいので、もしかしたらそちら側の不具合かもしれないけど
#include <iostream>
#include <conio.h>
using namespace std;
#define num 5000
class CLASS_A {
};
int main()
{
CLASS_A** ppa = new CLASS_A*[num];
for (int i = 0; i < num; i++)
ppa[i] = new CLASS_A;
for (int i = 0; i < num; i++)
delete ppa[i];
delete ppa;
cout << "hit any key!" << endl;
char ch = (char)_getch();
return 0;
}
「0x73AD36A8 (tmmon.dll) で例外がスローされました (ConsoleApplication1.exe 内)
: 0xC0000005: 場所 0x0058F180 の読み取り中にアクセス違反が発生しました」
というエラーが出て停止するんだけど、原因が分かったら教えてください
ちなみに、コンパイル時にエラーは出ないし、プログラムも実行できるけど、プログラムの終了時にエラーが出ます
tmmon.dllというのはウィルスバスター関係のソフトらしいので、もしかしたらそちら側の不具合かもしれないけど
#include <iostream>
#include <conio.h>
using namespace std;
#define num 5000
class CLASS_A {
};
int main()
{
CLASS_A** ppa = new CLASS_A*[num];
for (int i = 0; i < num; i++)
ppa[i] = new CLASS_A;
for (int i = 0; i < num; i++)
delete ppa[i];
delete ppa;
cout << "hit any key!" << endl;
char ch = (char)_getch();
return 0;
}
457デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/06(月) 05:59:29.00ID:7ntrKCQE0 ステップ実行してどこで落ちてるか検証するべし。
これくらいのコードならおえるでしょ。
これくらいのコードならおえるでしょ。
458デフォルトの名無しさん (ワッチョイ e58a-snrl)
2017/11/06(月) 06:01:06.59ID:662yk6z20 少なくともdelete ppa; はdelete[] ppa; じゃなくちゃダメだろ
459デフォルトの名無しさん (ワッチョイ c68a-aGxP)
2017/11/06(月) 06:06:20.61ID:pcHZ0AZV0 C++のクラスのコーディングをCで表現しようとするとどんなコードになる?
460デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/06(月) 06:11:23.92ID:7ntrKCQE0 structで関数ポインタ持たせるとかあるけど。
変換規定はない。
変換規定はない。
461デフォルトの名無しさん (ワッチョイ 45c3-Q/5A)
2017/11/06(月) 06:31:31.92ID:YMdKjlXe0462デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/06(月) 07:31:40.53ID:z+KG8ZZn0463デフォルトの名無しさん (スップ Sd62-aGxP)
2017/11/06(月) 08:03:49.75ID:FJG0yfiKd464デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/06(月) 08:23:52.67ID:Z84gcoL/0465デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/06(月) 09:14:29.24ID:7ntrKCQE0466デフォルトの名無しさん (オッペケ Srf1-K7eU)
2017/11/06(月) 09:20:09.45ID:6kMDcvlvr >>456
>(tmmon.dll) で例外がスローされました
よくあること
Windowsだったらスタートメニューからメンテナンスツール(普通の管理画面ではない)を起動して
モジュールの全アンロードすると起こらなくなる
>(tmmon.dll) で例外がスローされました
よくあること
Windowsだったらスタートメニューからメンテナンスツール(普通の管理画面ではない)を起動して
モジュールの全アンロードすると起こらなくなる
467デフォルトの名無しさん (ワッチョイ 45c3-Q/5A)
2017/11/06(月) 09:48:56.37ID:YMdKjlXe0 >>464
エラーについて検索していたら、こちらのページにVisual studio 2017のdenev.exeと自作アプリの置いてあるフォルダを
ウィルスバスターの例外設定に追加して様子を見るようトレンドマイクロから回答されたという人がいたそうです。
私の場合は2015なので、とりあえず自作プログラムのフォルダを例外設定に追加したところエラーが出なくなりました。
なんか根本解決になっていないような気もするけど、とりあえずこれで様子を見てみます。
http://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4148
ちなみに今気づいたのですが、エラーが出るのはVisual studio 2015のIDE上から実行したときだけで、
プログラム単体で実行したときはエラーは出ないようです。
回答してくださったみなさん、ありがとうございました
エラーについて検索していたら、こちらのページにVisual studio 2017のdenev.exeと自作アプリの置いてあるフォルダを
ウィルスバスターの例外設定に追加して様子を見るようトレンドマイクロから回答されたという人がいたそうです。
私の場合は2015なので、とりあえず自作プログラムのフォルダを例外設定に追加したところエラーが出なくなりました。
なんか根本解決になっていないような気もするけど、とりあえずこれで様子を見てみます。
http://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4148
ちなみに今気づいたのですが、エラーが出るのはVisual studio 2015のIDE上から実行したときだけで、
プログラム単体で実行したときはエラーは出ないようです。
回答してくださったみなさん、ありがとうございました
468デフォルトの名無しさん (ワッチョイ 45c3-Q/5A)
2017/11/06(月) 09:51:12.88ID:YMdKjlXe0469デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/06(月) 10:48:41.89ID:Z84gcoL/0 #include <boost/pool/pool_alloc.hpp>
サンプルをテスト使用としたらTIのCCSにはこのあたりのライブラリがないんだが、このライブラリって
古いのだろうな?
boost::fast_pool_allocator<int> とかをテストしたいのだが、新しいライブラリはどれになるんだろうか?
サンプルをテスト使用としたらTIのCCSにはこのあたりのライブラリがないんだが、このライブラリって
古いのだろうな?
boost::fast_pool_allocator<int> とかをテストしたいのだが、新しいライブラリはどれになるんだろうか?
470デフォルトの名無しさん (ワッチョイ 2e80-frTj)
2017/11/06(月) 12:11:13.49ID:FN/Llmne0471デフォルトの名無しさん (スップ Sd62-aGxP)
2017/11/06(月) 12:13:38.44ID:FJG0yfiKd >>465
C++ならできるだろうけどCだとできる...?
C++ならできるだろうけどCだとできる...?
472デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/06(月) 21:05:16.36ID:7ntrKCQE0473はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-lboT)
2017/11/06(月) 21:12:28.45ID:MXn0CmOw0474デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/06(月) 21:14:53.41ID:7ntrKCQE0475デフォルトの名無しさん (ブーイモ MMb6-Osc9)
2017/11/06(月) 22:45:43.65ID:r9+CDuOfM >>471
glibを真似たらいいよ。
glibを真似たらいいよ。
476デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/06(月) 22:51:39.40ID:z+KG8ZZn0 記法を似せたいだけならともかく、関数ポインタを使うところはC++でいうところのvirtual functionでそれをクラスのIFとするのはC++でもめったにやらんわな。
477デフォルトの名無しさん (ワッチョイ c28a-Lt6+)
2017/11/06(月) 23:44:50.11ID:SClVOYaP0 COM(Component Object Model)はC++及びCでバイナリ互換のオブジェクトを作ることが出来る
vtblの配置は言語仕様上は定められていないが、MSがCOM(OLE2)を実装するにあたって定めた配置にしている処理系が殆どだ
vtblの配置は言語仕様上は定められていないが、MSがCOM(OLE2)を実装するにあたって定めた配置にしている処理系が殆どだ
478デフォルトの名無しさん (ワッチョイ 469f-lboT)
2017/11/07(火) 02:44:04.83ID:5kOZtFPy0 BisonでC語風の言語作ってるのですが、代入の構文が衝突してしまい困っています。
bison.yy: conflicts: 5 shift/reduce
*の回数を記録、Identifier = expression という構文を作りたいのですが、いい方法ありませんか?
*の検出はC語風のポインターを使うための処理です。
assignList :
assign {$$=new StatementAssignList($1);}
|assignList assign {$$=$1->add($2);}
;
assign :
Identifier '[' expression ']' "=" expression {$$=new StatementAssignVariable($1,$3,$6);} // 変数に代入:名前[式]=式;
| Identifier "=" expression {$$=new StatementAssignVariable($1, 0,$3);} // 変数に代入:名前=式;
| "*" {$$=new StatementAssignPtr();}
;
class StatementAssignList : public Statement{
public: std::vector<Statement *>m_list;
~StatementAssignList(){for(auto &p:m_list) delete p;}
StatementAssignList(Statement*pStatement){m_list.push_back(pStatement);}
StatementAssignList *add(Statement *pStatement){m_list.push_back(pStatement);return this;};
}
現在は、m_listで、StatementAssignPtr()の個数を調べてStatementAssignVariableの処理につなぐことを考えてます。
bison.yy: conflicts: 5 shift/reduce
*の回数を記録、Identifier = expression という構文を作りたいのですが、いい方法ありませんか?
*の検出はC語風のポインターを使うための処理です。
assignList :
assign {$$=new StatementAssignList($1);}
|assignList assign {$$=$1->add($2);}
;
assign :
Identifier '[' expression ']' "=" expression {$$=new StatementAssignVariable($1,$3,$6);} // 変数に代入:名前[式]=式;
| Identifier "=" expression {$$=new StatementAssignVariable($1, 0,$3);} // 変数に代入:名前=式;
| "*" {$$=new StatementAssignPtr();}
;
class StatementAssignList : public Statement{
public: std::vector<Statement *>m_list;
~StatementAssignList(){for(auto &p:m_list) delete p;}
StatementAssignList(Statement*pStatement){m_list.push_back(pStatement);}
StatementAssignList *add(Statement *pStatement){m_list.push_back(pStatement);return this;};
}
現在は、m_listで、StatementAssignPtr()の個数を調べてStatementAssignVariableの処理につなぐことを考えてます。
479デフォルトの名無しさん (ワッチョイ 1e7f-3ZLQ)
2017/11/07(火) 04:38:27.99ID:PQkUnwQq0 >>478
expressionがどうなってるのか知らないけどその文法だと
a=expr * a=expr * *
みたいに書けてしまうけど良いのか?
「左辺に書けるもの」を分けて整理すべし
C言語風ならC言語の文法を参考にしてもいいと思うけど
expressionがどうなってるのか知らないけどその文法だと
a=expr * a=expr * *
みたいに書けてしまうけど良いのか?
「左辺に書けるもの」を分けて整理すべし
C言語風ならC言語の文法を参考にしてもいいと思うけど
480デフォルトの名無しさん (ワッチョイ 469f-lboT)
2017/11/07(火) 05:07:39.94ID:5kOZtFPy0 アドバイスありがとうございます。
expressionは、 =禁止していますので、a = expr*a=expr * * は出来ないようにしてます。
手動で*の数を記述してみたのですが、conflicts: 3 shift/reduce となって混乱してます。
こんな感じ。。StatementAssignVariable()の第一引数を *の数にして実験。
statement :
Identifier "=" expression {$$=new StatementAssignVariable(0, 省略); }
| "*" Identifier "=" expression { $$= new StatementAssignVariable(1, 省略); }
| "*" "*" Identifier "=" expression { $$= new StatementAssignVariable(2, 省略); }
;
gcc 3はbisonのソース有ったので見たのですが、難解でしたorz
構文の設計ムズカシイ
conflicts: 3 shift/reduce無視しちゃっていいのかなぁ。。
expressionは、 =禁止していますので、a = expr*a=expr * * は出来ないようにしてます。
手動で*の数を記述してみたのですが、conflicts: 3 shift/reduce となって混乱してます。
こんな感じ。。StatementAssignVariable()の第一引数を *の数にして実験。
statement :
Identifier "=" expression {$$=new StatementAssignVariable(0, 省略); }
| "*" Identifier "=" expression { $$= new StatementAssignVariable(1, 省略); }
| "*" "*" Identifier "=" expression { $$= new StatementAssignVariable(2, 省略); }
;
gcc 3はbisonのソース有ったので見たのですが、難解でしたorz
構文の設計ムズカシイ
conflicts: 3 shift/reduce無視しちゃっていいのかなぁ。。
481デフォルトの名無しさん (ワッチョイ 4502-S32u)
2017/11/07(火) 05:27:52.17ID:2eQgtTM30 > コンパイル時にエラーは出ないし、プログラムも実行できるけど、プログラムの終了時にエラー
スタック破壊の典型的な症状だな
スタック破壊の典型的な症状だな
482デフォルトの名無しさん (ワッチョイ 1e7f-3ZLQ)
2017/11/07(火) 07:17:12.36ID:PQkUnwQq0 >>480
いや、assignListはassignの1以上の繰り返しで、assignは
identifier [ expression ] = expression
identifier = expression
*
のどれでも良いのだからassignListは
a=b * a=b * * a[b]=c *
みたいにassignを自由な順番で書けてしまうよね?
おそらくexpressionに2項の乗算が入ってるでしょ
それでセミコロンで区切らない文法とか?
a = b の次に*が来たときに乗算の右辺を待つ状態へshiftするか、それともa=bをreduceして次の代入文へ移るかが曖昧なのだと思う
常にshift(乗算優先)が望みなら無視してもいいけど、 a=b *c=d (代入二つ)とは書けなくなるかな
いや、assignListはassignの1以上の繰り返しで、assignは
identifier [ expression ] = expression
identifier = expression
*
のどれでも良いのだからassignListは
a=b * a=b * * a[b]=c *
みたいにassignを自由な順番で書けてしまうよね?
おそらくexpressionに2項の乗算が入ってるでしょ
それでセミコロンで区切らない文法とか?
a = b の次に*が来たときに乗算の右辺を待つ状態へshiftするか、それともa=bをreduceして次の代入文へ移るかが曖昧なのだと思う
常にshift(乗算優先)が望みなら無視してもいいけど、 a=b *c=d (代入二つ)とは書けなくなるかな
483デフォルトの名無しさん (ワッチョイ 45c3-Q/5A)
2017/11/07(火) 09:38:50.61ID:Nwc3R7kX0 >>481
あれから少し調べてみたけど、クラスを使わない、このプログラムでもエラーが出ることが分かりました
またnumの値によっても変わるみたいで、このプログラムの場合はnumを3805まで減らすとエラーが出なくなります
(昨日のプログラムの場合は、また別の値だったと思うけど)
エラーが出るのはIDE上で動かした場合だけで、プログラム単体で動かした場合はエラーが出ないからIDEの不具合なのかな?
マイクロソフトに報告するべき?
#include <iostream>
#include <conio.h>
using namespace std;
#define num 5000
int main()
{
int** ppa = new int*[num];
for (int i = 0; i < num; i++)
ppa[i] = new int;
for (int i = 0; i < num; i++)
delete ppa[i];
delete []ppa;
cout << "hit any key!" << endl;
char ch = (char)_getch();
return 0;
}
あれから少し調べてみたけど、クラスを使わない、このプログラムでもエラーが出ることが分かりました
またnumの値によっても変わるみたいで、このプログラムの場合はnumを3805まで減らすとエラーが出なくなります
(昨日のプログラムの場合は、また別の値だったと思うけど)
エラーが出るのはIDE上で動かした場合だけで、プログラム単体で動かした場合はエラーが出ないからIDEの不具合なのかな?
マイクロソフトに報告するべき?
#include <iostream>
#include <conio.h>
using namespace std;
#define num 5000
int main()
{
int** ppa = new int*[num];
for (int i = 0; i < num; i++)
ppa[i] = new int;
for (int i = 0; i < num; i++)
delete ppa[i];
delete []ppa;
cout << "hit any key!" << endl;
char ch = (char)_getch();
return 0;
}
484デフォルトの名無しさん (ワッチョイ 45c3-Q/5A)
2017/11/07(火) 09:48:51.30ID:Nwc3R7kX0485デフォルトの名無しさん (ワッチョイ 469f-lboT)
2017/11/07(火) 16:23:51.40ID:5kOZtFPy0 >>482
再帰的下向きコンパイラ見たいな構造で、expressionに、乗算2つ入ってます。
%prec を排除して文法作ってましたが、曖昧な表現が衝突の原因っぽいですね。
文法修正してみます。ありがとうございました。
expression : term1 | expression "||" term1 {$$=省略;} ;
term1 : term2 | term1 "&&" term2 {$$=省略;};
省略 ...
term7 : term8 | term7 '+' term8 {$$=省略;}; term7 '-' term8 {$$=省略;};
term8 : factor
| term8 '*' factor {$$=省略;}
| term8 '/' factor {$$=省略;}
| term8 '%' factor {$$=省略;}
factor:
'-' factor {$$=省略} // -xxの時 NEGの処理
| '*' factor {$$=省略;} // *xxの時 ポインターの処理
| '(' expr '){ $$ = $2; } // ()
| func // 関数呼び出し
| value // 変数
| number { $$ = $1; }// 数値
;
再帰的下向きコンパイラ見たいな構造で、expressionに、乗算2つ入ってます。
%prec を排除して文法作ってましたが、曖昧な表現が衝突の原因っぽいですね。
文法修正してみます。ありがとうございました。
expression : term1 | expression "||" term1 {$$=省略;} ;
term1 : term2 | term1 "&&" term2 {$$=省略;};
省略 ...
term7 : term8 | term7 '+' term8 {$$=省略;}; term7 '-' term8 {$$=省略;};
term8 : factor
| term8 '*' factor {$$=省略;}
| term8 '/' factor {$$=省略;}
| term8 '%' factor {$$=省略;}
factor:
'-' factor {$$=省略} // -xxの時 NEGの処理
| '*' factor {$$=省略;} // *xxの時 ポインターの処理
| '(' expr '){ $$ = $2; } // ()
| func // 関数呼び出し
| value // 変数
| number { $$ = $1; }// 数値
;
486はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-lboT)
2017/11/07(火) 21:03:50.18ID:t2a48+le0 >>477
C++ 用の宣言と C 用の宣言がマクロで分岐するようになってるのを読んだことが有るんだけど、
C++ で引数を参照で渡してるやつが C ではポインタになってて、
それってバイナリレベルでは互換性があるんだ〜と思ったことがある。
C++ 用の宣言と C 用の宣言がマクロで分岐するようになってるのを読んだことが有るんだけど、
C++ で引数を参照で渡してるやつが C ではポインタになってて、
それってバイナリレベルでは互換性があるんだ〜と思ったことがある。
487デフォルトの名無しさん (ワッチョイ 4de3-dVlt)
2017/11/07(火) 21:13:18.56ID:LIKWanez0488デフォルトの名無しさん (ワッチョイ 469f-lboT)
2017/11/07(火) 21:59:05.61ID:5kOZtFPy0 >>483
試しにvs2015とvs2017で動かしてみたんですが、正常に動きますよ?デストラクタ確認でちゃんと動作してるみたいです。
ch = (char)_getch(); ってとこは書き換えて、getchar(); にしましたが。。
#include <iostream>
#include <conio.h>
using namespace std;
#define num 5000
void test1()
{
int ** ppa = new int *[num];
for (int i = 0; i < num; i++) { ppa[i] = new int; }
for (int i = 0; i < num; i++) delete ppa[i];
delete[]ppa;
cout << "hit any key!" << endl;
}
class MyInt { public:int n; MyInt(int i) :n(i) {}~MyInt() { printf("~MyInt %d\n", n); } };
void test2()
{
MyInt ** ppa = new MyInt *[num];
for (int i = 0; i < num; i++) { ppa[i] = new MyInt(i); }
for (int i = 0; i < num; i++) delete ppa[i];
delete[]ppa;
cout << "hit any key!" << endl;
}
int main(){
test1();test2(); //共に普通に動作確認済み
getchar();return 0;
}
試しにvs2015とvs2017で動かしてみたんですが、正常に動きますよ?デストラクタ確認でちゃんと動作してるみたいです。
ch = (char)_getch(); ってとこは書き換えて、getchar(); にしましたが。。
#include <iostream>
#include <conio.h>
using namespace std;
#define num 5000
void test1()
{
int ** ppa = new int *[num];
for (int i = 0; i < num; i++) { ppa[i] = new int; }
for (int i = 0; i < num; i++) delete ppa[i];
delete[]ppa;
cout << "hit any key!" << endl;
}
class MyInt { public:int n; MyInt(int i) :n(i) {}~MyInt() { printf("~MyInt %d\n", n); } };
void test2()
{
MyInt ** ppa = new MyInt *[num];
for (int i = 0; i < num; i++) { ppa[i] = new MyInt(i); }
for (int i = 0; i < num; i++) delete ppa[i];
delete[]ppa;
cout << "hit any key!" << endl;
}
int main(){
test1();test2(); //共に普通に動作確認済み
getchar();return 0;
}
489デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/07(火) 22:01:54.27ID:aP9yM4om0 結論。Newすんな。ベクタ使え。
490デフォルトの名無しさん (ワッチョイ 42e7-lboT)
2017/11/08(水) 00:05:45.23ID:b+QUYReX0 伸び縮みしないんだったらunique_ptrで十分じゃん
491デフォルトの名無しさん (ワッチョイ 794f-mNd+)
2017/11/08(水) 00:17:24.11ID:NuL34q9d0492デフォルトの名無しさん (ワッチョイ 4502-S32u)
2017/11/08(水) 06:08:53.08ID:Qxc+LNev0 ウイルスバスターが干渉しているっぽいなら
VirtualBoxでウイルスバスターのない仮想環境を作って
その中で動かしてみればええやん
VirtualBoxでウイルスバスターのない仮想環境を作って
その中で動かしてみればええやん
493デフォルトの名無しさん (ワッチョイ 2e80-frTj)
2017/11/08(水) 06:30:19.02ID:pFtekju40 セキュリティソフトを動かしていたら、多くのアプリは、正常に動かない
多くのアプリの説明書に、そう書いてある
多くのアプリの説明書に、そう書いてある
494デフォルトの名無しさん (ワッチョイ 45c3-Q/5A)
2017/11/08(水) 07:29:57.54ID:/yzKqtBG0 >>487 cin.get(); とgetchar() もやってみたけど同じでした
>>488 ウィルスバスターはインストールされているでしょうか?
エラーを出すのがウィルスバスターなので、ウィルスバスターの入っている環境じゃないと出ないようです
>>489 vector使ってみたけど同じでした。今までvectorってあまり使ったことなかったけど、これからはvectorを使うことにしよう
int main()
{
vector< vector<int> > ppa;
ppa.resize(5000);
for (int i = 0; i < 5000; i++ )
ppa[i].resize(20);
cout << "hit any key!" << endl;
char ch = (char)_getch();
return 0;
}
>>490 実際のプログラムでは伸び縮みします
>>491 そうですね、ウィルスバスター側の問題かもしれない。トレンドマイクロに問い合わせしてみようかな?
>>492 ウィルスバスターを終了した状態ではエラーは出ないことは確認しています
ただ、visual studioとウィルスバスターのどちら側に問題があるかは分からないけれども
>>493 そうですね、でもウィルスバスターを止めるわけにもいかないので
とりあえず、プログラムを最後まで実行させなければ問題ないので、IDEから強制終了することで対応しようと思います。
プログラム単体で実行したときはエラーは出ないので
>>488 ウィルスバスターはインストールされているでしょうか?
エラーを出すのがウィルスバスターなので、ウィルスバスターの入っている環境じゃないと出ないようです
>>489 vector使ってみたけど同じでした。今までvectorってあまり使ったことなかったけど、これからはvectorを使うことにしよう
int main()
{
vector< vector<int> > ppa;
ppa.resize(5000);
for (int i = 0; i < 5000; i++ )
ppa[i].resize(20);
cout << "hit any key!" << endl;
char ch = (char)_getch();
return 0;
}
>>490 実際のプログラムでは伸び縮みします
>>491 そうですね、ウィルスバスター側の問題かもしれない。トレンドマイクロに問い合わせしてみようかな?
>>492 ウィルスバスターを終了した状態ではエラーは出ないことは確認しています
ただ、visual studioとウィルスバスターのどちら側に問題があるかは分からないけれども
>>493 そうですね、でもウィルスバスターを止めるわけにもいかないので
とりあえず、プログラムを最後まで実行させなければ問題ないので、IDEから強制終了することで対応しようと思います。
プログラム単体で実行したときはエラーは出ないので
495デフォルトの名無しさん (ワッチョイ 2e80-frTj)
2017/11/08(水) 08:02:44.81ID:pFtekju40 多くのアプリの説明書に、
「セキュリティソフトを動かしていたら、正常に動きません」
って書いてあるけど、何でだろ?
「セキュリティソフトを動かしていたら、正常に動きません」
って書いてあるけど、何でだろ?
496デフォルトの名無しさん (スププ Sd62-GEAd)
2017/11/08(水) 08:10:49.38ID:MA4CFapNd 多くのアプリがウィルスみたいなものだから
497デフォルトの名無しさん (ワッチョイ c28a-Lt6+)
2017/11/08(水) 09:33:37.02ID:tfdQ3Vx70 セキュリティソフトは潜在バグを顕在化する事が往々にしてある
498デフォルトの名無しさん (ワッチョイ e58a-snrl)
2017/11/08(水) 10:25:00.80ID:s/8N4dfn0 事情は知らんが開発中はウィルスバスター止めるとか>>467の方法で問題あるのか?
IDEから強制終了とかクソ面倒くさいことやってられんだろ
IDEから強制終了とかクソ面倒くさいことやってられんだろ
499デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/08(水) 10:27:07.11ID:pfXJjTar0 OSの設定に干渉するようなモノはウイルス判定されることがあり得るでしょ。
それが善意かどうかなんて判定のしようがない。
それが善意かどうかなんて判定のしようがない。
500デフォルトの名無しさん (ワッチョイ e58a-snrl)
2017/11/08(水) 10:29:43.39ID:s/8N4dfn0 もしかしてウイルスを作ってるのか?
501デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/08(水) 12:29:57.54ID:/2nLdTDi0502はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-lboT)
2017/11/08(水) 13:26:26.66ID:xvDlz0If0 ウイルスと判定したわけじゃなくて、判定するために干渉した結果としてそうなる場合がある。
コンソールアプリを起動しようとした場合に、一旦サンドボックス的なものの中で起動させてチェックして
直後にあらためて普通に起動するというのを見たことがある。
今回の場合、そのコンソールアプリを起動している VS の状況と噛み合わなくなっているのだと思う。
チェックのために何かしら介入しなきゃならないのはしょうがないのだが、
泥臭い、クソみてぇなことの塊なので、まじめに検証するのアホらしいぞ。
コンソールアプリを起動しようとした場合に、一旦サンドボックス的なものの中で起動させてチェックして
直後にあらためて普通に起動するというのを見たことがある。
今回の場合、そのコンソールアプリを起動している VS の状況と噛み合わなくなっているのだと思う。
チェックのために何かしら介入しなきゃならないのはしょうがないのだが、
泥臭い、クソみてぇなことの塊なので、まじめに検証するのアホらしいぞ。
503488 (ワッチョイ 469f-lboT)
2017/11/08(水) 15:52:55.19ID:8BP79/0I0504デフォルトの名無しさん (スプッッ Sd62-3K0w)
2017/11/08(水) 16:01:14.63ID:VRSOCYqCd いまどきクライアントにはウィルス対策ソフトなんて入れないのが主流だと思ってたけど、
そうでもないのかな
そうでもないのかな
505デフォルトの名無しさん (ワッチョイ 1e7f-3ZLQ)
2017/11/08(水) 16:44:23.86ID:XvbXwAqY0 上の現象見ただけでも信用ならんと分かりそうなものだがなあ。
506デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/08(水) 18:24:45.85ID:pfXJjTar0 Win10ならディフェンダーはいってるけど、前のOSとかなら入れるのか?
507デフォルトの名無しさん (ドコグロ MM75-r/51)
2017/11/08(水) 19:40:45.83ID:GPQLPiKHM >>506
XPの時からディフェンダーだわ
XPの時からディフェンダーだわ
508デフォルトの名無しさん (ワッチョイ 794f-mNd+)
2017/11/08(水) 23:47:31.77ID:NuL34q9d0 ノートンのプロセスが勝手にこっちのdllを読み込んあとおかしな状態でアンロードしてアクセス違反おこしてノートンのプロセスがクラッシュするってのはあった。
アンチデバッキングなのかユーザーモードデバッガではアタッチできないからカーネルデバッガやるしかなくて原因見つけるのに結構苦労した。
アンチデバッキングなのかユーザーモードデバッガではアタッチできないからカーネルデバッガやるしかなくて原因見つけるのに結構苦労した。
509デフォルトの名無しさん (ワッチョイ 5f80-UJrp)
2017/11/09(木) 00:57:17.32ID:ej8qpLZc0 Virtual Studioは素人が購入することは考えにくい専門的なソフトだからウイルスバスターのターゲット外なんだよ。
つまりさっさとどっちか捨てろってこった
つまりさっさとどっちか捨てろってこった
510デフォルトの名無しさん (ワッチョイ 5f78-XysI)
2017/11/09(木) 02:17:02.22ID:7vxmA4jM0 Visual Studioでアプリ作っててビルドしたてホヤホヤのプログラムをアヴィラ先生がウィルス認定しやがったのは過去に何度かあったわ
511デフォルトの名無しさん (ワッチョイ ffe8-kEiX)
2017/11/09(木) 07:51:39.95ID:AsVSSCPV0512デフォルトの名無しさん (ワッチョイ dfc3-ySnM)
2017/11/09(木) 08:51:49.76ID:4HUgyouS0513デフォルトの名無しさん (ワッチョイ df8a-i75N)
2017/11/09(木) 11:01:44.29ID:Obd3aNBj0 ウィルスバスターはエラー検出ツールじゃないし無視でいいよ
リソース関連のエラー検出したいならそれなりの検出ツール使うとか静的解析ツール使うとか
リソース関連のエラー検出したいならそれなりの検出ツール使うとか静的解析ツール使うとか
514デフォルトの名無しさん (ワッチョイ 7f34-UxQ8)
2017/11/09(木) 12:14:59.98ID:rcuqnank0 ウィルスバスターミナルとかトーシローかよw
プログラムの仕組み知り尽くしていればまずウィルスなんかに引っ掛からないだろw
プログラムの仕組み知り尽くしていればまずウィルスなんかに引っ掛からないだろw
515デフォルトの名無しさん (ワッチョイ ffeb-ySnM)
2017/11/09(木) 12:33:16.70ID:YfcqoN+X0 教えてくれよ
516デフォルトの名無しさん (スプッッ Sd1f-fei+)
2017/11/09(木) 18:45:17.95ID:+zZRkuiLd 入力したコマンドを別関数に渡して結合してリターンして表示するってコードを作りたい
mainの中のusrとpassは実体もあるから受け渡し含めて問題ないと思うのだけど、
mainのcRetとgetcommandのcommandってどう定義するべきなのだろうか?
動くのは動くのだけど二つとも実体どこー?ってなってます
#include <stdio.h>
#include <stdlib.h>
GetCommand( const char* usr, const char* pass ){
char* command;
/** コマンド作成 **/
sprintf( command, "-u %s:%s", usr, pass );
return command;
}
int main( int argc, char* argv[] ){
char* cRet;
char usr[256] = {};
char pass[256] = {};
/** アカウント名の入力 **/
printf("usr Input : ");
scanf("%s", usr );
/** パスワードの入力 **/
printf("pass Input : ");
scanf("%s", pass );
cRet = GetCommand( usr, pass );
printf( "%s\n", cRet );
return 0;
}
mainの中のusrとpassは実体もあるから受け渡し含めて問題ないと思うのだけど、
mainのcRetとgetcommandのcommandってどう定義するべきなのだろうか?
動くのは動くのだけど二つとも実体どこー?ってなってます
#include <stdio.h>
#include <stdlib.h>
GetCommand( const char* usr, const char* pass ){
char* command;
/** コマンド作成 **/
sprintf( command, "-u %s:%s", usr, pass );
return command;
}
int main( int argc, char* argv[] ){
char* cRet;
char usr[256] = {};
char pass[256] = {};
/** アカウント名の入力 **/
printf("usr Input : ");
scanf("%s", usr );
/** パスワードの入力 **/
printf("pass Input : ");
scanf("%s", pass );
cRet = GetCommand( usr, pass );
printf( "%s\n", cRet );
return 0;
}
517片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd9f-dwJZ)
2017/11/09(木) 18:49:41.22ID:lJJATczwd GetCommand関数のcommand変数をstaticなバッファーにするか、おとなしくstd::stringを使うか、GetCommandにバッファーへのポインターに渡すか。
518デフォルトの名無しさん (スプッッ Sd1f-fei+)
2017/11/09(木) 18:53:06.50ID:+zZRkuiLd >>517
このままのリターン形式だとstaticなバッファー作成しか方法ないってことですよね
このままのリターン形式だとstaticなバッファー作成しか方法ないってことですよね
519片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd9f-dwJZ)
2017/11/09(木) 18:56:36.56ID:lJJATczwd >>518
いや、malloc や、newもあり得る。だれが解放するかは問題だが。
いや、malloc や、newもあり得る。だれが解放するかは問題だが。
520片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd9f-dwJZ)
2017/11/09(木) 19:22:58.90ID:lJJATczwd グローバル変数のバッファーを使うこともできる。
521デフォルトの名無しさん (スプッッ Sd1f-fei+)
2017/11/09(木) 20:43:21.98ID:+zZRkuiLd 考えてみるとバグの温床になりかねんね
単純に格納先の変数を用意して引数に渡すべきだとなった
単純に格納先の変数を用意して引数に渡すべきだとなった
522デフォルトの名無しさん (ドコグロ MM7f-kkiU)
2017/11/09(木) 21:06:06.24ID:HS5Oh82mM523デフォルトの名無しさん (スプッッ Sd1f-fei+)
2017/11/09(木) 21:22:58.42ID:+zZRkuiLd524はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff6f-TPjW)
2017/11/09(木) 22:21:05.91ID:LSUga0nM0 コマンドラインオプションで受渡した方がやりやすいような気もしないでもない。
525デフォルトの名無しさん (ワッチョイ dfcb-2I0o)
2017/11/10(金) 05:13:52.89ID:7MRV7tWB0 こういう内容でstring使わないとか
超のつくマゾプレーだな
超のつくマゾプレーだな
526デフォルトの名無しさん (ワッチョイ 5f78-XysI)
2017/11/10(金) 06:24:08.16ID:wxME+cIA0 ってかCの質問やんけ
527デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/10(金) 06:45:56.53ID:AkYkb8w90 sprintfは領域確保しないでしょ。こういうのがCは危ない。
528デフォルトの名無しさん (ワッチョイ dfc3-ySnM)
2017/11/10(金) 07:58:16.79ID:P63PhvFd0529デフォルトの名無しさん (ワッチョイ 7f9d-vLjR)
2017/11/11(土) 06:46:03.41ID:PUzdOh0e0 >516
1.間違い1
char* command; /** コマンド作成 **/
sprintf( command, "-u %s:%s", usr, pass );
ここが間違いで、sprintfを使う時には、かならず
char commad[256];
のように適当に多めにエリアを確保すること、256バイト確保しておけばメモリーをはみ出すことはまずない。
上の例ではcommandには何が入っているか不定だから、例えば0が入っていたら、メモリーの0番地に
usr,passを書き込んでしまう。だから普通はsprintを行った後で暴走する。
2.間違い2
char commad[256];
このように変更するとGetCommandは正常に動作するが、このcommandはスタックに確保されたメモリー
なのでGetCommandを終了すると、解放されて不定になる。したがってreturn command;はしては
いけない。
3.正しいやりかた
メモリエリアを確保して、それをGetCommnadに渡すのもありだが、引数が増えるので内部で確保してリターン
したいのであれば、memory確保する関数を用意してそこに書き込む。確保したエリアは使い終わったら
自動的に開放できる仕組みにしておく。
char *command = getarea(256);
1.間違い1
char* command; /** コマンド作成 **/
sprintf( command, "-u %s:%s", usr, pass );
ここが間違いで、sprintfを使う時には、かならず
char commad[256];
のように適当に多めにエリアを確保すること、256バイト確保しておけばメモリーをはみ出すことはまずない。
上の例ではcommandには何が入っているか不定だから、例えば0が入っていたら、メモリーの0番地に
usr,passを書き込んでしまう。だから普通はsprintを行った後で暴走する。
2.間違い2
char commad[256];
このように変更するとGetCommandは正常に動作するが、このcommandはスタックに確保されたメモリー
なのでGetCommandを終了すると、解放されて不定になる。したがってreturn command;はしては
いけない。
3.正しいやりかた
メモリエリアを確保して、それをGetCommnadに渡すのもありだが、引数が増えるので内部で確保してリターン
したいのであれば、memory確保する関数を用意してそこに書き込む。確保したエリアは使い終わったら
自動的に開放できる仕組みにしておく。
char *command = getarea(256);
530デフォルトの名無しさん (ワッチョイ df8a-Kfl6)
2017/11/11(土) 06:58:56.29ID:qx0Cuc+s0 256バイト確保しておけばメモリーをはみ出すことはまずない。とかw
文字列連結してるだけなんだから全部std::stringでやればいいだけだよ
文字列連結してるだけなんだから全部std::stringでやればいいだけだよ
531デフォルトの名無しさん (ワッチョイ 7f34-UxQ8)
2017/11/11(土) 07:10:37.49ID:5AYGw8xA0532デフォルトの名無しさん (ワッチョイ 7f9d-vLjR)
2017/11/11(土) 08:19:33.64ID:PUzdOh0e0 >文字列連結してるだけなんだから全部std::stringでやればいいだけだよ
さてもしかりに
char commad[256000]; このくらい十分に確保できたらstringとどっちがあんぜんだろうか?
先ずはstringを使った方がいいと主張する理由を説明できないとな。
「やればいいだけだよ」って誰かがいってたから、という受け売りの信仰ではだめだな。
さてもしかりに
char commad[256000]; このくらい十分に確保できたらstringとどっちがあんぜんだろうか?
先ずはstringを使った方がいいと主張する理由を説明できないとな。
「やればいいだけだよ」って誰かがいってたから、という受け売りの信仰ではだめだな。
533デフォルトの名無しさん (ワッチョイ ffe8-kEiX)
2017/11/11(土) 08:23:18.59ID:qQheN6bd0534デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/11(土) 08:40:17.35ID:FtIHrpnF0 >>533
外部からの長さ無制限の文字列を受け付けるプログラムというのもセキュリティー上問題がある
バッファオーバーフローで即exploitされることは無いが時間をかければクラッシュを引き起こせる
というわけで長さ制限はどこかの時点で必須なのでassertionをOFFにしたsprintf_s()さいこー
外部からの長さ無制限の文字列を受け付けるプログラムというのもセキュリティー上問題がある
バッファオーバーフローで即exploitされることは無いが時間をかければクラッシュを引き起こせる
というわけで長さ制限はどこかの時点で必須なのでassertionをOFFにしたsprintf_s()さいこー
535デフォルトの名無しさん (ワッチョイ df8a-i75N)
2017/11/11(土) 08:42:08.74ID:qx0Cuc+s0536デフォルトの名無しさん (スップ Sd1f-WrWp)
2017/11/11(土) 08:46:05.02ID:JauW0Lbxd スタックオーバーフロー起こしそう
537デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/11(土) 08:58:22.67ID:VdKe4lXM0 >>532
スタックが無駄。
スタックが無駄。
538デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/11(土) 08:59:35.86ID:FtIHrpnF0 ていうかstd::stringにお任せしておけばデータサイズの管理が不要とか池沼の考え
何文字でも受け付けるとかいうのはテストしようが無いからまともな仕様ではない
よってまともな設計は不可能
何文字でも受け付けるとかいうのはテストしようが無いからまともな仕様ではない
よってまともな設計は不可能
539デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/11(土) 09:01:47.94ID:VdKe4lXM0 常識的な範囲で受け入れてくれればよい。
それを行うことで何をしたいのかが見えないなぁ。
それを行うことで何をしたいのかが見えないなぁ。
540デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/11(土) 09:03:17.54ID:FtIHrpnF0 手前の常識がクライアントの常識と思い込むのは池沼のry
541デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/11(土) 09:06:15.75ID:FtIHrpnF0 つか>>537もかなり問題発言
スタックは関数を抜けたら開放されるのだから、
スタック領域を使い果たさないように設計された関数ならスタックをいくら使うかは関数の勝手
ここでも「スタックの消費は少ないほうが良い」という手前の常識が
スタックは関数を抜けたら開放されるのだから、
スタック領域を使い果たさないように設計された関数ならスタックをいくら使うかは関数の勝手
ここでも「スタックの消費は少ないほうが良い」という手前の常識が
542デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/11(土) 09:06:43.21ID:VdKe4lXM0 じゃあ、君はメモリが確保できないことをどう説明するんだい?
スタック大量に確保したら余計引っかかるぞ。
スタック大量に確保したら余計引っかかるぞ。
543デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/11(土) 09:10:47.99ID:VdKe4lXM0 本質は同じ。瞬間メモリ使用量の問題だからな。
少ない方がイイに決まって無いかい?
少ない方がイイに決まって無いかい?
544デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/11(土) 09:17:19.24ID:FtIHrpnF0 >>542
スレッド生成時にそのスレッドが使えるスタックは一般に割り当てが完了するから、
割り当てられた領域をオーバーしなければどう使っても良い
もちろんフルに使ってもヒープの圧迫にはならない
スタックが伸びれば伸びただけヒープ用メモリ領域を圧迫するとか
ごく一部の超ロースペックな組み込み環境(スタックがただ1本だけ=スレッドが1個だけ)限定の話じゃないの;
プログラムのメモリの使い方について一体どんな理解をしているのか;;
スレッド生成時にそのスレッドが使えるスタックは一般に割り当てが完了するから、
割り当てられた領域をオーバーしなければどう使っても良い
もちろんフルに使ってもヒープの圧迫にはならない
スタックが伸びれば伸びただけヒープ用メモリ領域を圧迫するとか
ごく一部の超ロースペックな組み込み環境(スタックがただ1本だけ=スレッドが1個だけ)限定の話じゃないの;
プログラムのメモリの使い方について一体どんな理解をしているのか;;
545デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/11(土) 09:22:37.81ID:VdKe4lXM0 >>544
じゃあnewしても問題なく確保できるじゃないか。
クライアントが不足の文字数ブッコンで落ちるよりはいいと思うけどね。
あと、ほかがヒープ食っててスタック確保できないケースはないの?
なんでもヒープにキックする人嫌い。
じゃあnewしても問題なく確保できるじゃないか。
クライアントが不足の文字数ブッコンで落ちるよりはいいと思うけどね。
あと、ほかがヒープ食っててスタック確保できないケースはないの?
なんでもヒープにキックする人嫌い。
546デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/11(土) 09:23:01.72ID:FtIHrpnF0 >>543
std::string経由でヒープ上にchar commad[256000];を確保する方が
スタック上にchar commad[256000];を確保するより常に優れた設計であるという根拠は?
std::string経由でヒープ上にchar commad[256000];を確保する方が
スタック上にchar commad[256000];を確保するより常に優れた設計であるという根拠は?
547デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/11(土) 09:25:34.33ID:VdKe4lXM0548デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/11(土) 09:26:29.15ID:FtIHrpnF0549デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/11(土) 09:27:27.12ID:VdKe4lXM0550デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/11(土) 09:29:57.09ID:VdKe4lXM0 c++には例外もアルヨ。
551デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/11(土) 09:40:15.26ID:VdKe4lXM0 化石か!
552デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/11(土) 09:42:44.46ID:FtIHrpnF0553デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/11(土) 09:44:02.22ID:FtIHrpnF0554デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/11(土) 09:46:24.25ID:VdKe4lXM0555デフォルトの名無しさん (ワッチョイ 5f7f-zl2n)
2017/11/11(土) 09:47:59.39ID:atpFEB620 スタックに充分な領域を確保したから大丈夫って頭おかしい設計だわ
556デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/11(土) 09:49:50.67ID:FtIHrpnF0557デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/11(土) 09:54:01.12ID:VdKe4lXM0 はいはい。もういいわ。
エラー処理真面目にやるんだったら、そういう方向で考えるけど。
ここではそんなに求められてない。一般感覚が無いとそれ何回もやるのか?
不適当で有名な5chでなにを演説してるのやら。
エラー処理真面目にやるんだったら、そういう方向で考えるけど。
ここではそんなに求められてない。一般感覚が無いとそれ何回もやるのか?
不適当で有名な5chでなにを演説してるのやら。
558デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/11(土) 09:58:28.19ID:FtIHrpnF0 >>555
やみくもにスタック消費量最小を目指すのは、
自分の関数がどれぐらいスタック使うのかおよびスタック領域にどれぐらい余裕があるのか
見積もる手間を惜しんで手抜きしているだけな可能性が微レ存、
ていうか「スタックに充分な領域を確保した」というのが真なら(机上検証、レビュー、テストで担保できたなら
「大丈夫」という結論で何の問題も無いんじゃ…
やみくもにスタック消費量最小を目指すのは、
自分の関数がどれぐらいスタック使うのかおよびスタック領域にどれぐらい余裕があるのか
見積もる手間を惜しんで手抜きしているだけな可能性が微レ存、
ていうか「スタックに充分な領域を確保した」というのが真なら(机上検証、レビュー、テストで担保できたなら
「大丈夫」という結論で何の問題も無いんじゃ…
559デフォルトの名無しさん (ワッチョイ ffa5-ySnM)
2017/11/11(土) 10:07:34.21ID:WEOLmGSE0560デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/11(土) 10:17:10.01ID:FtIHrpnF0 >>559
スタック領域を使い切るのが美徳とは言っていないわけでありまして、
なおかつページングの発生頻度は、メモリ消費箇所がスタックかヒープかの違いよりは
領域へのアクセス頻度の問題ではなかろうかと、
スタック領域を使い切るのが美徳とは言っていないわけでありまして、
なおかつページングの発生頻度は、メモリ消費箇所がスタックかヒープかの違いよりは
領域へのアクセス頻度の問題ではなかろうかと、
561デフォルトの名無しさん (ワッチョイ ffa5-ySnM)
2017/11/11(土) 10:35:02.95ID:WEOLmGSE0 パフォーマンスの話じゃなくて、これが一般には正しくないって言ってるの。
>スレッド生成時にそのスレッドが使えるスタックは一般に割り当てが完了するから、
>割り当てられた領域をオーバーしなければどう使っても良い
>もちろんフルに使ってもヒープの圧迫にはならない
>スレッド生成時にそのスレッドが使えるスタックは一般に割り当てが完了するから、
>割り当てられた領域をオーバーしなければどう使っても良い
>もちろんフルに使ってもヒープの圧迫にはならない
562デフォルトの名無しさん (ワッチョイ 5f78-XysI)
2017/11/11(土) 10:53:30.83ID:opm7+oFX0 んでchar commad[256000];をどうやってリターンするんだ?
563デフォルトの名無しさん (ワンミングク MMdf-ZLBY)
2017/11/11(土) 11:07:32.64ID:WYLE0xS1M 普通ならstd::string使う
char使いたい人は使えばいい
おしまい
char使いたい人は使えばいい
おしまい
564デフォルトの名無しさん (ワッチョイ 5feb-ySnM)
2017/11/11(土) 11:11:42.29ID:d7ebwqzc0 256000という数字にセンスを感じるなあ
565デフォルトの名無しさん (ワッチョイ 7f8a-mtQO)
2017/11/11(土) 11:50:48.17ID:yWjpohs20 > char commad[256000];
しかも0が非ascii
しかも0が非ascii
566デフォルトの名無しさん (ワッチョイ 5f9f-zl2n)
2017/11/11(土) 13:26:05.59ID:cTWJmMx00 >>529
いや、commandを何バイト確保しておこうが snprintf() の方を使った方が良い。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/sprintf.3.html
gcc で asprintf() 使ってもいいなら command は char * でも行ける(その代わり後でfree())。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/asprintf.3.html
いや、commandを何バイト確保しておこうが snprintf() の方を使った方が良い。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/sprintf.3.html
gcc で asprintf() 使ってもいいなら command は char * でも行ける(その代わり後でfree())。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/asprintf.3.html
567デフォルトの名無しさん (ワッチョイ ff7f-wlOk)
2017/11/11(土) 14:07:40.16ID:x64hpPPQ0 scanf("%s"にツッコミなし!
568デフォルトの名無しさん (ワッチョイ 5f9f-zl2n)
2017/11/11(土) 14:52:43.33ID:cTWJmMx00 >>567
あまりに低レベルで目に入らんかったw
あまりに低レベルで目に入らんかったw
569デフォルトの名無しさん (ワッチョイ 7f9d-vLjR)
2017/11/11(土) 17:48:20.77ID:PUzdOh0e0 >んでchar commad[256000];をどうやってリターンするんだ?
だからそれはstringでも同じだな。stringを使えばいいという発想では駄目ということだ。
メモリを確保する必要がある。
しかも、サブルーチンを抜けた後で、何処かでそれを解放する機構が必要だ。サブルーチンを抜けた
後だと自動で解放しない限りは解放する方法はない。つまり肝心なのは自動でメモリ解放機能が
ついていることだ。それがついてないstringクラスなんてこの場合は全く使い道がないってことだ。
だからstringって馬鹿の一つ覚えを言うやつは間違いってことだね。
だからそれはstringでも同じだな。stringを使えばいいという発想では駄目ということだ。
メモリを確保する必要がある。
しかも、サブルーチンを抜けた後で、何処かでそれを解放する機構が必要だ。サブルーチンを抜けた
後だと自動で解放しない限りは解放する方法はない。つまり肝心なのは自動でメモリ解放機能が
ついていることだ。それがついてないstringクラスなんてこの場合は全く使い道がないってことだ。
だからstringって馬鹿の一つ覚えを言うやつは間違いってことだね。
570デフォルトの名無しさん (ワッチョイ df8a-i75N)
2017/11/11(土) 18:01:59.33ID:qx0Cuc+s0 頭おかしい
571デフォルトの名無しさん (ワッチョイ 7fe7-TPjW)
2017/11/11(土) 18:12:16.05ID:NuT5AKLg0 なんかおかしな雰囲気を出してるね
572デフォルトの名無しさん (ワッチョイ 7f33-cd7v)
2017/11/11(土) 18:18:07.19ID:ybMjRTfR0 >>569 std::string はデストラクタで自動でメモリ解放するよ。
573デフォルトの名無しさん (オッペケ Sr33-aNqo)
2017/11/11(土) 18:20:22.00ID:tT1WP+x8r auto f() {
struct { char a[256]; } r{};
return r;
}
int main (){ auto[array] = f(); }
ちょっとスタックが厳しそうだ
struct { char a[256]; } r{};
return r;
}
int main (){ auto[array] = f(); }
ちょっとスタックが厳しそうだ
574デフォルトの名無しさん (ワッチョイ 5f80-UJrp)
2017/11/11(土) 18:43:22.06ID:35XI65Ti0 >>569
本当のバカはその一つすらまともに知りませんでした
本当のバカはその一つすらまともに知りませんでした
575デフォルトの名無しさん (ワッチョイ 5fb3-kEiX)
2017/11/11(土) 19:32:54.25ID:a9mrqTdG0 今どきstd::stringを批判してcharの配列の優位性を説くとか
576デフォルトの名無しさん (ワッチョイ dfcc-TYjb)
2017/11/11(土) 19:56:58.42ID:Hv/PaJUT0 string_viewとか持ち出して言うならともかく
577デフォルトの名無しさん (ワッチョイ 5f80-UJrp)
2017/11/11(土) 20:40:48.77ID:35XI65Ti0578デフォルトの名無しさん (ブーイモ MM83-/Rkm)
2017/11/11(土) 21:23:35.64ID:u9h6IsulM テンプレートって基本ヘッダファイルに書くと思うけど、コンパイル単位ごとに全部コードのコピーが作成されるの?
579デフォルトの名無しさん (ワッチョイ dfcc-TYjb)
2017/11/11(土) 21:25:00.09ID:Hv/PaJUT0 >>577
string_viewって何か知らないのか?
string_viewって何か知らないのか?
580デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/11(土) 21:41:30.08ID:4HyMUlDc0 そこでmoveですよ。
581デフォルトの名無しさん (ワッチョイ 7f33-cd7v)
2017/11/11(土) 21:45:04.19ID:ybMjRTfR0582デフォルトの名無しさん (ワッチョイ 5f80-UJrp)
2017/11/11(土) 22:32:22.44ID:35XI65Ti0 >>579
今回の件にstring_view使ってみなよ
今回の件にstring_view使ってみなよ
583デフォルトの名無しさん (ワッチョイ 5f80-UJrp)
2017/11/11(土) 22:37:09.49ID:35XI65Ti0 もしかして
string_viewとか(無理やり)持ち出して(バッファーを解放しないと)言うならともかく
という意味か?
そうだったらそこまでエスパーにはなれんかったわ
string_viewとか(無理やり)持ち出して(バッファーを解放しないと)言うならともかく
という意味か?
そうだったらそこまでエスパーにはなれんかったわ
584デフォルトの名無しさん (ワッチョイ ffb3-TPjW)
2017/11/11(土) 22:42:02.84ID:aJZfBE3c0 みじゅくもの
585デフォルトの名無しさん (ワッチョイ dfcc-TYjb)
2017/11/12(日) 05:09:14.57ID:yBBP+7vl0 >>583
何か勘違いしているか?
俺は生配列を使いたがるガイキチたちを擁護したいわけじゃないし
もちろん意見が一致していない
C++スレなのにC++のライブラリを食わず嫌いしてるフシのあるやつに
ちょっと話題を振ってみただけだ
何か勘違いしているか?
俺は生配列を使いたがるガイキチたちを擁護したいわけじゃないし
もちろん意見が一致していない
C++スレなのにC++のライブラリを食わず嫌いしてるフシのあるやつに
ちょっと話題を振ってみただけだ
586デフォルトの名無しさん (ワッチョイ 5f80-UJrp)
2017/11/12(日) 05:12:35.53ID:srpvXSqe0 エスパー通訳頼む
587デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/12(日) 05:23:52.17ID:nuCi4dlE0 ストリングビューはストレージを保持しないぞ。
外部からやってきたやつに操作を与えるだけ。
パペットっていうかなんていうか。
外部からやってきたやつに操作を与えるだけ。
パペットっていうかなんていうか。
588デフォルトの名無しさん (ワッチョイ 5f80-UJrp)
2017/11/12(日) 05:33:48.19ID:srpvXSqe0 >>587
誰もそんな事は聞いてないんだけど
誰もそんな事は聞いてないんだけど
589デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/12(日) 07:18:14.98ID:nuCi4dlE0 そっか、当たり前すぎたな。
590デフォルトの名無しさん (ワッチョイ 5feb-ySnM)
2017/11/12(日) 07:30:16.55ID:/72Ra87B0 頭でっかちなアスペ池沼多過ぎか
591デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/12(日) 08:13:37.80ID:SrvHRpLe0 std::stringは有用だがstd::XXXstream系は糞杉
→必然的にsptintf_s()とstd::stringを併用するスタイルになる
いずれワカル
→必然的にsptintf_s()とstd::stringを併用するスタイルになる
いずれワカル
592デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/12(日) 08:22:45.23ID:SrvHRpLe0 および有用だからといってプログラムの動作根拠を成す
数量的関係の把握をサボるというのは話が違う
std::stringにメモリが許す限りいくらでも長い文字列を格納できるから大丈夫とか、
スマポを使っとけばいつか(10万年後かもしれないが)確実に開放してくれるから大丈夫という見込みだけで
テストもせずに青天井なデータ処理を許すプログラムをリリースするのは
素人プログラミングに後退である
ていうか現在の潤沢なメモリ搭載環境では問題の発覚が遅れる分なお悪い
数量的関係の把握をサボるというのは話が違う
std::stringにメモリが許す限りいくらでも長い文字列を格納できるから大丈夫とか、
スマポを使っとけばいつか(10万年後かもしれないが)確実に開放してくれるから大丈夫という見込みだけで
テストもせずに青天井なデータ処理を許すプログラムをリリースするのは
素人プログラミングに後退である
ていうか現在の潤沢なメモリ搭載環境では問題の発覚が遅れる分なお悪い
593デフォルトの名無しさん (ワッチョイ df8a-i75N)
2017/11/12(日) 08:32:07.61ID:11xnBK1L0 10万年後wもうお前黙っておけ
594デフォルトの名無しさん (ワッチョイ 5f78-XysI)
2017/11/12(日) 08:47:13.70ID:qGtn1GtX0 どんなひどいプロジェクトで仕事すれば、こんなパラノイアを発症するんだろうな
595デフォルトの名無しさん (ワッチョイ dfcc-TYjb)
2017/11/12(日) 09:05:22.76ID:yBBP+7vl0 >>592
つーことは、おまえbad_allocをcatchせずに放置してるのか
つーことは、おまえbad_allocをcatchせずに放置してるのか
596デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/12(日) 09:15:31.43ID:SrvHRpLe0 つか今気づいたが>>561は一体何が言いたいんじゃ…
ページ割り当ては論理アドレス上の領域確保に対し透過的なので
>スレッド生成時にそのスレッドが使えるスタックは一般に割り当てが完了するから、
>割り当てられた領域をオーバーしなければどう使っても良い
>もちろんフルに使ってもヒープの圧迫にはならない
の否定根拠にはなりえぬ
ページ割り当ては論理アドレス上の領域確保に対し透過的なので
>スレッド生成時にそのスレッドが使えるスタックは一般に割り当てが完了するから、
>割り当てられた領域をオーバーしなければどう使っても良い
>もちろんフルに使ってもヒープの圧迫にはならない
の否定根拠にはなりえぬ
597デフォルトの名無しさん (ワッチョイ 7fbd-OWtR)
2017/11/12(日) 09:17:28.25ID:SrvHRpLe0 >>595
ていうかむしろ藻前は正常系がbad_allocのcatchに依存した設計してるの?
ていうかむしろ藻前は正常系がbad_allocのcatchに依存した設計してるの?
598デフォルトの名無しさん (ワッチョイ dfcc-TYjb)
2017/11/12(日) 09:25:43.37ID:yBBP+7vl0 >>597
なぜそう思った?
なぜそう思った?
599デフォルトの名無しさん (ワッチョイ 7fb3-kkiU)
2017/11/12(日) 10:48:39.64ID:MOg5phwx0 >>594
お前らがよってたかっていじめるからだろ w
お前らがよってたかっていじめるからだろ w
600デフォルトの名無しさん (ワッチョイ 7f34-UxQ8)
2017/11/12(日) 13:20:18.65ID:cRGoHocf0 まだ516の糞コードの話題やってんのか
まったく飽きないフレンズどもだな
セルリアンに喰われちまえよ
まったく飽きないフレンズどもだな
セルリアンに喰われちまえよ
601デフォルトの名無しさん (ワッチョイ ff5f-/Rkm)
2017/11/12(日) 17:58:51.11ID:mnWm2NGv0 次は20が控えててどんどん進化してるけどmeyers本なしについていける自信がないよ。
17以降遭難者が続出するんじゃなかろうか。
17以降遭難者が続出するんじゃなかろうか。
602デフォルトの名無しさん (ワッチョイ 5f3c-TYjb)
2017/11/12(日) 18:04:43.84ID:Rpn1RmMo0 17ってそんなに難しいか?
14以後ってか11以後、03までのストイックを通り越したマゾプレーからの離脱が
大きなテーマになっていてautoのinitializer_listみたいなミスはしながらも
ちゃんとそれを正していく自浄作用が機能していると俺は思うが
14以後ってか11以後、03までのストイックを通り越したマゾプレーからの離脱が
大きなテーマになっていてautoのinitializer_listみたいなミスはしながらも
ちゃんとそれを正していく自浄作用が機能していると俺は思うが
603デフォルトの名無しさん (ワッチョイ ffe7-ySnM)
2017/11/12(日) 18:39:00.77ID:1bparYl/0 auto_ptrとかgetsとかトライグラフとかboolの++とか
危険で無駄で混乱を招くゴミが続々取り除かれてどんどん使いやすくなってるよね
生ポインタや生配列をいじくり回してメモリ壊すこともほとんどなくなった
危険で無駄で混乱を招くゴミが続々取り除かれてどんどん使いやすくなってるよね
生ポインタや生配列をいじくり回してメモリ壊すこともほとんどなくなった
604デフォルトの名無しさん (アウアウカー Sad3-X+f5)
2017/11/12(日) 20:18:16.94ID:tDIYjV/wa c++の機能がこのまま進歩していったとしてマクロは消えるかな?
606デフォルトの名無しさん (アウアウカー Sad3-X+f5)
2017/11/12(日) 20:33:05.49ID:tDIYjV/wa constexprとかautoのおかげでtemplateもマクロとして使いやすくなったよね。
そう考えるとテンプレートで出来なくてマクロじゃないと出来ないのって何かある?
そう考えるとテンプレートで出来なくてマクロじゃないと出来ないのって何かある?
多重マクロはテンプレートで置き換えられるのだろうか?
お題:http://mevius.2ch.net/test/read.cgi/tech/1432402159/18
ベタな回答:
http://mevius.2ch.net/test/read.cgi/tech/1432402159/106
http://peace.2ch.net/test/read.cgi/tech/1313183984/803
https://code.hackerearth.com/2642c4w
多重マクロによる回答
http://mevius.2ch.net/test/read.cgi/tech/1432402159/128
https://ideone.com/vNZWaH
お題:http://mevius.2ch.net/test/read.cgi/tech/1432402159/18
ベタな回答:
http://mevius.2ch.net/test/read.cgi/tech/1432402159/106
http://peace.2ch.net/test/read.cgi/tech/1313183984/803
https://code.hackerearth.com/2642c4w
多重マクロによる回答
http://mevius.2ch.net/test/read.cgi/tech/1432402159/128
https://ideone.com/vNZWaH
608デフォルトの名無しさん (ワッチョイ 5f3c-TYjb)
2017/11/12(日) 21:24:58.95ID:Rpn1RmMo0 >>605
テンプレートとマクロの本質的な違いがわかってないな
スコープに従うテンプレートやconstと
ほとんど何も考えてないおまえみたいなマクロは
オブジェクト指向という観点からは全く別次元なものだ
テンプレートとマクロの本質的な違いがわかってないな
スコープに従うテンプレートやconstと
ほとんど何も考えてないおまえみたいなマクロは
オブジェクト指向という観点からは全く別次元なものだ
610デフォルトの名無しさん (ワッチョイ 7fe7-TPjW)
2017/11/12(日) 21:52:12.94ID:D2YYnuTs0 オブジェクトたいして指向関係ないだろ
611デフォルトの名無しさん (ワッチョイ 7fe7-TPjW)
2017/11/12(日) 21:52:39.76ID:D2YYnuTs0 何だこの日本語wwww
オブジェクト指向たいして関係ないだろ
オブジェクト指向たいして関係ないだろ
612デフォルトの名無しさん (ワッチョイ 5f7f-zl2n)
2017/11/12(日) 22:01:17.81ID:rtfRb36m0 マクロの乱用をさけるためにテンプレートが発達してきたんだからマクロ使わないでね
613デフォルトの名無しさん (ワッチョイ 5f9f-/Aoa)
2017/11/12(日) 22:17:39.90ID:dvIcUwwY0 オブジェクト指向関たいして係ないだろ
614デフォルトの名無しさん (ワッチョイ ff3e-bbAv)
2017/11/12(日) 22:36:48.97ID:H7C5gFJ50 >>606
文字列リテラルを、リテラルとして連結するのはマクロじゃないと無理じゃないかな。
文字列リテラルを、リテラルとして連結するのはマクロじゃないと無理じゃないかな。
615はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff6f-Ud84)
2017/11/12(日) 23:06:22.93ID:HZk/rPeS0 >>614
不可能ではないと思うけど、そう気軽ではないというのは確かだと思う。
不可能ではないと思うけど、そう気軽ではないというのは確かだと思う。
616デフォルトの名無しさん (ワッチョイ 5f78-XysI)
2017/11/13(月) 00:53:11.35ID:50LJDJg60 const char8_t[] u8hage = "hage"; // = u8"hage"
const char16_t[] u16hage = "ハゲ"; // = u"ハゲ"
const char32_t[] u32hage = "禿"; // = U"禿"
const wchar_t[] whage = "はげ"; // = L"はげ"
みたいなプレフィックス省略が出来ればいいのになって思うときがあるね
const char16_t[] u16hage = "ハゲ"; // = u"ハゲ"
const char32_t[] u32hage = "禿"; // = U"禿"
const wchar_t[] whage = "はげ"; // = L"はげ"
みたいなプレフィックス省略が出来ればいいのになって思うときがあるね
617はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff6f-Ud84)
2017/11/13(月) 01:19:29.77ID:eMI9MrYT0 >>616
Haskell だとリテラルは多相になっていて、型推論で適当な型にあてはめられるんだが……。
C++ では返却値だけ型が違う関数はオーバーロードできないルールがある。
その延長でリテラルは無引数の関数のようなものと考えると文字列リテラルが様々な型で有りうるようなのは難しいと思う。
型の情報が重複してるのがダサいと思うなら型名の方を auto で書くくらいかなぁ。
Haskell だとリテラルは多相になっていて、型推論で適当な型にあてはめられるんだが……。
C++ では返却値だけ型が違う関数はオーバーロードできないルールがある。
その延長でリテラルは無引数の関数のようなものと考えると文字列リテラルが様々な型で有りうるようなのは難しいと思う。
型の情報が重複してるのがダサいと思うなら型名の方を auto で書くくらいかなぁ。
618デフォルトの名無しさん (ワッチョイ dfc3-HGFs)
2017/11/13(月) 02:08:07.11ID:Vao2bSzU0 kotlinとかswiftにあるiterator.forEach{}の構文がc++にもついてほしい
c++だとiterator.for[=]{ }みたいな構文になるんだろうか
c++だとiterator.for[=]{ }みたいな構文になるんだろうか
619デフォルトの名無しさん (ワッチョイ ff3e-bbAv)
2017/11/13(月) 02:48:35.71ID:KYqigAA60620デフォルトの名無しさん (ワッチョイ 5f9f-/Aoa)
2017/11/13(月) 03:24:18.68ID:XQ/CgY2w0 言語仕様変えないと無理かな?
621デフォルトの名無しさん (ワッチョイ 5f80-UJrp)
2017/11/13(月) 04:17:46.93ID:V72qpTkz0 >>619
コンパイル時定数という意味でのリテラルであれば出来るが
コンパイル時定数という意味でのリテラルであれば出来るが
622デフォルトの名無しさん (アウアウカー Sad3-X+f5)
2017/11/13(月) 07:31:48.15ID:zGRAb4NCa623デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/13(月) 07:34:39.03ID:8qKZRJJX0 範囲FORとSTLにfor_eachがある。
http://en.cppreference.com/w/cpp/algorithm/for_each
http://en.cppreference.com/w/cpp/algorithm/for_each
624デフォルトの名無しさん (ドコグロ MMe3-HGFs)
2017/11/13(月) 09:15:04.60ID:JahHbsM6M >>622
変数.for...って書き方がしたい
変数.for...って書き方がしたい
625デフォルトの名無しさん (アウアウカー Sad3-X+f5)
2017/11/13(月) 09:27:56.98ID:zGRAb4NCa 自作クラスならtemplate関数で範囲forを閉じ込めるとか?
試して無いけどこんな感じで
class test{
//begin()とend(),++が定義されているものとする
template<typename Func>
void for_(Func func){
for(auto& it: *this){
func(lt);
}
}
}
試して無いけどこんな感じで
class test{
//begin()とend(),++が定義されているものとする
template<typename Func>
void for_(Func func){
for(auto& it: *this){
func(lt);
}
}
}
626デフォルトの名無しさん (ワッチョイ 5f46-Ngiy)
2017/11/13(月) 09:34:12.47ID:TpgUuavl0 そういう臭い書き方はC++ではあまり採用されない方針
オブジェクト指向じたい、もうあまり言われてなくて
テンプレートによるメタプログラミングが主体になってる
オブジェクト指向を前面に押し出した言語はオワコンになるという法則があって
なもんで、魔除け、キチガイ除けの意味も含めて
Java や C# や C++ など、主流言語は
「マルチパラダイム言語」、「オブジェクト指向をサポート」
といった、ちょっと距離を置いた付き合いかたをしてるね
きっと、「全ての手続きは必ずただ一つのオブジェクトに紐づかなくてはならない」
という強迫観念的ともいえる窮屈な考え方が脳や精神に良くなかったのだろう
本当に精神疾患を引き起こしてリタイアする人多いし
オブジェクト指向じたい、もうあまり言われてなくて
テンプレートによるメタプログラミングが主体になってる
オブジェクト指向を前面に押し出した言語はオワコンになるという法則があって
なもんで、魔除け、キチガイ除けの意味も含めて
Java や C# や C++ など、主流言語は
「マルチパラダイム言語」、「オブジェクト指向をサポート」
といった、ちょっと距離を置いた付き合いかたをしてるね
きっと、「全ての手続きは必ずただ一つのオブジェクトに紐づかなくてはならない」
という強迫観念的ともいえる窮屈な考え方が脳や精神に良くなかったのだろう
本当に精神疾患を引き起こしてリタイアする人多いし
627デフォルトの名無しさん (ワントンキン MMdf-ZLBY)
2017/11/13(月) 09:59:56.81ID:kicNWBgmM 変数forならラッパ作れば終わりだけどなんかつまらないね。
apply(op).for(sequence)とかのほうがインターフェースとしては見栄えがいいかも
apply(op).for(sequence)とかのほうがインターフェースとしては見栄えがいいかも
628デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/13(月) 10:38:35.17ID:8qKZRJJX0629デフォルトの名無しさん (スップ Sd9f-Lcj1)
2017/11/13(月) 10:50:06.32ID:4dN82Cnsd 「制御構造までオブジェクトに属するべき」ってやり過ぎというより単に根拠のない主張だよね。
630デフォルトの名無しさん (ワッチョイ df8a-i75N)
2017/11/13(月) 11:12:29.10ID:lmnXwEnk0 range-based forで十分じゃん何が不満なんだ理解できない
俺が思うのはインデックス取れたらいいなあということぐらい
俺が思うのはインデックス取れたらいいなあということぐらい
631デフォルトの名無しさん (アウアウカー Sad3-X+f5)
2017/11/13(月) 11:19:17.35ID:zGRAb4NCa 書いといてなんだけど624と630の意見に賛成
632デフォルトの名無しさん (スップ Sd9f-Lcj1)
2017/11/13(月) 11:43:20.37ID:4dN82Cnsd zipwith相当のことをどうやって書く?
633デフォルトの名無しさん (JP 0H8f-2Hq5)
2017/11/13(月) 12:13:53.76ID:uodQK+nnH634デフォルトの名無しさん (ワントンキン MMdf-ZLBY)
2017/11/13(月) 12:34:55.34ID:kicNWBgmM >>628
それは全然別の機能だけどな
それは全然別の機能だけどな
635デフォルトの名無しさん (ワッチョイ 5fb3-hKMu)
2017/11/13(月) 13:01:28.76ID:3MWvQR0t0 >>601
meyers本ってそんなに役立つかねぇ
最初のeffective c++ちょろっと読んだ程度なので最近のは知らんけど
あの人の本に従ってる人は、自分で考えて創意工夫しない人が多いよ
セオリーに固執する日本人はそういうパターンに陥りがち
meyers本ってそんなに役立つかねぇ
最初のeffective c++ちょろっと読んだ程度なので最近のは知らんけど
あの人の本に従ってる人は、自分で考えて創意工夫しない人が多いよ
セオリーに固執する日本人はそういうパターンに陥りがち
636デフォルトの名無しさん (ワッチョイ 5f7f-zl2n)
2017/11/13(月) 13:13:06.32ID:pJUCOUGu0 お前らの創意工夫よりメイヤーズの方が100倍信じられるから
637デフォルトの名無しさん (ワッチョイ 5fb3-hKMu)
2017/11/13(月) 13:29:22.72ID:3MWvQR0t0 自分の才能や経験の不足を虎の威で補おうとしてるのなら、終わってるよ
meyersが「こうしろ」と言ってることの、理由まで含めて納得するならいいけど
そうでない人の方が圧倒的に多いからなぁ
>>636がまともな実力持ってるなら、meyersが言うセオリーに当てはまらない場面なんて山ほど経験してるはずだが
meyersが「こうしろ」と言ってることの、理由まで含めて納得するならいいけど
そうでない人の方が圧倒的に多いからなぁ
>>636がまともな実力持ってるなら、meyersが言うセオリーに当てはまらない場面なんて山ほど経験してるはずだが
638デフォルトの名無しさん (スプッッ Sd1f-WrWp)
2017/11/13(月) 13:33:42.96ID:2e8VXpGed >>637
例えばどういう場面?
例えばどういう場面?
639はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff6f-Ud84)
2017/11/13(月) 14:57:06.43ID:eMI9MrYT0 >>635
あーいう本は典型的・基本的な工夫を示すもので、それを踏まえてその先へ行くもんなんだよな。
基本でしかないことに拘泥するのは下策でも、基本的なことすらおさえずにいるのは論外だから役には立つよ。
ある程度の経験を積んでいればああいう本に書かれているようなことは習得していて当たり前だっていう意味で
有用さに疑問を持つって意味かな?
あーいう本は典型的・基本的な工夫を示すもので、それを踏まえてその先へ行くもんなんだよな。
基本でしかないことに拘泥するのは下策でも、基本的なことすらおさえずにいるのは論外だから役には立つよ。
ある程度の経験を積んでいればああいう本に書かれているようなことは習得していて当たり前だっていう意味で
有用さに疑問を持つって意味かな?
640デフォルトの名無しさん (ワッチョイ 5f7f-zl2n)
2017/11/13(月) 15:36:55.69ID:pJUCOUGu0 ド素人の創意工夫とかマジ勘弁してほしいな
セオリーもちょろっとしか知らないのに自分のコードが正しいと思い込んじゃうパターンだなこれは
セオリーもちょろっとしか知らないのに自分のコードが正しいと思い込んじゃうパターンだなこれは
641デフォルトの名無しさん (ワッチョイ 5f78-XysI)
2017/11/13(月) 15:57:04.39ID:50LJDJg60 まぁ公園の立て看板みたいなもんだからな
642635 (ワッチョイ 5fb3-TPjW)
2017/11/13(月) 18:34:02.62ID:Rgprs5DR0643デフォルトの名無しさん (ドコグロ MMe3-kkiU)
2017/11/13(月) 19:14:19.64ID:IBZYfbeXM 俺のつたない経験でも>>637は口先だけの使えない奴だとわかる
644デフォルトの名無しさん (ワッチョイ 5fb3-TPjW)
2017/11/13(月) 19:28:15.39ID:Rgprs5DR0 >>643
そっくりそのまま返すわ、どうせ教えられた通りの書き方しか出来ない無能だろ?
そっくりそのまま返すわ、どうせ教えられた通りの書き方しか出来ない無能だろ?
645デフォルトの名無しさん (ワッチョイ ff5f-/Rkm)
2017/11/13(月) 19:37:54.37ID:jV9TFoOE0646デフォルトの名無しさん (スップ Sd9f-Lcj1)
2017/11/13(月) 19:38:46.06ID:4dN82Cnsd647デフォルトの名無しさん (ワッチョイ 5fb3-TPjW)
2017/11/13(月) 19:41:58.13ID:Rgprs5DR0 >>645
だいぶ昔に借りて読んだ程度のうろ覚えで否定したが
>こういうのあるから鵜呑みは良くないと思うんだよね
meyers本に限らず、これが間違ってると思ってんの?
それとも
>「値を返す関数の戻り値にもconstつけよう」
これが正しいと思ってんの?
だいぶ昔に借りて読んだ程度のうろ覚えで否定したが
>こういうのあるから鵜呑みは良くないと思うんだよね
meyers本に限らず、これが間違ってると思ってんの?
それとも
>「値を返す関数の戻り値にもconstつけよう」
これが正しいと思ってんの?
648デフォルトの名無しさん (ドコグロ MMe3-kkiU)
2017/11/13(月) 19:56:42.22ID:IBZYfbeXM649はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff6f-Ud84)
2017/11/13(月) 20:05:51.53ID:eMI9MrYT0650デフォルトの名無しさん (ブーイモ MM0f-/Rkm)
2017/11/13(月) 20:56:07.38ID:aYJEvERuM651デフォルトの名無しさん (ワッチョイ df8a-cgxJ)
2017/11/13(月) 20:59:24.41ID:8bmF3HL10652デフォルトの名無しさん (ワッチョイ 5fb3-TPjW)
2017/11/13(月) 21:14:54.89ID:Rgprs5DR0 >それに世界中のc++erに査読されて正誤表も常に更新されている本に>>647が突っ込めるようなことは書いてないから。
それ言い出すとmeyers本以外もそうだよね
>自分の才能や経験の不足を虎の威で補おうとしてる
と言ったのがよっぽど図星だったのか?
>「meyersが言うセオリーに当てはまらない場面」で使うべきセオリーを解説した書籍があって然るべき
何言ってんだこいつ・・・・
それ言い出すとmeyers本以外もそうだよね
>自分の才能や経験の不足を虎の威で補おうとしてる
と言ったのがよっぽど図星だったのか?
>「meyersが言うセオリーに当てはまらない場面」で使うべきセオリーを解説した書籍があって然るべき
何言ってんだこいつ・・・・
653デフォルトの名無しさん (ワッチョイ 5fb3-TPjW)
2017/11/13(月) 21:16:31.80ID:Rgprs5DR0 上級者ぶったド素人が煽ってくることが最近多いんだよな・・・・沸かせてしまったようでスマン
654デフォルトの名無しさん (ワッチョイ 7fb3-kkiU)
2017/11/13(月) 21:29:07.66ID:gczEvEcT0 > 上級者ぶったド素人
笑うところなんだろうか...
笑うところなんだろうか...
655デフォルトの名無しさん (ワッチョイ ff7f-wlOk)
2017/11/13(月) 21:38:07.19ID:ai0URxg+0 何の役にも立たないことしか言えないマウンティング野郎なんて放って置けよ
俺も最近C++使う頻度が落ちてきてるので最新の規格について行くのがつらい
おすすめの本を紹介してくれよ
俺も最近C++使う頻度が落ちてきてるので最新の規格について行くのがつらい
おすすめの本を紹介してくれよ
656デフォルトの名無しさん (ワッチョイ 5fb3-TPjW)
2017/11/13(月) 23:12:57.95ID:Rgprs5DR0657デフォルトの名無しさん (ブーイモ MM0f-/Rkm)
2017/11/13(月) 23:44:05.34ID:VhEXZUqOM 愚者は経験に学ぶとはよく言ったものだ。
658はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff6f-Ud84)
2017/11/14(火) 01:12:42.81ID:sf3KY8eH0 >>646
プロであるということとド素人であるということが両立することもあるのが業界の闇ってやつだ。
プロであるということとド素人であるということが両立することもあるのが業界の闇ってやつだ。
659デフォルトの名無しさん (ワッチョイ 5f81-n7le)
2017/11/14(火) 01:26:10.22ID:pNE3yOyS0 プロってプロフェッショナルの略なんでしょう?
意味は専門家、本職
素人とは
その事に経験が浅く、未熟な人。
その道で必要な技能や知識をもっていない人。ま
た、その事を職業・専門としていない人。
両立はかなり困難。
プロになりすます素人なら有るかもしれないが、ちょっと意味が違うよね。
意味は専門家、本職
素人とは
その事に経験が浅く、未熟な人。
その道で必要な技能や知識をもっていない人。ま
た、その事を職業・専門としていない人。
両立はかなり困難。
プロになりすます素人なら有るかもしれないが、ちょっと意味が違うよね。
660デフォルトの名無しさん (ワッチョイ 7f6e-TYjb)
2017/11/14(火) 05:32:45.44ID:Qlty8abH0 両立つーかさ、誤解されるんだよね
俺も時々ご近所のオバチャンに
パソコンのプロなんだと勘違いされる
俺はPCに関しては完全にお客さんなんだが
俺も時々ご近所のオバチャンに
パソコンのプロなんだと勘違いされる
俺はPCに関しては完全にお客さんなんだが
661デフォルトの名無しさん (ドコグロ MMe3-kkiU)
2017/11/14(火) 06:51:17.15ID:FlTFFitRM >>659
その道で生計たててるド素人ってことだろ
その道で生計たててるド素人ってことだろ
662デフォルトの名無しさん (ワッチョイ 7f34-UxQ8)
2017/11/14(火) 06:54:42.56ID:tdyDp5gr0 人に教示して何らかの成果を与えられるレベルの人間を人はその道のプロと呼ぶ
663デフォルトの名無しさん (ワッチョイ df8a-i75N)
2017/11/14(火) 06:59:19.15ID:DJh/5L380 人に教示なんてプロのあり方の一つでしかないだろ
664デフォルトの名無しさん (ブーイモ MM9f-ZZBr)
2017/11/14(火) 07:49:46.74ID:+V+yUas7M >>546
これって皆さんどう考えてますか?
うちのプロジェクトでは規約で
スタック領域は基本16KB未満、
例外で許容出来るのは1.8MBまで、
オートは厳禁と決まっているので
気にしたことなかったです
これって皆さんどう考えてますか?
うちのプロジェクトでは規約で
スタック領域は基本16KB未満、
例外で許容出来るのは1.8MBまで、
オートは厳禁と決まっているので
気にしたことなかったです
665デフォルトの名無しさん (スップ Sd9f-Lcj1)
2017/11/14(火) 07:57:32.24ID:WJGjqzt8d666デフォルトの名無しさん (ブーイモ MM9f-ZZBr)
2017/11/14(火) 08:14:14.12ID:+V+yUas7M667デフォルトの名無しさん (ワッチョイ 5f46-Ngiy)
2017/11/14(火) 09:42:20.00ID:kNpqefN60 なんだ、無能が暴れてたのか
参加できなくて残念だ
参加できなくて残念だ
668デフォルトの名無しさん (ワッチョイ 5fb3-TPjW)
2017/11/14(火) 12:27:34.86ID:RoZqoRkM0669デフォルトの名無しさん (ドコグロ MM7f-kkiU)
2017/11/14(火) 12:52:46.80ID:Dc+h7CROM670デフォルトの名無しさん (ワッチョイ 5f46-Ngiy)
2017/11/14(火) 14:51:11.71ID:kNpqefN60 言うなれば、そうだね
いい年越えたおっさんが、子供を笑ってるのがあまりに滑稽だったから
逆に笑いものにされてる、と言ったところか
あと、自分の発言の都合の良い部分だけ切り抜いて押し通そうとする幼稚な戦法が
通じると思っているあたり、随分な思い上がりだな
いい年越えたおっさんが、子供を笑ってるのがあまりに滑稽だったから
逆に笑いものにされてる、と言ったところか
あと、自分の発言の都合の良い部分だけ切り抜いて押し通そうとする幼稚な戦法が
通じると思っているあたり、随分な思い上がりだな
671デフォルトの名無しさん (ワッチョイ 5f46-Ngiy)
2017/11/14(火) 15:02:26.05ID:kNpqefN60 ああ
> 都合の良い部分だけ切り抜いて押し通そうとする幼稚な戦法
は君の言う「自分で考えて創意工夫」の結果なのかな?
こーゆーのが透けて見えるから愚者と言われるんだろうな
気を付けたほうが良いよ
> 都合の良い部分だけ切り抜いて押し通そうとする幼稚な戦法
は君の言う「自分で考えて創意工夫」の結果なのかな?
こーゆーのが透けて見えるから愚者と言われるんだろうな
気を付けたほうが良いよ
672デフォルトの名無しさん (ワッチョイ 5f8a-j5yg)
2017/11/14(火) 15:16:47.23ID:y8IxqJhx0 次スレからスレタイトルを人生相談室にしよう
673デフォルトの名無しさん (ワッチョイ 5fb3-TPjW)
2017/11/14(火) 15:29:24.63ID:RoZqoRkM0 >いい年越えた
こいた、な
メタプログラミングが主流、の説明してもらえる?
出来ないのなら、煽るしか能のない荒らしだと自覚した方がいいよ
C以来のテクニックやC++でのOOPなどの昔ながらの技術はもう出尽くしてるから
そういう誤解する初心者が多いんだろうけど・・・・まともにメタプログラミングやったことあれば
それが主流だなどと豪語できないよ
こいた、な
メタプログラミングが主流、の説明してもらえる?
出来ないのなら、煽るしか能のない荒らしだと自覚した方がいいよ
C以来のテクニックやC++でのOOPなどの昔ながらの技術はもう出尽くしてるから
そういう誤解する初心者が多いんだろうけど・・・・まともにメタプログラミングやったことあれば
それが主流だなどと豪語できないよ
674デフォルトの名無しさん (ワッチョイ 5f46-Ngiy)
2017/11/14(火) 16:21:46.02ID:kNpqefN60 それは君が文章やスレの流れを全く読めないというだけ
> メタプログラミングが主流、の説明してもらえる?
まさに一部だけ抜き出してマスコミ云々だな
それで一部だけ抜き出して自分のフィールドに持ってきて
ゴチャゴチャ言うのが君の創意工夫なのか?通用しねーよ
>C以来のテクニックやC++でのOOPなどの昔ながらの技術はもう出尽くしてるから
>そういう誤解する初心者が多いんだろうけど・・・・
>まともにメタプログラミングやったことあれば
>それが主流だなどと豪語できないよ
↑全体的に攻撃先がズレてて的外れ
>>618を読めば分かるが、「次期」C++に入ってほしい、というような内容
で、OOにこれ以上施すことはあまりないので、C++標準化委員は
OOよりメタプログラミングを主体に策定している
(から、今更OOっぽい書き方は入らないんじゃね?)と言ってるまで
> メタプログラミングが主流、の説明してもらえる?
まさに一部だけ抜き出してマスコミ云々だな
それで一部だけ抜き出して自分のフィールドに持ってきて
ゴチャゴチャ言うのが君の創意工夫なのか?通用しねーよ
>C以来のテクニックやC++でのOOPなどの昔ながらの技術はもう出尽くしてるから
>そういう誤解する初心者が多いんだろうけど・・・・
>まともにメタプログラミングやったことあれば
>それが主流だなどと豪語できないよ
↑全体的に攻撃先がズレてて的外れ
>>618を読めば分かるが、「次期」C++に入ってほしい、というような内容
で、OOにこれ以上施すことはあまりないので、C++標準化委員は
OOよりメタプログラミングを主体に策定している
(から、今更OOっぽい書き方は入らないんじゃね?)と言ってるまで
675デフォルトの名無しさん (ワッチョイ 5fb3-TPjW)
2017/11/14(火) 16:36:44.71ID:RoZqoRkM0 ああ、そういう流れだったか、そこは誤解してたようだスマン
ただし>>626の4行目以降、全部お前の願望だと思うがw
>まさに一部だけ抜き出してマスコミ云々だな
>それで一部だけ抜き出して自分のフィールドに持ってきて
>ゴチャゴチャ言うのが君の創意工夫なのか?通用しねーよ
うん、しつこいよ
というか>>656でその煽りが不適当だと指摘してるんだが本人謝りもしねーし
そういう悪意ある煽り文(しかも他人の文に乗っかって)を自分で読んでどう思う?
俺がこういうキツイ書き方してる相手は全部煽ってきた相手だけなんだが
>C++標準化委員はOOよりメタプログラミングを主体に策定している
11, 14, 17, 20の新機能見ても、そうは思えない
自分の願望をさも事実かのように書くのはいかんよ
>>618的な書き方が入ると思う、というわけではないけど
ただし>>626の4行目以降、全部お前の願望だと思うがw
>まさに一部だけ抜き出してマスコミ云々だな
>それで一部だけ抜き出して自分のフィールドに持ってきて
>ゴチャゴチャ言うのが君の創意工夫なのか?通用しねーよ
うん、しつこいよ
というか>>656でその煽りが不適当だと指摘してるんだが本人謝りもしねーし
そういう悪意ある煽り文(しかも他人の文に乗っかって)を自分で読んでどう思う?
俺がこういうキツイ書き方してる相手は全部煽ってきた相手だけなんだが
>C++標準化委員はOOよりメタプログラミングを主体に策定している
11, 14, 17, 20の新機能見ても、そうは思えない
自分の願望をさも事実かのように書くのはいかんよ
>>618的な書き方が入ると思う、というわけではないけど
676デフォルトの名無しさん (ワッチョイ 5f46-Ngiy)
2017/11/14(火) 17:44:34.35ID:kNpqefN60 自分の発言だろうが、他人の発言だろうが
都合のいいところだけを切り取って流れを無視するのは
マスゴミ的って話だろ、そういう余計で姑息な工夫は要らないし
その意味で「お前の創意工夫は要らない」って笑われてるんだろ
誘導尋問じゃねーんだよ
> >C++標準化委員はOOよりメタプログラミングを主体に策定している
> 11, 14, 17, 20の新機能見ても、そうは思えない
あ、っそ
都合のいいところだけを切り取って流れを無視するのは
マスゴミ的って話だろ、そういう余計で姑息な工夫は要らないし
その意味で「お前の創意工夫は要らない」って笑われてるんだろ
誘導尋問じゃねーんだよ
> >C++標準化委員はOOよりメタプログラミングを主体に策定している
> 11, 14, 17, 20の新機能見ても、そうは思えない
あ、っそ
677デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/14(火) 17:54:08.40ID:5jBDp5KP0 新機能の話をしていると初心者はさもそれが当たり前に使えなければならないように感じるがそんなことはない。
俺C++でクラスを自作することかなり少ないし。関数だけでもプログラミングはできる。
constexprも入ってやりやすくなったしな。そしてそれを全部内包するのがC++だ。
俺C++でクラスを自作することかなり少ないし。関数だけでもプログラミングはできる。
constexprも入ってやりやすくなったしな。そしてそれを全部内包するのがC++だ。
678デフォルトの名無しさん (ワッチョイ 5f46-Ngiy)
2017/11/14(火) 18:09:19.85ID:kNpqefN60 朱に交われば赤くなるって諺もあるしなぁ
初めからウンコを触るつもりで取り扱ってないと危険なのかも
思考が染まると、それを通して周りを見るので
ヒントが沢山あっても正しく捉えられなくて
なかなか抜け出せないのかもしれない
それか、初めから頭がおかしかったパターンもあるかも
どっぷりな人はそっちかも
黎明期は集団で流れることがあるからなぁ (なにせ悪は甘美)
学生運動とかいう今考えると理解しがたいのが流行ったり
大人側が組み入れながら徐々に脱却って感じかね
初めからウンコを触るつもりで取り扱ってないと危険なのかも
思考が染まると、それを通して周りを見るので
ヒントが沢山あっても正しく捉えられなくて
なかなか抜け出せないのかもしれない
それか、初めから頭がおかしかったパターンもあるかも
どっぷりな人はそっちかも
黎明期は集団で流れることがあるからなぁ (なにせ悪は甘美)
学生運動とかいう今考えると理解しがたいのが流行ったり
大人側が組み入れながら徐々に脱却って感じかね
679デフォルトの名無しさん (ワッチョイ 5fb3-TPjW)
2017/11/14(火) 18:09:36.71ID:RoZqoRkM0680デフォルトの名無しさん (ワッチョイ 5fa8-lB0v)
2017/11/14(火) 19:35:24.74ID:0CBPSjnu0 C++ってクラスとかテンプレート使うのがパチッとくる
場合はいいけれど、難しいで。
過去のCのプログラムとかC++のクラス使って書き直そうとすると。
実力なしでゴメソ。
場合はいいけれど、難しいで。
過去のCのプログラムとかC++のクラス使って書き直そうとすると。
実力なしでゴメソ。
681デフォルトの名無しさん (スップ Sd9f-Lcj1)
2017/11/14(火) 19:36:24.31ID:WJGjqzt8d OOに関してはひところ純粋主義者が極端な言説を展開してC++をdisる流れがあったから、
それに対する反発と恨みがあるんだろうよ
それに対する反発と恨みがあるんだろうよ
682デフォルトの名無しさん (ワッチョイ 5fa8-lB0v)
2017/11/14(火) 19:45:52.27ID:0CBPSjnu0 >>681
俺もC++でOOのなんたるか理解しようとして心が折れそうになった。
肩身せまそうにbetter Cとしか使ってませんとか。
今ならrubyとか極端な話、powershellのコマンドいじくって
た方がわかりやすい。隠ぺいか(カプセル化)も
中身が細かく知りたいときには、イーッってなるし。
俺もC++でOOのなんたるか理解しようとして心が折れそうになった。
肩身せまそうにbetter Cとしか使ってませんとか。
今ならrubyとか極端な話、powershellのコマンドいじくって
た方がわかりやすい。隠ぺいか(カプセル化)も
中身が細かく知りたいときには、イーッってなるし。
683デフォルトの名無しさん (ワッチョイ 5f46-Ngiy)
2017/11/14(火) 20:21:53.24ID:kNpqefN60 なんだかんだ、OOはオプションのうちの一つ
というありきたりの結論
というありきたりの結論
685デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/14(火) 20:54:58.60ID:5jBDp5KP0 >>684
最適化するんなら必須か知らんけど、あるていどはコンパイラさんに投げてもよいのでは?
最適化するんなら必須か知らんけど、あるていどはコンパイラさんに投げてもよいのでは?
686デフォルトの名無しさん (ドコグロ MM7f-kkiU)
2017/11/14(火) 21:53:29.73ID:Dc+h7CROM687デフォルトの名無しさん (ワッチョイ 5fa8-lB0v)
2017/11/14(火) 22:17:43.84ID:0CBPSjnu0688デフォルトの名無しさん (ワッチョイ 5f46-Ngiy)
2017/11/14(火) 23:16:12.96ID:kNpqefN60 OO用語の定義に関して、何か始まりそうな感じだが
もう何十回と繰り返されたか、初心者的にはまだまだやり足りないのかもしれないが
老婆心ながら言わせていただくと、OO用語の定義談義合戦は過去幾度となく繰り返されたが
特に意味はなかったから止めておいたほうが良いよ
OO自体、まじめに考えてもあんま意味ないっつーか、むしろまじめに考えるとドツボっつーか
一見正しいけど、本質的には意味が無いことってあるじゃん
ある視点で見れば正しいんだろうけど、そういうことじゃないっていう
どうしてもやりたいなら止めないけど
もう何十回と繰り返されたか、初心者的にはまだまだやり足りないのかもしれないが
老婆心ながら言わせていただくと、OO用語の定義談義合戦は過去幾度となく繰り返されたが
特に意味はなかったから止めておいたほうが良いよ
OO自体、まじめに考えてもあんま意味ないっつーか、むしろまじめに考えるとドツボっつーか
一見正しいけど、本質的には意味が無いことってあるじゃん
ある視点で見れば正しいんだろうけど、そういうことじゃないっていう
どうしてもやりたいなら止めないけど
689デフォルトの名無しさん (スップ Sd9f-Lcj1)
2017/11/14(火) 23:25:41.26ID:WJGjqzt8d 定義がないんだから議論の正しさの検証も測定もできないしね
690デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)
2017/11/14(火) 23:47:17.80ID:A1uj0brl0 測定機ならAliexpressでいろいろ売ってるよ。
691デフォルトの名無しさん (ワッチョイ ffe7-LJm3)
2017/11/15(水) 04:07:06.94ID:EEpCgCZL0 C++のクラスなんて便利な構造体以上の何者でもない
OO宗教でそれ以上の縛りを入れる必要なんてないわ
OO宗教でそれ以上の縛りを入れる必要なんてないわ
692デフォルトの名無しさん (ワッチョイ ff9f-TPjW)
2017/11/15(水) 04:43:25.86ID:oRL+59ym0 C++の書式がどーの新機能がどーのってプログラマーが、楽になる機能なわけで、本質は、楽してコードが動けばいい。
学術的だとどーでもいい。議論するだけ無駄。
コンパイラは、速くて、安全なアセンブリコードを吐いてくれればいいよ。
学術的だとどーでもいい。議論するだけ無駄。
コンパイラは、速くて、安全なアセンブリコードを吐いてくれればいいよ。
693デフォルトの名無しさん (ワッチョイ 5f02-TYjb)
2017/11/15(水) 05:57:24.70ID:1fEpam2j0 禿もそういう系の揉め方を防ぐように気を使っているらしいな
なんだっけ、どの分野の人々をも侮辱しないとか
全てが1つのクラスから派生しなければならないというのは押しつけがましいとか
なんだっけ、どの分野の人々をも侮辱しないとか
全てが1つのクラスから派生しなければならないというのは押しつけがましいとか
694デフォルトの名無しさん (ブーイモ MMa3-GOXm)
2017/11/15(水) 13:52:35.02ID:qOFIR485M ??数値の比較をしていってある一定の差があるところを区切っていきたいです
たとえば{1,4,7,8,11}って値を先頭から見て行って差が2以上あるところ{1}{4}{7,8}{11}のような感じで区切る
どうすれば実現できるでしょうか
たとえば{1,4,7,8,11}って値を先頭から見て行って差が2以上あるところ{1}{4}{7,8}{11}のような感じで区切る
どうすれば実現できるでしょうか
695デフォルトの名無しさん (スップ Sd9f-Lcj1)
2017/11/15(水) 14:31:02.26ID:l7NNgtZ+d696デフォルトの名無しさん (ワッチョイ 5f04-uywO)
2017/11/15(水) 14:34:11.09ID:ckRbh5hb0 後ろから前を引いて2以下?なら前を前回と同じバッファにプッシュバック。的な感じ。
697デフォルトの名無しさん (ブーイモ MMa3-GOXm)
2017/11/15(水) 14:55:59.73ID:qOFIR485M >>695
後々区切られたまとまり毎に操作したいので
できればまとまり毎にそれぞれ別の変数に入れたいです
ただ操作上絶対に有り得ない数値を区切り文字として使うのでも良いです
{1}{9999}{4}{9999}{7,8}{9999}{11}{9999}
みたいな形で
後々区切られたまとまり毎に操作したいので
できればまとまり毎にそれぞれ別の変数に入れたいです
ただ操作上絶対に有り得ない数値を区切り文字として使うのでも良いです
{1}{9999}{4}{9999}{7,8}{9999}{11}{9999}
みたいな形で
698デフォルトの名無しさん (ワッチョイ 5feb-ySnM)
2017/11/15(水) 15:10:16.47ID:mxK8zV000 こりゃまた大物新人が来ましたね
699デフォルトの名無しさん (ワッチョイ 5f93-B4G6)
2017/11/15(水) 15:49:08.40ID:hv/Fx57R0700デフォルトの名無しさん (スップ Sd9f-Lcj1)
2017/11/15(水) 16:08:47.13ID:l7NNgtZ+d 俺の知らない言語の話だったか...
701デフォルトの名無しさん (ワッチョイ 7feb-sJj3)
2017/11/15(水) 16:15:16.93ID:SXIXTuPm0 麻雀か何かのアルゴリズム?
702デフォルトの名無しさん (ドコグロ MM7f-H2F8)
2017/11/15(水) 16:20:55.95ID:8IQafsadM703デフォルトの名無しさん (ブーイモ MMa3-GOXm)
2017/11/15(水) 16:49:04.26ID:5RHQ4qAcM >>699
その部分は数値の比較と書きました
要素グループのvectorのvectorですか
どのような感じで書けばいいとかどのような調べかたをすれば良いか教えて頂けないでしょうか
取っ掛かりが分からなくて
その部分は数値の比較と書きました
要素グループのvectorのvectorですか
どのような感じで書けばいいとかどのような調べかたをすれば良いか教えて頂けないでしょうか
取っ掛かりが分からなくて
704デフォルトの名無しさん (ワッチョイ 5f9e-xrXY)
2017/11/15(水) 16:49:57.11ID:VtRcCO4N0705デフォルトの名無しさん (ブーイモ MMa3-GOXm)
2017/11/15(水) 16:57:55.30ID:5RHQ4qAcM706デフォルトの名無しさん (ワッチョイ 5feb-ySnM)
2017/11/15(水) 17:01:28.65ID:mxK8zV000 それを何に使うかって聞いてんじゃないの
707デフォルトの名無しさん (ワッチョイ 5f78-XysI)
2017/11/15(水) 17:04:07.50ID:QX/ZMY070 こういう泥臭いのは人に聞くよりもスクリプトでもなんでも良いから書いて試行錯誤すればいいと思うのよ
708デフォルトの名無しさん (ワッチョイ 5f9e-xrXY)
2017/11/15(水) 17:07:39.49ID:VtRcCO4N0 株価やFXの予測とかそんな感じか?
709デフォルトの名無しさん (ワッチョイ 5f68-dioI)
2017/11/15(水) 17:52:07.11ID:SXjwAfn20 >>705
ruby2.2〜ならchunk_while/slice_whenで出来る
ruby2.2〜ならchunk_while/slice_whenで出来る
710デフォルトの名無しさん (ワッチョイ 5f68-dioI)
2017/11/15(水) 18:15:01.29ID:SXjwAfn20 スレタイみてなかた
711デフォルトの名無しさん (ワッチョイ 7f12-ySnM)
2017/11/15(水) 18:49:45.50ID:9uMqyRhU0 >>705
思い付くまま書くとこうなるがもう少し短く出来そうな気もする
Ideone.com - dOQm10 - Online C++ Compiler & Debugging Tool
https://ideone.com/dOQm10
思い付くまま書くとこうなるがもう少し短く出来そうな気もする
Ideone.com - dOQm10 - Online C++ Compiler & Debugging Tool
https://ideone.com/dOQm10
712デフォルトの名無しさん (ブーイモ MMa3-GOXm)
2017/11/15(水) 20:48:51.98ID:5RHQ4qAcM713デフォルトの名無しさん (ワントンキン MMdf-ZLBY)
2017/11/15(水) 20:52:44.99ID:r8JgjB1aM714デフォルトの名無しさん (ワッチョイ ff75-ckd2)
2017/11/15(水) 22:24:21.73ID:KiQc4/2v0 自分なりにやってみた。
https://ideone.com/ugURi1
>>711
vector::insertで領域の再確保が起こると既存のイテレータが破壊されるんで
24-25行あたりの処理はヤバイ。
https://ideone.com/ugURi1
>>711
vector::insertで領域の再確保が起こると既存のイテレータが破壊されるんで
24-25行あたりの処理はヤバイ。
715デフォルトの名無しさん (ワッチョイ 7fa8-ydEu)
2017/11/15(水) 22:45:07.35ID:sivdqd190716デフォルトの名無しさん (ワッチョイ 41eb-RjUU)
2017/11/16(木) 19:03:07.86ID:qgvG7lfo0 すれちがいだけど、
C++が出る前のC言語で、STLが必要な処理はどうしてたの?
C++が出る前のC言語で、STLが必要な処理はどうしてたの?
717片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd22-EXIO)
2017/11/16(木) 19:10:17.36ID:1Qzf60whd >>716
固定バッファとか、ヒープとか、自己参照構造体などで管理してたはず。
固定バッファとか、ヒープとか、自己参照構造体などで管理してたはず。
718デフォルトの名無しさん (ワッチョイ cd83-RjUU)
2017/11/16(木) 20:50:27.90ID:WXeeSnzL0 >>612 ←こういう馬鹿がいるから
719デフォルトの名無しさん (ワッチョイ b9a8-8CrJ)
2017/11/16(木) 21:22:02.83ID:xIkq77qW0 一応つっこみ。
型の一般化がテンプレートと思うが
マクロじゃなくてテンプレート使えって書いてた本もあったような
気がする。
型の一般化がテンプレートと思うが
マクロじゃなくてテンプレート使えって書いてた本もあったような
気がする。
720デフォルトの名無しさん (スップ Sd82-lBnI)
2017/11/16(木) 21:27:58.68ID:w4cxkmV2d >>718
新たな馬鹿の登場かな?
新たな馬鹿の登場かな?
721デフォルトの名無しさん (ブーイモ MMf6-6+Yk)
2017/11/16(木) 21:39:47.71ID:Pxu9bZObM >>716
いや自分で書けばよくね?
いや自分で書けばよくね?
722デフォルトの名無しさん (ワッチョイ dd23-3Z+5)
2017/11/17(金) 08:37:40.63ID:smNhjLrp0 >>716
STL 等はあれば便利なだけで「それが必要な処理」などない。
STL 等はあれば便利なだけで「それが必要な処理」などない。
723デフォルトの名無しさん (ワッチョイ 4178-kX9V)
2017/11/17(金) 09:38:50.05ID:S87VOpst0 >>716
STLで使われているアルゴリズムはC++前からあったものばっかだよ
STLで使われているアルゴリズムはC++前からあったものばっかだよ
724デフォルトの名無しさん (ワントンキン MM52-LokX)
2017/11/17(金) 09:46:53.51ID:4EHSQg4KM 汎用アルゴリズムのコードを業界で共通化することもなく、みんなが各々で実装してたんですか?というアンチテーゼだろ
725デフォルトの名無しさん (ワッチョイ dd23-3Z+5)
2017/11/17(金) 09:59:16.63ID:smNhjLrp0 違うと思うけど?
726デフォルトの名無しさん (ワッチョイ a104-0wpo)
2017/11/17(金) 10:03:14.26ID:NwY4XtJI0 まぁ、ライブラリとして偏在はしてたんだろうけど、あの会社はあのライブラリこの会社はこのライブラリってややこしいことになってたと思う。
727デフォルトの名無しさん (アウアウカー Sa49-6di6)
2017/11/17(金) 16:57:04.66ID:vGXyPrNqa リンクリストと平衡二分木ぐらいなら雑に書いても500行ぐらいでできる
みんな大学の復習と思って書いてたんじゃないかな?
みんな大学の復習と思って書いてたんじゃないかな?
728デフォルトの名無しさん (スップ Sd82-fw3n)
2017/11/17(金) 18:49:47.16ID:a6b9gyRQd 自力で書いてる人の方が多かった
STLがあっても用途によっては独自になるよな
ディスク上に作るとか、JPEGのハフマン符号みたいに表現が決まってる物とか
STLがあっても用途によっては独自になるよな
ディスク上に作るとか、JPEGのハフマン符号みたいに表現が決まってる物とか
729デフォルトの名無しさん (スップ Sd82-fw3n)
2017/11/17(金) 18:52:08.38ID:a6b9gyRQd STLはあくまでお手軽用途
表現縛りがなかったとしても、
ガチガチに最適化する用途では使えない
表現縛りがなかったとしても、
ガチガチに最適化する用途では使えない
730デフォルトの名無しさん (ワッチョイ 8203-Eq1o)
2017/11/17(金) 20:50:18.49ID:HNipYc2I0 最適化できない? なんで??
テンプレートだろ
テンプレートだろ
731デフォルトの名無しさん (ワッチョイ f9b3-AWKa)
2017/11/17(金) 21:51:52.32ID:Eetf/DNi0 テンプレート万能説爆誕。
732デフォルトの名無しさん (ワッチョイ 02e7-GXP8)
2017/11/17(金) 22:21:21.86ID:EgKbzTW+0 if ( オーバーヘッドがない != 最適化される )
733デフォルトの名無しさん (オッペケ Srd1-jTIY)
2017/11/17(金) 22:36:52.56ID:stAFfC8Ar ガチガチに最適化する状況が最近はほとんどない
734デフォルトの名無しさん (ブーイモ MM22-6+Yk)
2017/11/17(金) 23:08:51.45ID:grVEZAi9M ガチガチに最適化すべき場合ってどんな時だろうか
735デフォルトの名無しさん (ワッチョイ f9b3-AWKa)
2017/11/17(金) 23:17:53.86ID:Eetf/DNi0 ガチガチの最適化が仕様に盛り込まれたとき。
736デフォルトの名無しさん (ブーイモ MM22-6+Yk)
2017/11/17(金) 23:46:01.61ID:grVEZAi9M そんな恒真命題は期待してないゾ
証券取引所とかか
証券取引所とかか
737デフォルトの名無しさん (ワッチョイ 2de3-8CrJ)
2017/11/17(金) 23:47:03.87ID:Xj6+FFKd0 プログラミング工数の最適化
738デフォルトの名無しさん (ワッチョイ a980-61Vg)
2017/11/17(金) 23:50:29.19ID:sEHgCDk10 最近は凝ったアルゴリズムより単純な配列(vector)の方が速かったりするうえに、余程古いかクソな標準ライブラリを使用してない限りstd::vectorを最適化する余地なんてほぼ無いわな。
739デフォルトの名無しさん (ワッチョイ 6ee8-jTIY)
2017/11/18(土) 00:03:07.23ID:r8nC/FGp0 最適化はコンパイラに任せてソースは読み易さ重視
std使っとけばデバッガでも追いやすいし
std使っとけばデバッガでも追いやすいし
740デフォルトの名無しさん (ワッチョイ f9b3-AWKa)
2017/11/18(土) 00:08:41.90ID:CUoz+hOS0 拡張ライブラリが有ったとしたら、名前空間はstxになるのかね。
741デフォルトの名無しさん (ワッチョイ f9b3-AWKa)
2017/11/18(土) 00:11:29.34ID:CUoz+hOS0 Qtでウェブサイト作ったら何の問題もなくずっと動き続けてびっくりですよ。
Javaスレの人たちがC++は稼働し続けるとメモリーの分断化で落ちるとか言ってたから、
早く書き直さなきゃって思ってたんだけど。
クライアント用のQtがサーバーで頑健だったのは意外だった。
Javaスレの人たちがC++は稼働し続けるとメモリーの分断化で落ちるとか言ってたから、
早く書き直さなきゃって思ってたんだけど。
クライアント用のQtがサーバーで頑健だったのは意外だった。
742デフォルトの名無しさん (ワッチョイ 4178-kX9V)
2017/11/18(土) 00:14:32.63ID:asu2qdyg0 まぁ意識高い系が言うことなんかその程度ってこった
743デフォルトの名無しさん (ワッチョイ 8d2d-+5lI)
2017/11/18(土) 00:21:40.93ID:GO3RY34O0 >>741
TreeFrogの人?
TreeFrogの人?
744デフォルトの名無しさん (ワッチョイ a980-61Vg)
2017/11/18(土) 01:10:27.30ID:PnwIkFzo0 >>741
クソJavaプログラマーがC++を書くとほぼ間違いなくやるただのメモリリークを俺のせいじゃないということにしたかっただけというのに1票
クソJavaプログラマーがC++を書くとほぼ間違いなくやるただのメモリリークを俺のせいじゃないということにしたかっただけというのに1票
745デフォルトの名無しさん (ワッチョイ 25d6-Eq1o)
2017/11/18(土) 06:06:05.59ID:mIICZMYh0 自分のコードでさえ後で読むと読みやすく書いたつもりが裏目に出ていたりする
746デフォルトの名無しさん (ワッチョイ 0234-1gB9)
2017/11/18(土) 08:23:02.49ID:cx1PUhyJ0 奴らはnewしても決してdeleteしないからな
747デフォルトの名無しさん (ワッチョイ c6e7-RjUU)
2017/11/18(土) 11:32:01.12ID:azZ7ClyG0 俺も最近unique_ptrに任せっきりでdeleteってほとんど書かねえわ
コピコンの=deleteとかは書くけど
コピコンの=deleteとかは書くけど
748デフォルトの名無しさん (ワッチョイ e18a-RuWE)
2017/11/18(土) 12:02:10.83ID:Erlsd62p0 >>739
古いコンパイラ(つっても10年くらい)だと、クラス内の配列をイジるとクラスオブジェクト自体がイジられたことになるので最適化放棄とかしてたしなー
そういうのだとvectorなんて最適化放棄しまくり。
古いコンパイラ(つっても10年くらい)だと、クラス内の配列をイジるとクラスオブジェクト自体がイジられたことになるので最適化放棄とかしてたしなー
そういうのだとvectorなんて最適化放棄しまくり。
749デフォルトの名無しさん (ワッチョイ bd9f-DRcV)
2017/11/18(土) 13:45:01.11ID:6KFO0fze0 バカは素直にスマポ使っとけばいいのにな
750デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/18(土) 14:09:50.22ID:fgAW9Gk/0 >>748
オブジェクトXに対するアクセスの最適化放棄はコンパイラの知りえない形での
Xへの副作用が有り得ると判断された場合に行われるがこれは現用コンパイラでも変わらん
改善したというのはコンパイラの能力向上というよりは、テンプレートによるインライン展開のご利益なのでは…
(つまりstd::vectorは元来最適化向きの進化である
オブジェクトXに対するアクセスの最適化放棄はコンパイラの知りえない形での
Xへの副作用が有り得ると判断された場合に行われるがこれは現用コンパイラでも変わらん
改善したというのはコンパイラの能力向上というよりは、テンプレートによるインライン展開のご利益なのでは…
(つまりstd::vectorは元来最適化向きの進化である
751デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/18(土) 14:13:16.03ID:fgAW9Gk/0 例:
次のコードの並びにおいて、
1と3の読み込み結果は同一とはみなされず、1〜3を通してのX.aのレジスタ割り当ては行われない
1. Xのメンバaを読む
2. 外部リンケージ(かつ素性の知れた組み込み関数以外)の関数foo()を呼ぶ
3. Xのメンバaを読む
特効薬はfoo()のインライン展開
次のコードの並びにおいて、
1と3の読み込み結果は同一とはみなされず、1〜3を通してのX.aのレジスタ割り当ては行われない
1. Xのメンバaを読む
2. 外部リンケージ(かつ素性の知れた組み込み関数以外)の関数foo()を呼ぶ
3. Xのメンバaを読む
特効薬はfoo()のインライン展開
752デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/18(土) 14:16:28.52ID:fgAW9Gk/0 なお手動を厭わないなら次の風にしても良い:
0. auto変数v = X.a
1. X.aを読む代りにvを読む
2. 外部リンケージ(かつ素性の知れた組み込み関数以外)の関数foo()を呼ぶ
3. X.aを読む代りにvを読む
これならいくら古いコンパイラでもvを1〜3を通してレジスタ割り当てすることが気体できる
0. auto変数v = X.a
1. X.aを読む代りにvを読む
2. 外部リンケージ(かつ素性の知れた組み込み関数以外)の関数foo()を呼ぶ
3. X.aを読む代りにvを読む
これならいくら古いコンパイラでもvを1〜3を通してレジスタ割り当てすることが気体できる
753デフォルトの名無しさん (ワッチョイ f9b3-GXP8)
2017/11/18(土) 16:28:12.38ID:gZtBhbAH0 浮動小数点をすべて網羅するループが書きたいのですがどうすればいいでしょうか。
754デフォルトの名無しさん (ワッチョイ f9b3-AWKa)
2017/11/18(土) 16:29:45.36ID:CUoz+hOS0 ラスボス級が現れた。
755デフォルトの名無しさん (ワッチョイ f9b3-GXP8)
2017/11/18(土) 16:46:32.60ID:gZtBhbAH0 http://takashiijiri.com/study/miscs/fastsqrt.html
やりたいことは、上のサイトにある高速根号計算の精度検証です。
サイト内では2の根号に対して精度検証していますが
すべての倍精度実数に対して検証をしたいと考えています。
64bitの整数のビット表現を、同じビット表現の倍精度実数に変換できれば
整数についてループを回すことで網羅できると考えています。
変換の方法をご存知の方がいれば教えて頂けないでしょうか。
やりたいことは、上のサイトにある高速根号計算の精度検証です。
サイト内では2の根号に対して精度検証していますが
すべての倍精度実数に対して検証をしたいと考えています。
64bitの整数のビット表現を、同じビット表現の倍精度実数に変換できれば
整数についてループを回すことで網羅できると考えています。
変換の方法をご存知の方がいれば教えて頂けないでしょうか。
756デフォルトの名無しさん (ワッチョイ a104-0wpo)
2017/11/18(土) 16:47:50.09ID:R4dFDjUs0 >>753
イプシロン足してくとか。
イプシロン足してくとか。
757デフォルトの名無しさん (ワッチョイ 0233-2Rtq)
2017/11/18(土) 16:48:48.90ID:np1Yc2el0 >>755 memcpy
758デフォルトの名無しさん (ワッチョイ a104-0wpo)
2017/11/18(土) 16:49:32.41ID:R4dFDjUs0759デフォルトの名無しさん (ワッチョイ a104-0wpo)
2017/11/18(土) 16:50:13.11ID:R4dFDjUs0 >>757
reinterpret_castでいい予感。
reinterpret_castでいい予感。
760デフォルトの名無しさん (ワッチョイ 0233-2Rtq)
2017/11/18(土) 16:51:55.15ID:np1Yc2el0 >>755
ところでその検証、何年ぐらい時間かけていい話なの?
ところでその検証、何年ぐらい時間かけていい話なの?
761デフォルトの名無しさん (ワッチョイ 0233-2Rtq)
2017/11/18(土) 16:53:01.86ID:np1Yc2el0 >>759
未定義動作でも「いい」と言うなら、そう。
未定義動作でも「いい」と言うなら、そう。
762デフォルトの名無しさん (ワッチョイ a104-0wpo)
2017/11/18(土) 16:55:15.51ID:R4dFDjUs0 あー検証だからな。すまんかった。
763デフォルトの名無しさん (ワッチョイ f9b3-GXP8)
2017/11/18(土) 17:20:21.34ID:gZtBhbAH0 みなさま、レスありがとうございます。
>>757
memcpyでできそうです。ありがとうございます。
int main() {
double f = 0;
for (unsigned long long i = 0; i <= -1; ++i) {
void* fp = static_cast<void*>(&f);
void* ip = static_cast<void*>(&i);
std::memcpy(fp, ip, sizeof(i));
std::cout << f << std::endl;
}
system("pause");
}
>>760
そんなに時間かかるんですかね。。。
1週間ぐらいは覚悟してたんですが。
とりあえず回してみます。
>>757
memcpyでできそうです。ありがとうございます。
int main() {
double f = 0;
for (unsigned long long i = 0; i <= -1; ++i) {
void* fp = static_cast<void*>(&f);
void* ip = static_cast<void*>(&i);
std::memcpy(fp, ip, sizeof(i));
std::cout << f << std::endl;
}
system("pause");
}
>>760
そんなに時間かかるんですかね。。。
1週間ぐらいは覚悟してたんですが。
とりあえず回してみます。
764デフォルトの名無しさん (ワッチョイ 0233-2Rtq)
2017/11/18(土) 17:32:14.09ID:np1Yc2el0 >>763
https://randomascii.wordpress.com/2014/01/27/theres-only-four-billion-floatsso-test-them-all/
> ... you can test every float bit-pattern (all four billion!) in about ninety seconds. ...
32bit が 90 秒ほどで済ませられるそうな。 64bit だと単純計算で・・・ 735439.6... 年ぐらいかな。
1週間で済ませようと思ったら 38347922 並列ぐらいで走らせればよさそう。
検証する計算内容によっても変わるだろうけど、まぁがんばれ。
https://randomascii.wordpress.com/2014/01/27/theres-only-four-billion-floatsso-test-them-all/
> ... you can test every float bit-pattern (all four billion!) in about ninety seconds. ...
32bit が 90 秒ほどで済ませられるそうな。 64bit だと単純計算で・・・ 735439.6... 年ぐらいかな。
1週間で済ませようと思ったら 38347922 並列ぐらいで走らせればよさそう。
検証する計算内容によっても変わるだろうけど、まぁがんばれ。
765デフォルトの名無しさん (ワッチョイ a193-oo0Z)
2017/11/18(土) 17:35:34.11ID:hpuIg+Nf0 とりあえず範囲を絞って回してみて、
力任せの方法で受け入れられる処理時間なら単純なプログラムのまま、
時間かかりすぎるようなら先にプログラムを洗練させる、としないと。
力任せの方法で受け入れられる処理時間なら単純なプログラムのまま、
時間かかりすぎるようなら先にプログラムを洗練させる、としないと。
766デフォルトの名無しさん (ワッチョイ f9b3-GXP8)
2017/11/18(土) 17:56:05.12ID:gZtBhbAH0767デフォルトの名無しさん (ワッチョイ 0234-1gB9)
2017/11/18(土) 19:06:18.60ID:cx1PUhyJ0 isnan()でnanチェック入れたほうが良さそう
768デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/18(土) 19:44:12.36ID:euoYf0NO0769デフォルトの名無しさん (ワッチョイ 0233-2Rtq)
2017/11/18(土) 20:29:47.22ID:np1Yc2el0 >>768
type-based aliasing rule (strict aliasing rule) というものがあってな。
(詳しく調べると闇に落ちるから言語オタクでもなければ深堀りはおすすめしない。)
mempcy なら動作が定義されてるかというとそうでもないんで、
明示的に未定義といわれているかどうか(=最適化で問題を起こしやすいかどうか)の違いしかないんだけど。
type-based aliasing rule (strict aliasing rule) というものがあってな。
(詳しく調べると闇に落ちるから言語オタクでもなければ深堀りはおすすめしない。)
mempcy なら動作が定義されてるかというとそうでもないんで、
明示的に未定義といわれているかどうか(=最適化で問題を起こしやすいかどうか)の違いしかないんだけど。
770デフォルトの名無しさん (ワッチョイ 7efb-0Zlk)
2017/11/18(土) 20:40:55.67ID:b6ZSsfqz0 std::launder「そろそろ俺の出番だな」
771デフォルトの名無しさん (ワッチョイ c6e7-RjUU)
2017/11/18(土) 21:23:52.47ID:azZ7ClyG0 ここまでfrexpとldexpの話なし
772片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd22-EXIO)
2017/11/18(土) 21:57:24.41ID:QiNK1qRtd773片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd22-EXIO)
2017/11/18(土) 21:58:52.49ID:QiNK1qRtd 初回の例外というのがよくわからない。。。
774デフォルトの名無しさん (ワッチョイ 4178-kX9V)
2017/11/18(土) 22:06:57.57ID:asu2qdyg0 なんか古い書き方だから2000年ごろからの年季の入ったソースかと思ったら最近の奴なんだな
775片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd22-EXIO)
2017/11/18(土) 22:12:33.66ID:QiNK1qRtd776デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/18(土) 22:42:09.82ID:euoYf0NO0 >>769
調べたけどこれでいいのか?
https://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule
これならreinterpret_cast関係ないじゃん。static_castにしたところで変わらん。
ただそれ以前に該当しないだろ。
「同一のメモリを違う型としてaliasしたときにコンパイラがそれに気づけず最適化で削除してしまう」という問題であり、
今回はそうではない。
> mempcy なら動作が定義されてるかというとそうでもないんで
ほんとか?それじゃmemcpyマトモに使えないじゃん。
void*は++で1増えるって仕様に決まったはずで、、、と思ったがこれがgcc拡張だという話があり、このことを言っているのか?
ならグダグダ言わずにCキャストで書けよもう、としか思わないが。
或いはC++的には許せないのかもしれんが static_cast<double>にしてしまうとかか?
調べたけどこれでいいのか?
https://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule
これならreinterpret_cast関係ないじゃん。static_castにしたところで変わらん。
ただそれ以前に該当しないだろ。
「同一のメモリを違う型としてaliasしたときにコンパイラがそれに気づけず最適化で削除してしまう」という問題であり、
今回はそうではない。
> mempcy なら動作が定義されてるかというとそうでもないんで
ほんとか?それじゃmemcpyマトモに使えないじゃん。
void*は++で1増えるって仕様に決まったはずで、、、と思ったがこれがgcc拡張だという話があり、このことを言っているのか?
ならグダグダ言わずにCキャストで書けよもう、としか思わないが。
或いはC++的には許せないのかもしれんが static_cast<double>にしてしまうとかか?
777デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/18(土) 22:48:23.04ID:euoYf0NO0 すまんミスった
× static_cast<double>
○ static_cast<double*>
× static_cast<double>
○ static_cast<double*>
778デフォルトの名無しさん (ワッチョイ 0233-2Rtq)
2017/11/18(土) 23:20:13.09ID:np1Yc2el0 >>776
static_cast じゃコンパイル通らない。
"*(long long*)&f = i" は double 型のオブジェクトに long long 型の参照を通してアクセスしているので
未定義動作になる。結果は「最適化で削除してしまう」に限らず、何でもアリだよ。
これが「「同一のメモリを違う型としてalias」に該当しないという理屈も無いでしょ。
memcpy の結果が定義されてるのは、同じ型のオブジェクト間でのコピーだけだったかと。
違う型の間で memcpy した結果の値が実は定義されてるということなら実に興味深いので
ぜひ規格の該当箇所を示して欲しい。
この場合の C スタイルキャストの動作は reinterpret_cast に丸投げされるだけなので話は変わらないよ。
static_cast じゃコンパイル通らない。
"*(long long*)&f = i" は double 型のオブジェクトに long long 型の参照を通してアクセスしているので
未定義動作になる。結果は「最適化で削除してしまう」に限らず、何でもアリだよ。
これが「「同一のメモリを違う型としてalias」に該当しないという理屈も無いでしょ。
memcpy の結果が定義されてるのは、同じ型のオブジェクト間でのコピーだけだったかと。
違う型の間で memcpy した結果の値が実は定義されてるということなら実に興味深いので
ぜひ規格の該当箇所を示して欲しい。
この場合の C スタイルキャストの動作は reinterpret_cast に丸投げされるだけなので話は変わらないよ。
779デフォルトの名無しさん (ワッチョイ 1d79-Kvax)
2017/11/18(土) 23:37:48.32ID:5VdCNKN70 ここまでnextafter/nexttowardが出てきていない
780デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/18(土) 23:38:32.35ID:euoYf0NO0 >>778
> "*(long long*)&f = i" は double 型のオブジェクトに long long 型の参照を通してアクセスしているので
してないぞ。
それは「fのアドレスを(long long*)にキャスト(この時点でlong long*型)したアドレスに対しiを書き込め」
であって、つまり long long に long long を書いている。だからmovが出る。
逆に f = *(double*)&i; は double に double を書くから fmov が出る。
その後の最適化で変更されるのはまた別の話。
> static_cast じゃコンパイル通らない。
だったら最初から>>759の言うとおり、reinterpret_castでいいだろ。
> 違う型の間で memcpy した結果の値が実は定義されてる
void* と void* なんだから同じ型だろ。何言ってんだ?
お前、基本的に理解がずれてね?
> "*(long long*)&f = i" は double 型のオブジェクトに long long 型の参照を通してアクセスしているので
してないぞ。
それは「fのアドレスを(long long*)にキャスト(この時点でlong long*型)したアドレスに対しiを書き込め」
であって、つまり long long に long long を書いている。だからmovが出る。
逆に f = *(double*)&i; は double に double を書くから fmov が出る。
その後の最適化で変更されるのはまた別の話。
> static_cast じゃコンパイル通らない。
だったら最初から>>759の言うとおり、reinterpret_castでいいだろ。
> 違う型の間で memcpy した結果の値が実は定義されてる
void* と void* なんだから同じ型だろ。何言ってんだ?
お前、基本的に理解がずれてね?
781デフォルトの名無しさん (ワッチョイ 0233-2Rtq)
2017/11/18(土) 23:47:06.34ID:np1Yc2el0 >>780
なるほど、オブジェクトの型と式の型との区別がついてないんだね。
そこの理解無しで aliasing rule に関する話は無理だから、
C++ の規格を読み直すなりして区別が付くようになってからの出直しをおすすめする。
なるほど、オブジェクトの型と式の型との区別がついてないんだね。
そこの理解無しで aliasing rule に関する話は無理だから、
C++ の規格を読み直すなりして区別が付くようになってからの出直しをおすすめする。
782デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/18(土) 23:50:31.47ID:euoYf0NO0783デフォルトの名無しさん (ワッチョイ 0233-2Rtq)
2017/11/19(日) 00:03:31.90ID:xhmNfS4m0 >>782
そうなると GCC も「全く理解出来てない」ことになるねぇ。
https://wandbox.org/permlink/WMFUTpXAgs2oZuos
> prog.cc:5:17: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
> *(long long*)&f = i;
> ^
> prog.cc:6:18: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
> f = *(double*)&i;
> ^
そうなると GCC も「全く理解出来てない」ことになるねぇ。
https://wandbox.org/permlink/WMFUTpXAgs2oZuos
> prog.cc:5:17: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
> *(long long*)&f = i;
> ^
> prog.cc:6:18: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
> f = *(double*)&i;
> ^
784デフォルトの名無しさん (ワッチョイ c6e7-RjUU)
2017/11/19(日) 00:12:55.40ID:XAwzlQ9S0785デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/19(日) 00:41:57.82ID:p3uF8GIb0 まあ未定義な動作がどこまで行っても未定義な動作であって(教条主義的には)悪なのは確かだが
>>784のリンク先のを読むと
>ストアによってPの値が変わる可能性を考慮しなくてはいけないからだ。
という理由で最適化できないケースがあるから考慮する代りに未定義動作ということにしますた!
というだけで、ストアによってPの値が変わらないなら特に問題を生じないように思える…
で、ストアによってPの値が変わるケースというのは
int main() {
P = (float*)&P; // このキャストによって zero_array の中で TBAA 違反となる
zero_array();
}
みたいな変態的なケースしかなさげ;
>>784のリンク先のを読むと
>ストアによってPの値が変わる可能性を考慮しなくてはいけないからだ。
という理由で最適化できないケースがあるから考慮する代りに未定義動作ということにしますた!
というだけで、ストアによってPの値が変わらないなら特に問題を生じないように思える…
で、ストアによってPの値が変わるケースというのは
int main() {
P = (float*)&P; // このキャストによって zero_array の中で TBAA 違反となる
zero_array();
}
みたいな変態的なケースしかなさげ;
786デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 00:54:18.30ID:SsMAbqSz0 >>784
答え書いてんじゃねーかよ。
> この種の未定義な振る舞いは、-fno-strict-aliasing フラグを指定することで無効にすることができ
つまり指定すれば万事解決だ。
ただその前にwarning出てても動作するとは思うが。
> この種の型の乱用はあまり一般的ではないので、標準委員会は、"妥当な" 型のキャストによる予期しない結果と引き換えに、大幅なパフォーマンス向上を選んだ。
これっていつから?LLVMに乗せた頃からっぽいが、、、日付や元URL見るかぎりC++11からか?
あとこれって、Cもか?
(Cでは俺が書いたようなキャストは常用されているから)
知っている人がいたらよろしく。
答え書いてんじゃねーかよ。
> この種の未定義な振る舞いは、-fno-strict-aliasing フラグを指定することで無効にすることができ
つまり指定すれば万事解決だ。
ただその前にwarning出てても動作するとは思うが。
> この種の型の乱用はあまり一般的ではないので、標準委員会は、"妥当な" 型のキャストによる予期しない結果と引き換えに、大幅なパフォーマンス向上を選んだ。
これっていつから?LLVMに乗せた頃からっぽいが、、、日付や元URL見るかぎりC++11からか?
あとこれって、Cもか?
(Cでは俺が書いたようなキャストは常用されているから)
知っている人がいたらよろしく。
787デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/19(日) 01:21:45.70ID:p3uF8GIb0 つかmemset(buf, ch, nのbufって__restrictじゃなかったのか…
今知った……
今知った……
788デフォルトの名無しさん (ワッチョイ c6e7-RjUU)
2017/11/19(日) 01:24:03.10ID:XAwzlQ9S0 C89からずーっとそうだよ
お前が書いてるコードが動いてるのは、コンパイラがそうしないという保証を独自に与えているか(-fno-strict-aliasingはその一例)
さもなくばたまたま動いてるだけ
お前が書いてるコードが動いてるのは、コンパイラがそうしないという保証を独自に与えているか(-fno-strict-aliasingはその一例)
さもなくばたまたま動いてるだけ
789デフォルトの名無しさん (ワッチョイ 0233-2Rtq)
2017/11/19(日) 01:33:36.82ID:xhmNfS4m0 >>786
広く知れ渡ったのは gcc 2.95 で実際にそのルールに基づく最適化が行われるようになってからかな。
https://www.gnu.org/software/gcc/gcc-2.95/features.html
> - Type based alias analysis is enabled by default. ...
そこから数えてももう 20 年近く経つわけだが。
知らずにそんなキャスト常用してるなら是非悔い改めてくれ。
広く知れ渡ったのは gcc 2.95 で実際にそのルールに基づく最適化が行われるようになってからかな。
https://www.gnu.org/software/gcc/gcc-2.95/features.html
> - Type based alias analysis is enabled by default. ...
そこから数えてももう 20 年近く経つわけだが。
知らずにそんなキャスト常用してるなら是非悔い改めてくれ。
790デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/19(日) 01:35:13.22ID:p3uF8GIb0 (ま、__restrictな形でしかポインタしか使わない漏れには関係ないし…
791デフォルトの名無しさん (ワッチョイ c6e7-RjUU)
2017/11/19(日) 01:37:52.26ID:XAwzlQ9S0 ちなみに-fno-strict-aliasing付けるとこんな基本的な最適化さえ出来なくなって
パフォーマンスが激悪化する可能性があるからな
それを完全に理解した上で万事解決だと言ってるならそれでもいいけどさ
int foo(double* pd){
int k = 42;
*pd = 666;
return k * 2;
}
-fno-strict-aliasingを付けた場合、戻り値を"84"に最適化することは出来ない
なぜならpdのアドレスが&kを指してるかもしれないから
(strict aliasing ruleが効いてればdouble*がintを指してたら未定義動作なのでケアする必要がなく最適化できる)
パフォーマンスが激悪化する可能性があるからな
それを完全に理解した上で万事解決だと言ってるならそれでもいいけどさ
int foo(double* pd){
int k = 42;
*pd = 666;
return k * 2;
}
-fno-strict-aliasingを付けた場合、戻り値を"84"に最適化することは出来ない
なぜならpdのアドレスが&kを指してるかもしれないから
(strict aliasing ruleが効いてればdouble*がintを指してたら未定義動作なのでケアする必要がなく最適化できる)
792デフォルトの名無しさん (ワッチョイ 0233-2Rtq)
2017/11/19(日) 01:42:54.83ID:xhmNfS4m0 >>791
引数で受け取った(有効な)ポインタが関数内のローカル変数を指すことは不可能だから、その例は最適化できるよ。
引数で受け取った(有効な)ポインタが関数内のローカル変数を指すことは不可能だから、その例は最適化できるよ。
793デフォルトの名無しさん (ワッチョイ c6e7-RjUU)
2017/11/19(日) 02:15:02.16ID:XAwzlQ9S0 有効なポインタならね
デタラメなポインタがたまたま&kを指してるかもしれない
普通はそんなのは未定義動作だからケアしないんだけどそれをケアしろって言うのが-fno-strict-aliasing
デタラメなポインタがたまたま&kを指してるかもしれない
普通はそんなのは未定義動作だからケアしないんだけどそれをケアしろって言うのが-fno-strict-aliasing
794デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 02:22:43.60ID:SsMAbqSz0 >>789
> mempcy なら動作が定義されてるかというとそうでもないんで (>>769)
これは間違いだろ。784内見る限り、
> Cは、このような型変換をmemcpyを使って実現することを要求している。
なら、memcpy使えば正しい結果が得られるはずだし、そうじゃないとコンパイラのバグになる。
つまり、>>763のコードは正しく動くはず、と読めるが。
ちなみに>>783のページで色々試してみた。(もし編集が残っているようならすまん)
全てgcc 7.2.0 で、結果は以下。
・CはC11/C11(GNU)の両方でwarinigも何もでない。
・C++はこの中の一番古いC++03/C++03(GNU)の両方でwarinigは出る。
ということはかなり昔からC++ではそうだった、ということだね。全く知らんかったわ。
ここら辺がCの連中がC++を嫌っているところなのかもしれない。
>>788
おお、サンクス、C++89からか。
俺環はVC++2008だからね。MS側が吸収してくれてるわけか。
>>789
いや俺環では問題ないしな。
つかたぶんこれC++の話で、上記試した限りCなら問題ないんだよ。
ただ俺はbetterCの人だから、まあ微妙なわけだが、、、VC++2017とかに移行するときは気をつけるよ。
さてそのリンク先
https://www.gnu.org/software/gcc/news/alias.html
も読んでみたが、つまり s->x_m[i] は s->a_m と型が違うから上書きしないはず、
だからループ内で毎回 s->a_m を取らずに前回の値をそのまま使っていい、ということらしい。(s->b_mも同様)
ただこれなら
for (unsigned long long i = 0; i <= -1; ++i) *(long long*)&f = i;
は確実に動くけどな。ここで端折られるのはfのアドレス確認 &f 部分だけだから。
ただしstackoverflowの連中は言っていることが少し違うから、もうちょっと確認が必要だが。
> mempcy なら動作が定義されてるかというとそうでもないんで (>>769)
これは間違いだろ。784内見る限り、
> Cは、このような型変換をmemcpyを使って実現することを要求している。
なら、memcpy使えば正しい結果が得られるはずだし、そうじゃないとコンパイラのバグになる。
つまり、>>763のコードは正しく動くはず、と読めるが。
ちなみに>>783のページで色々試してみた。(もし編集が残っているようならすまん)
全てgcc 7.2.0 で、結果は以下。
・CはC11/C11(GNU)の両方でwarinigも何もでない。
・C++はこの中の一番古いC++03/C++03(GNU)の両方でwarinigは出る。
ということはかなり昔からC++ではそうだった、ということだね。全く知らんかったわ。
ここら辺がCの連中がC++を嫌っているところなのかもしれない。
>>788
おお、サンクス、C++89からか。
俺環はVC++2008だからね。MS側が吸収してくれてるわけか。
>>789
いや俺環では問題ないしな。
つかたぶんこれC++の話で、上記試した限りCなら問題ないんだよ。
ただ俺はbetterCの人だから、まあ微妙なわけだが、、、VC++2017とかに移行するときは気をつけるよ。
さてそのリンク先
https://www.gnu.org/software/gcc/news/alias.html
も読んでみたが、つまり s->x_m[i] は s->a_m と型が違うから上書きしないはず、
だからループ内で毎回 s->a_m を取らずに前回の値をそのまま使っていい、ということらしい。(s->b_mも同様)
ただこれなら
for (unsigned long long i = 0; i <= -1; ++i) *(long long*)&f = i;
は確実に動くけどな。ここで端折られるのはfのアドレス確認 &f 部分だけだから。
ただしstackoverflowの連中は言っていることが少し違うから、もうちょっと確認が必要だが。
795デフォルトの名無しさん (ワッチョイ 0233-2Rtq)
2017/11/19(日) 02:26:53.00ID:xhmNfS4m0796デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 02:37:45.46ID:SsMAbqSz0 >>791
周回遅れですまんが俺には794に書いたとおり、
・型違いは全てmemcpy使え。
と読める。だから763のコードはOKだと。
>>791-793の内容は理解した。
さて再度だが、やはり以下は動くだろ。
for (unsigned long long i = 0; i <= -1; ++i) *(long long*)&f = i;
ここで問題なのは、「fがiのアドレスをさしてたら未定義動作(&f==&i等)」であって、
i をコピーしてやらない、ではない。
791-793の言い分どおりなら、これはwarningが出てるだけで全く問題なく動くはず。
ただしstackoverflowの連中はちょっと違うことを言っているが。
周回遅れですまんが俺には794に書いたとおり、
・型違いは全てmemcpy使え。
と読める。だから763のコードはOKだと。
>>791-793の内容は理解した。
さて再度だが、やはり以下は動くだろ。
for (unsigned long long i = 0; i <= -1; ++i) *(long long*)&f = i;
ここで問題なのは、「fがiのアドレスをさしてたら未定義動作(&f==&i等)」であって、
i をコピーしてやらない、ではない。
791-793の言い分どおりなら、これはwarningが出てるだけで全く問題なく動くはず。
ただしstackoverflowの連中はちょっと違うことを言っているが。
797デフォルトの名無しさん (ワッチョイ 0233-2Rtq)
2017/11/19(日) 02:42:26.05ID:xhmNfS4m0 >>794
C の aliasing rule には memcpy, memmove によって宣言型を持たない(たとえば
malloc で確保した)オブジェクトの型 (effective type) を変更できるという規定がある。
引用された「memcpyを使って実現することを要求している」はこのことだろう。
でも、 C++ にはこれに相当する規定が無い。
C の aliasing rule には memcpy, memmove によって宣言型を持たない(たとえば
malloc で確保した)オブジェクトの型 (effective type) を変更できるという規定がある。
引用された「memcpyを使って実現することを要求している」はこのことだろう。
でも、 C++ にはこれに相当する規定が無い。
798デフォルトの名無しさん (ワッチョイ 0233-2Rtq)
2017/11/19(日) 02:53:12.72ID:xhmNfS4m0 >>796
残念、まだ理解できてないよ。
答えは >778 にある。
> "*(long long*)&f = i" は double 型のオブジェクトに long long 型の参照を通してアクセスしているので
> 未定義動作になる。結果は「最適化で削除してしまう」に限らず、何でもアリだよ。
これ以上は規格見てからしゃべってくれ。
残念、まだ理解できてないよ。
答えは >778 にある。
> "*(long long*)&f = i" は double 型のオブジェクトに long long 型の参照を通してアクセスしているので
> 未定義動作になる。結果は「最適化で削除してしまう」に限らず、何でもアリだよ。
これ以上は規格見てからしゃべってくれ。
799デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 03:03:03.03ID:SsMAbqSz0800デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/19(日) 06:07:15.51ID:p3uF8GIb0 未定義動作マジコエー;;(>>784のリンク先の次のページ
ttp://blog-ja.intransient.info/2011/05/c-23.html
ttp://blog-ja.intransient.info/2011/05/c-23.html
801デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/19(日) 06:25:20.22ID:p3uF8GIb0 プロセス屋さんががんばってCPUを3年ごとに倍早くしてくれるのだから
我々ソフト屋は口を開けて待っているだけにして
最適化なんてやめてしまえば良いのに
我々が忙しく働くということは、それだけバグを産むということなのだ…!
我々ソフト屋は口を開けて待っているだけにして
最適化なんてやめてしまえば良いのに
我々が忙しく働くということは、それだけバグを産むということなのだ…!
802デフォルトの名無しさん (オッペケ Srd1-0Zlk)
2017/11/19(日) 07:18:18.83ID:mXpVaiBzr803デフォルトの名無しさん (ワッチョイ 82a4-Eq1o)
2017/11/19(日) 07:18:20.90ID:Rb2sIcHm0 CPUだけ速くなってもDRAMの速度が昔のままだ
.7CRなんて法則を持ち出すまでもなく
現実にCPU速度が飽和したと感じたことなどないはずだが
.7CRなんて法則を持ち出すまでもなく
現実にCPU速度が飽和したと感じたことなどないはずだが
804デフォルトの名無しさん (オッペケ Srd1-0Zlk)
2017/11/19(日) 07:23:52.01ID:mXpVaiBzr805デフォルトの名無しさん (ワッチョイ f9b3-GXP8)
2017/11/19(日) 08:50:45.23ID:OzmZfN1I0 >>768
読んでも分からないときは?
読んでも分からないときは?
806デフォルトの名無しさん (ワッチョイ 82a4-Eq1o)
2017/11/19(日) 10:12:41.15ID:Rb2sIcHm0807デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 13:02:38.85ID:SsMAbqSz0 >>795改造は-fno-strict-aliasing有り無しによらず動くコードが出た。詳細は以下。
https://godbolt.org/g/QaSwTn
-O3 -fno-strict-aliasing -std=c++14 -pedantic -Wall -Wextra で mov QWORD PTR [rsp+8], rbx (27,29行目)が出る。
-fno-strict-aliasing を切っても同じ mov 命令が出る。
だからこれはwarningが出ているだけで動くコードが出る。
このときのコードは以下。
void test() {
double f = 0;
for (long long i = 0; i <= 10; ++i) {
*(long long*)&f = i; // (A)
std::cout << f << std::endl; // (B)
}
}
https://godbolt.org/g/QaSwTn
-O3 -fno-strict-aliasing -std=c++14 -pedantic -Wall -Wextra で mov QWORD PTR [rsp+8], rbx (27,29行目)が出る。
-fno-strict-aliasing を切っても同じ mov 命令が出る。
だからこれはwarningが出ているだけで動くコードが出る。
このときのコードは以下。
void test() {
double f = 0;
for (long long i = 0; i <= 10; ++i) {
*(long long*)&f = i; // (A)
std::cout << f << std::endl; // (B)
}
}
808デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 13:04:16.49ID:SsMAbqSz0 >>798
なお上記のGCC結果、或いは以下GCCのドキュメントは読んだ。
(ついでに後出の仕様書もチラ見したが、やはり今のところ君の理解がずれてるという見解だ。)
https://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Optimize-Options.html#index-fstrict_002daliasing-750
ここでは以下コードがアウトだと言っている。
union a_union {
int i;
double d;
};
int f() {
double d = 3.0; // (C)
return ((union a_union *) &d)->i; // (D)
}
アウトな理由だが、上記と794内URLによると、「『型違いのaliasはない』と仮定して最適化」する為であり、
つまり(C)はd名でdoubleに書き(D)はi名でint読み出しだから(C)と(D)は関係ない、
よって(C)はデッドコードでいきなり(D)の読み出ししてよし、ということらしい。
ただこれだとやはり上記(A)(B)は動く。(A)も(B)もfの読み書きであり、aliasして無いからだ。
この規定は「型違いの『aliasは』ないものとみなす」であり、aliasしてなければ関係ない。
今のところ見る限り、他の例も必ずalias(別名でアクセス)している。
なお正しくはunionを使え、ということらしい。>>763
まあ確かにunionはこれ用ではあるが、単発ならCキャストする奴が多いとは思う。
そもそもunionは撲滅対象だと思っていたのだが、これは意外だ。
(或いは仕様上 char*, unsigned char* については許可《どう見ても妥協だが》しているので、void*ではなくchar*にすればいい)
なお上記のGCC結果、或いは以下GCCのドキュメントは読んだ。
(ついでに後出の仕様書もチラ見したが、やはり今のところ君の理解がずれてるという見解だ。)
https://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Optimize-Options.html#index-fstrict_002daliasing-750
ここでは以下コードがアウトだと言っている。
union a_union {
int i;
double d;
};
int f() {
double d = 3.0; // (C)
return ((union a_union *) &d)->i; // (D)
}
アウトな理由だが、上記と794内URLによると、「『型違いのaliasはない』と仮定して最適化」する為であり、
つまり(C)はd名でdoubleに書き(D)はi名でint読み出しだから(C)と(D)は関係ない、
よって(C)はデッドコードでいきなり(D)の読み出ししてよし、ということらしい。
ただこれだとやはり上記(A)(B)は動く。(A)も(B)もfの読み書きであり、aliasして無いからだ。
この規定は「型違いの『aliasは』ないものとみなす」であり、aliasしてなければ関係ない。
今のところ見る限り、他の例も必ずalias(別名でアクセス)している。
なお正しくはunionを使え、ということらしい。>>763
まあ確かにunionはこれ用ではあるが、単発ならCキャストする奴が多いとは思う。
そもそもunionは撲滅対象だと思っていたのだが、これは意外だ。
(或いは仕様上 char*, unsigned char* については許可《どう見ても妥協だが》しているので、void*ではなくchar*にすればいい)
809デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 13:06:08.29ID:SsMAbqSz0 仕様書は以下でいいか?読み慣れてないからだいぶ推測が入るが、
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf
俺の結論は以下かな。
・gccのは -fstrict-aliasing で、あくまで alias についてだが、仕様書内は alias なんて関係ない。
・fstrict-aliasing 出来る理由が3.10.10によるのなら、reinterpret_castの存在価値はなく、仕様書内に矛盾がある。
・おそらく reinterpret_cast 撲滅で union に書き換えろ、という方向か?
aliasってのは多分折衷案で、union 以外は全部アウトにしたいっぽい。
詳細は以下。
5.2.10 Reinterpret castでは特に妙なところはなし、型キャストは為される。
aliasについては3.10.10だが、reinterpret_castしてれば the dynamic type 扱いでアクセスに問題なし、と見る。
3.10.10.の注 54) The intent of this list is to specify those circumstances in which an object may or may not be aliased.
なんだから、やはりこれは alias されているかどうか?であって、アクセスできるかどうかではない。
ただしここを根拠に undefined behavior だから最適化してよし、としてるのはかなり強引で、
(というかここでalias云々がかなり唐突で、そもそもaliasの話をここではしていない)
(D)がreinterpret_cast扱いだというのなら仕様内に矛盾があることになる。
そしてこの解釈(=reinterpret_castされたものは the dynamic type ではなく undefied behaviorだからどうなってもよし)が通るのなら、
reinterpret_castの存在価値がなくなってしまうし、
aliasとかせこいことを言わず、reinterpret_cast相当のところは全部undefined扱いで削除していいことになる。
というか、多分コンパイラ側はこの主張で、これに対してユーザ側が反対し、
結果、 alias とかいう折衷案でごまかしているように読める。(既に書いたがaliasが唐突過ぎ)
確かに正しくはunionを使うべきであり、この流れだと将来的には reinterpret_cast は廃止で union しろってことになるのか?
しかし逆に言えば、C++89以来これで大して変わらないのなら、早々急に変わることもないか。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf
俺の結論は以下かな。
・gccのは -fstrict-aliasing で、あくまで alias についてだが、仕様書内は alias なんて関係ない。
・fstrict-aliasing 出来る理由が3.10.10によるのなら、reinterpret_castの存在価値はなく、仕様書内に矛盾がある。
・おそらく reinterpret_cast 撲滅で union に書き換えろ、という方向か?
aliasってのは多分折衷案で、union 以外は全部アウトにしたいっぽい。
詳細は以下。
5.2.10 Reinterpret castでは特に妙なところはなし、型キャストは為される。
aliasについては3.10.10だが、reinterpret_castしてれば the dynamic type 扱いでアクセスに問題なし、と見る。
3.10.10.の注 54) The intent of this list is to specify those circumstances in which an object may or may not be aliased.
なんだから、やはりこれは alias されているかどうか?であって、アクセスできるかどうかではない。
ただしここを根拠に undefined behavior だから最適化してよし、としてるのはかなり強引で、
(というかここでalias云々がかなり唐突で、そもそもaliasの話をここではしていない)
(D)がreinterpret_cast扱いだというのなら仕様内に矛盾があることになる。
そしてこの解釈(=reinterpret_castされたものは the dynamic type ではなく undefied behaviorだからどうなってもよし)が通るのなら、
reinterpret_castの存在価値がなくなってしまうし、
aliasとかせこいことを言わず、reinterpret_cast相当のところは全部undefined扱いで削除していいことになる。
というか、多分コンパイラ側はこの主張で、これに対してユーザ側が反対し、
結果、 alias とかいう折衷案でごまかしているように読める。(既に書いたがaliasが唐突過ぎ)
確かに正しくはunionを使うべきであり、この流れだと将来的には reinterpret_cast は廃止で union しろってことになるのか?
しかし逆に言えば、C++89以来これで大して変わらないのなら、早々急に変わることもないか。
810デフォルトの名無しさん (ワッチョイ e1b3-GXP8)
2017/11/19(日) 14:06:40.01ID:PnhOPMpK0 >>787
ポインタの引数が1つしかないのに__restrictつける意味ないからでしょ
ポインタの引数が1つしかないのに__restrictつける意味ないからでしょ
811デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/19(日) 14:19:11.46ID:p3uF8GIb0 コンパイラがうまくType-Based Alias Analysis出来るケースをいくら列挙したところで
Type-Based Alias Analysisできないケースが簡単に生じることは否定できない事実じゃんヤバイじゃん?
unionの使用が解決策というのも語弊があって、unionのメンバのアドレスを取ってから関数foo()に渡す手順だと
foo()のコンパイル時には渡ってきた2つのポインタが、型が違うけど(ループ変数などの条件次第で)同じ領域を指す(ことがある)
かどうか(ループを実際に実行してみねば)判断つかないじゃん?→コンパイラは怖くてループをmemcpy()やmemset()に置き換えられない
つまりunionこそ別の翻訳単位に属する関数に下手な渡り方をするとaliasingのすくつと化す気配が微レ存
元を断つにはやっぱID:xhmNfS4m0やGCC様がおっしゃるように、
そもそも型の混同要因(つまりポインタのキャスト)を絶つか、最適化が効いてほしい関数でプログラマが明示的に__restrictするしか、
※ 個人の感想です
Type-Based Alias Analysisできないケースが簡単に生じることは否定できない事実じゃんヤバイじゃん?
unionの使用が解決策というのも語弊があって、unionのメンバのアドレスを取ってから関数foo()に渡す手順だと
foo()のコンパイル時には渡ってきた2つのポインタが、型が違うけど(ループ変数などの条件次第で)同じ領域を指す(ことがある)
かどうか(ループを実際に実行してみねば)判断つかないじゃん?→コンパイラは怖くてループをmemcpy()やmemset()に置き換えられない
つまりunionこそ別の翻訳単位に属する関数に下手な渡り方をするとaliasingのすくつと化す気配が微レ存
元を断つにはやっぱID:xhmNfS4m0やGCC様がおっしゃるように、
そもそも型の混同要因(つまりポインタのキャスト)を絶つか、最適化が効いてほしい関数でプログラマが明示的に__restrictするしか、
※ 個人の感想です
812デフォルトの名無しさん (ワッチョイ 0233-Wr28)
2017/11/19(日) 14:25:36.63ID:67VHGIrY0 >>808
> ただこれだとやはり上記(A)(B)は動く。(A)も(B)もfの読み書きであり、aliasして無いからだ。
どうも "alias" の有無を名前に基づいて考えてるみたいだけど、
C++ (ほか多くのプログラミング言語)の文脈ではソースコード中で使われる実際の名前は関係ないんだよ。
"*(long long*)&f = i;" は "auto p = (long long*)&f; *p = i;" と等価であり、
これらのうち名前をつけた後者だけがエイリアスの問題があるということはなく、
どちらも f が表すオブジェクトに対してエイリアスがある状態と言う。
(最適化器の気持ちになって考えればわかりやすいんじゃないかと思うんだけど・・・。)
3.10.10 の注が "alias" に言及しているのも、このルールが "aliasing rule" と
呼ばれるのもそういうこと。
> なお正しくはunionを使え、ということらしい。>>763
> まあ確かにunionはこれ用ではあるが、単発ならCキャストする奴が多いとは思う。
union で最後に書いたメンバと別のメンバを読み出すのも C++ では未定義動作だよ。
gcc は( -fstrict-aliasing の説明にもあるとおり)特別ルールを設けてある程度の保証を与えている状態。
https://gcc.gnu.org/bugs/#casting_and_optimization
> To fix the code above, you can use a union instead of a cast (note that this is a GCC extension which might not work with other compilers):
> ただこれだとやはり上記(A)(B)は動く。(A)も(B)もfの読み書きであり、aliasして無いからだ。
どうも "alias" の有無を名前に基づいて考えてるみたいだけど、
C++ (ほか多くのプログラミング言語)の文脈ではソースコード中で使われる実際の名前は関係ないんだよ。
"*(long long*)&f = i;" は "auto p = (long long*)&f; *p = i;" と等価であり、
これらのうち名前をつけた後者だけがエイリアスの問題があるということはなく、
どちらも f が表すオブジェクトに対してエイリアスがある状態と言う。
(最適化器の気持ちになって考えればわかりやすいんじゃないかと思うんだけど・・・。)
3.10.10 の注が "alias" に言及しているのも、このルールが "aliasing rule" と
呼ばれるのもそういうこと。
> なお正しくはunionを使え、ということらしい。>>763
> まあ確かにunionはこれ用ではあるが、単発ならCキャストする奴が多いとは思う。
union で最後に書いたメンバと別のメンバを読み出すのも C++ では未定義動作だよ。
gcc は( -fstrict-aliasing の説明にもあるとおり)特別ルールを設けてある程度の保証を与えている状態。
https://gcc.gnu.org/bugs/#casting_and_optimization
> To fix the code above, you can use a union instead of a cast (note that this is a GCC extension which might not work with other compilers):
813デフォルトの名無しさん (ワッチョイ 0233-Wr28)
2017/11/19(日) 14:26:49.64ID:67VHGIrY0 >>809
> ・fstrict-aliasing 出来る理由が3.10.10によるのなら、reinterpret_castの存在価値はなく、仕様書内に矛盾がある。
元の型に戻せば元通り使えることが保証されているので、変更できない既存ライブラリの型に情報を無理やりねじ込んだりするのには使える。
3.10 の例外により unsigned char* などによるオブジェクト表現への直接アクセスにも使える。
> aliasについては3.10.10だが、reinterpret_castしてれば the dynamic type 扱いでアクセスに問題なし、と見る。
まだオブジェクトの型 (dynamic type) と式の型との区別がついてないようだねぇ。
> ・fstrict-aliasing 出来る理由が3.10.10によるのなら、reinterpret_castの存在価値はなく、仕様書内に矛盾がある。
元の型に戻せば元通り使えることが保証されているので、変更できない既存ライブラリの型に情報を無理やりねじ込んだりするのには使える。
3.10 の例外により unsigned char* などによるオブジェクト表現への直接アクセスにも使える。
> aliasについては3.10.10だが、reinterpret_castしてれば the dynamic type 扱いでアクセスに問題なし、と見る。
まだオブジェクトの型 (dynamic type) と式の型との区別がついてないようだねぇ。
814デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/19(日) 14:38:42.54ID:p3uF8GIb0 >>810
memset()にわたるbufが__restrictでないポインタでないということは、関数の中で
memset(p, 0, 1000);
...
memset(p, 0, 1000);
と2回呼んだとき、pが非__restrictだったりグローバル変数だったりするとバカ正直に2回memset()されてしまう…
また、memset()は該当しないが
一般論としてポインタの引数が1つしかなくとも大域変数経由で(一見別のエリアを指すように見える)ポインタを受け取るケースがあるので
1引数関数でも__restrictが要るケースがあるんじゃわ;
memset()にわたるbufが__restrictでないポインタでないということは、関数の中で
memset(p, 0, 1000);
...
memset(p, 0, 1000);
と2回呼んだとき、pが非__restrictだったりグローバル変数だったりするとバカ正直に2回memset()されてしまう…
また、memset()は該当しないが
一般論としてポインタの引数が1つしかなくとも大域変数経由で(一見別のエリアを指すように見える)ポインタを受け取るケースがあるので
1引数関数でも__restrictが要るケースがあるんじゃわ;
815デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 14:43:08.58ID:SsMAbqSz0 >>811
808のコードで言うとね、
union a_union {
int i;
double d;
};
int f() {
double d = 3.0; // (C)
return ((union a_union *) &d)->i; // (D)
}
がアウトで、
int f(a_union* u) {
u->d = 3.0; // (E)
return u->i; // (F)
}
にしろってことだよ多分。これは>>812内URL内容とも一致する。
>>812
と、ここまではいいとして、これもGCC拡張であり、
> union で最後に書いたメンバと別のメンバを読み出すのも C++ では未定義動作だよ。
これはマジなの?C++のunionのところを読めばいいのか?
> 最適化器の気持ちになって考えればわかりやすいんじゃないかと思うんだけど・・・
これの可能性も考えたんだが、これまで全ての例で必ず別名をつけられてる。
LLVMはあまり知らないが、LLVMにおいてはレジスタへの再代入は禁止のはずだから、
同じレジスタがずっと使われてて最適化器からも「同じだ」と見える可能性もあるよ。
808のコードで言うとね、
union a_union {
int i;
double d;
};
int f() {
double d = 3.0; // (C)
return ((union a_union *) &d)->i; // (D)
}
がアウトで、
int f(a_union* u) {
u->d = 3.0; // (E)
return u->i; // (F)
}
にしろってことだよ多分。これは>>812内URL内容とも一致する。
>>812
と、ここまではいいとして、これもGCC拡張であり、
> union で最後に書いたメンバと別のメンバを読み出すのも C++ では未定義動作だよ。
これはマジなの?C++のunionのところを読めばいいのか?
> 最適化器の気持ちになって考えればわかりやすいんじゃないかと思うんだけど・・・
これの可能性も考えたんだが、これまで全ての例で必ず別名をつけられてる。
LLVMはあまり知らないが、LLVMにおいてはレジスタへの再代入は禁止のはずだから、
同じレジスタがずっと使われてて最適化器からも「同じだ」と見える可能性もあるよ。
816デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/19(日) 14:46:54.14ID:p3uF8GIb0 ごめ>>814の前半は思い過ごしかorz
別にmemset()側に__restrictは要りませんな…
別にmemset()側に__restrictは要りませんな…
817デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 14:52:43.00ID:SsMAbqSz0 >>813
3.10.10.4 a type that is the signed or unsigned type corresponding to the dynamic type of the object,
って言ってんだから基礎型も the dynamic type に含まれてると思うぞ。
> 変更できない既存ライブラリの型に情報を無理やりねじ込んだりするのには使える。
使えない。
reinterpret_castの結果がlvalueとして正当ではない、だからundefinedで何やってもおk、
というのが最適化していい根拠なんだろ。だったらreinterpret_castしたその値を使う時点で駄目だろ。
lvalueとして正当に使えると言うのなら、undefinedじゃないんだから最適化で削除しては駄目だ。
ただまあ、ここら辺を俺と君でやりあっても意味が無い。
おそらく20年前にガチで同じことが彼らによって既に為されているはず。
俺がコンパイラを作るわけでも無し、俺は現状確認だけでいいよ。
3.10.10.4 a type that is the signed or unsigned type corresponding to the dynamic type of the object,
って言ってんだから基礎型も the dynamic type に含まれてると思うぞ。
> 変更できない既存ライブラリの型に情報を無理やりねじ込んだりするのには使える。
使えない。
reinterpret_castの結果がlvalueとして正当ではない、だからundefinedで何やってもおk、
というのが最適化していい根拠なんだろ。だったらreinterpret_castしたその値を使う時点で駄目だろ。
lvalueとして正当に使えると言うのなら、undefinedじゃないんだから最適化で削除しては駄目だ。
ただまあ、ここら辺を俺と君でやりあっても意味が無い。
おそらく20年前にガチで同じことが彼らによって既に為されているはず。
俺がコンパイラを作るわけでも無し、俺は現状確認だけでいいよ。
818デフォルトの名無しさん (ワッチョイ e1b3-GXP8)
2017/11/19(日) 14:57:33.47ID:PnhOPMpK0 >>814>>816
>一般論としてポインタの引数が1つしかなくとも大域変数経由で
あ、そういうことか・・・
まぁmemset使ってそういう症状出るとしたら、呼び出し側のpでつければいいよね
自分は__restrictそんなに使い倒してないけど、C++の標準に入らないのかな
>一般論としてポインタの引数が1つしかなくとも大域変数経由で
あ、そういうことか・・・
まぁmemset使ってそういう症状出るとしたら、呼び出し側のpでつければいいよね
自分は__restrictそんなに使い倒してないけど、C++の標準に入らないのかな
819デフォルトの名無しさん (ワッチョイ 0233-dUYE)
2017/11/19(日) 15:03:35.17ID:xhmNfS4m0 >>817
これだけ言われてまだ dynamic type が何なのか読んでないとしか思えない発言が来るか。
https://timsong-cpp.github.io/cppwp/n4659/intro.defs#defns.dynamic.type
> reinterpret_castの結果がlvalueとして正当ではない、だからundefinedで何やってもおk、
> というのが最適化していい根拠なんだろ。だったらreinterpret_castしたその値を使う時点で駄目だろ。
ポインタの reinterpret_cast で型違いの結果を得ることは未定義動作にならないし、
それに * を適用して lvalue を得ることも未定義動作にはならない。
得られた lvalue を通したアクセスが aliasing rule に基づいて未定義動作となる可能性がある。
これだけ言われてまだ dynamic type が何なのか読んでないとしか思えない発言が来るか。
https://timsong-cpp.github.io/cppwp/n4659/intro.defs#defns.dynamic.type
> reinterpret_castの結果がlvalueとして正当ではない、だからundefinedで何やってもおk、
> というのが最適化していい根拠なんだろ。だったらreinterpret_castしたその値を使う時点で駄目だろ。
ポインタの reinterpret_cast で型違いの結果を得ることは未定義動作にならないし、
それに * を適用して lvalue を得ることも未定義動作にはならない。
得られた lvalue を通したアクセスが aliasing rule に基づいて未定義動作となる可能性がある。
820デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/19(日) 15:04:02.65ID:p3uF8GIb0 >reinterpret_castの結果がlvalueとして正当ではない
えっ合法なんじゃ…
int x = 10;
char* p = reinterpret_cast<char*>(&x);
*p = 2; // *pがlvalueであるところの式
x = (int)*p; // 元の型へのキャストバック
printf("x=%d\n", x); // 2
多分最適化されると
printf("x=%d\n", 2);
になる
えっ合法なんじゃ…
int x = 10;
char* p = reinterpret_cast<char*>(&x);
*p = 2; // *pがlvalueであるところの式
x = (int)*p; // 元の型へのキャストバック
printf("x=%d\n", x); // 2
多分最適化されると
printf("x=%d\n", 2);
になる
821デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 15:19:05.40ID:SsMAbqSz0 >>812
> union で最後に書いたメンバと別のメンバを読み出すのも C++ では未定義動作だよ。
一応unionのところ(9.5)読んだ。これは書いてなかった。
ただしGCCが「独自拡張だ」って言ってんだからどこかにはあるのだとは思うが。
章番号分かればよろしく。まさか、書いて無いから未定義って奴か?
なお9.5.5ではanonymous union ってのが定義されてて、どうもこれでやれってことっぽい。
例は以下。
void f() {
union { int a; const char* p; };
a = 1;
p = "Jennifer";
}
> union で最後に書いたメンバと別のメンバを読み出すのも C++ では未定義動作だよ。
一応unionのところ(9.5)読んだ。これは書いてなかった。
ただしGCCが「独自拡張だ」って言ってんだからどこかにはあるのだとは思うが。
章番号分かればよろしく。まさか、書いて無いから未定義って奴か?
なお9.5.5ではanonymous union ってのが定義されてて、どうもこれでやれってことっぽい。
例は以下。
void f() {
union { int a; const char* p; };
a = 1;
p = "Jennifer";
}
822デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/19(日) 15:22:01.05ID:p3uF8GIb0 dynamic_typeはdynamic_cast<>とかtypeidの実装がvtableを悪用した黒魔術なので使わなーい
それはそうとして、Type-Based Alias Analysisの障害となるaliasingだけことさら問題視するLLVMの人らのスタンスはフェアではないキモス
同じ型でもaliasingは起こそうと思えばいくらでも起こせるし、コンパイラはプログラマーが意図的にaliasingさせるケースが有り得るのではと
猜疑心にとらわれて十分な最適化ができないのは同じ
やっぱC++は関数型プログラミング言語にシフトすべき頃合い
それはそうとして、Type-Based Alias Analysisの障害となるaliasingだけことさら問題視するLLVMの人らのスタンスはフェアではないキモス
同じ型でもaliasingは起こそうと思えばいくらでも起こせるし、コンパイラはプログラマーが意図的にaliasingさせるケースが有り得るのではと
猜疑心にとらわれて十分な最適化ができないのは同じ
やっぱC++は関数型プログラミング言語にシフトすべき頃合い
823デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 15:27:33.98ID:SsMAbqSz0 >>819
3.10.10には the dynamic type と cv-qualified version of the dynamic type しかないのだが、
では double や long long は何型なのだ?
> 得られた lvalue を通したアクセスが aliasing rule に基づいて未定義動作となる可能性がある。
ではその aliasing rule を読もう。何章だ?
なんとなく aliasing rule はコンパイラ側の仕様で、C++の仕様では無いと思うのだが。
3.10.10には the dynamic type と cv-qualified version of the dynamic type しかないのだが、
では double や long long は何型なのだ?
> 得られた lvalue を通したアクセスが aliasing rule に基づいて未定義動作となる可能性がある。
ではその aliasing rule を読もう。何章だ?
なんとなく aliasing rule はコンパイラ側の仕様で、C++の仕様では無いと思うのだが。
824デフォルトの名無しさん (ワッチョイ 0233-dUYE)
2017/11/19(日) 15:35:56.40ID:xhmNfS4m0 >>823
なんでせっかくリンク貼られた定義を無視するの?(・・・英語まともに読めないならそう言ってね。)
dynamic type は式を評価した結果の属性であって型の分類ではない。
aliasing rule は basic.lval にあるルール "If a program attempts to access ... the behavior is undefined" を指す。
https://timsong-cpp.github.io/cppwp/n4659/basic.lval#8
なんでせっかくリンク貼られた定義を無視するの?(・・・英語まともに読めないならそう言ってね。)
dynamic type は式を評価した結果の属性であって型の分類ではない。
aliasing rule は basic.lval にあるルール "If a program attempts to access ... the behavior is undefined" を指す。
https://timsong-cpp.github.io/cppwp/n4659/basic.lval#8
825デフォルトの名無しさん (ワッチョイ c58a-iF25)
2017/11/19(日) 15:36:33.89ID:BMNBgd4s0 規格キチガイとの会話は不毛
ツルッツルピカピカ
ツルッツルピカピカ
826デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 15:39:23.48ID:SsMAbqSz0 >>822
違うぞ。
794内リンク読む限り、確かにこの最適化はフェアだし、使われていい。
というか、それ以前はポインタが一つでもあったら全く最適化が出来なくなっており、
確かにそれは問題視されてた。
だから標準化委員会がそっちを選んだ、というのは分かる話だ。
違う型でエイリアスすることはほぼないし。
問題は意図的にやりたいことが偶にあって、そのときにどう回避するかだよ。
763がこれに該当する。
違うぞ。
794内リンク読む限り、確かにこの最適化はフェアだし、使われていい。
というか、それ以前はポインタが一つでもあったら全く最適化が出来なくなっており、
確かにそれは問題視されてた。
だから標準化委員会がそっちを選んだ、というのは分かる話だ。
違う型でエイリアスすることはほぼないし。
問題は意図的にやりたいことが偶にあって、そのときにどう回避するかだよ。
763がこれに該当する。
827デフォルトの名無しさん (ワッチョイ 0233-dUYE)
2017/11/19(日) 15:51:01.10ID:xhmNfS4m0 >>826
現行の規格で保証される範囲でまともな方法を見出そうとしてるなら、苦労に見合う実りは得られないからやめとけと言っておく。
標準化委員会のおおかたもそんな認識だから bit_cast なんていう提案が好意的に進められている。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0476r1.html
現行の規格で保証される範囲でまともな方法を見出そうとしてるなら、苦労に見合う実りは得られないからやめとけと言っておく。
標準化委員会のおおかたもそんな認識だから bit_cast なんていう提案が好意的に進められている。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0476r1.html
828デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 15:53:50.85ID:SsMAbqSz0 >>824
では最初から分かるようにそう言え。
こちらは仕様書を読むのが仕事ではないので、そもそも用語も知らない。見て分からなければそれまでの話だ。
つか、lvalue, rvalue もひどいが、 xvalue とかもでてきて、いよいよC++はどうしようもなくなりつつあるなと実感したよ。
Linusが嫌うわけだよこれは。
ただまあこれは本題でもない。 aliasing rule の確認の方が重要だ。
してそのリンク先、3.10.10と同じだ。
> 得られた lvalue を通したアクセスが aliasing rule に基づいて未定義動作となる可能性がある。(>>819)
これはどこからそう取れるんだ?
reinterpret_castをした結果が正当なlvalueなら、それをデリファレンスした結果も正当なlvalueだろ。
この章にはどこにも”aliasしてる場合”なんて記述はない。
だらからここを根拠にするのがそもそもおかしいんだよ。
君が期待することがここに書いてあるとしたら、例えば以下になるべきなんだよ。
the dynamic type of the object IF THE OBJET IS NOT ALIASED,
とかね。でも実際はそうじゃない。
では最初から分かるようにそう言え。
こちらは仕様書を読むのが仕事ではないので、そもそも用語も知らない。見て分からなければそれまでの話だ。
つか、lvalue, rvalue もひどいが、 xvalue とかもでてきて、いよいよC++はどうしようもなくなりつつあるなと実感したよ。
Linusが嫌うわけだよこれは。
ただまあこれは本題でもない。 aliasing rule の確認の方が重要だ。
してそのリンク先、3.10.10と同じだ。
> 得られた lvalue を通したアクセスが aliasing rule に基づいて未定義動作となる可能性がある。(>>819)
これはどこからそう取れるんだ?
reinterpret_castをした結果が正当なlvalueなら、それをデリファレンスした結果も正当なlvalueだろ。
この章にはどこにも”aliasしてる場合”なんて記述はない。
だらからここを根拠にするのがそもそもおかしいんだよ。
君が期待することがここに書いてあるとしたら、例えば以下になるべきなんだよ。
the dynamic type of the object IF THE OBJET IS NOT ALIASED,
とかね。でも実際はそうじゃない。
829デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 16:10:52.86ID:SsMAbqSz0 >>827
つか、完全に暴走してるなこれは。
これならmemcpyと同じだし、
わざわざ別に作らずともmemcpyを正式に認めてCと同じ並びにしたほうがいい。
それ以前に reinterpret_cast が使われている関数内は自動的に -fno-strict-aliasing すればいいだけなんだが。
(関数単位でこの最適化を切る。ほぼ全てこれでいけるはず)
ただまあ、これが真面目に議論されているのなら、仕様書の文面や俺の感想はともかく、
君の言う通り、今のC++の仕様では対処する方法がない、ということなのだろうね。
つか、完全に暴走してるなこれは。
これならmemcpyと同じだし、
わざわざ別に作らずともmemcpyを正式に認めてCと同じ並びにしたほうがいい。
それ以前に reinterpret_cast が使われている関数内は自動的に -fno-strict-aliasing すればいいだけなんだが。
(関数単位でこの最適化を切る。ほぼ全てこれでいけるはず)
ただまあ、これが真面目に議論されているのなら、仕様書の文面や俺の感想はともかく、
君の言う通り、今のC++の仕様では対処する方法がない、ということなのだろうね。
830デフォルトの名無しさん (ワッチョイ 0233-dUYE)
2017/11/19(日) 16:11:41.87ID:xhmNfS4m0 >>828
"If a program attempts to access the stored value of an object through a glvalue of other than one of the following types the behavior is undefined"
これが lvalue (それ自体は未定義ではない)を通した「アクセス」を未定義とするルールとして読めないのだとしたら、もうどう説明しても無理だろう。
用語を知らないといいながら共通の定義を求めるのではなく開き直って勝手な解釈に基づく話を進められるようではまともな会話にもならない。
説明は諦める。
規格や先人の解説を読みなおすなりして誤りに気づいてもらえれば幸いだ。
https://www.google.com/search?q=aliasing+rule
"If a program attempts to access the stored value of an object through a glvalue of other than one of the following types the behavior is undefined"
これが lvalue (それ自体は未定義ではない)を通した「アクセス」を未定義とするルールとして読めないのだとしたら、もうどう説明しても無理だろう。
用語を知らないといいながら共通の定義を求めるのではなく開き直って勝手な解釈に基づく話を進められるようではまともな会話にもならない。
説明は諦める。
規格や先人の解説を読みなおすなりして誤りに気づいてもらえれば幸いだ。
https://www.google.com/search?q=aliasing+rule
831デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 16:30:16.51ID:SsMAbqSz0 >>830
ちげーよ。
俺は、reinterpret_castの結果が正当なlvalueなら、それはド頭の
the dynamic type of the object
に該当するから、
*(long long*)&f = i
はありだろ、と読んでるんだよ。そこは君も同じだろ。
> ポインタの reinterpret_cast で型違いの結果を得ることは未定義動作にならないし (>>819)
つまり (long long*)&f で long long* 型になるのはおk ←君の見解ね、俺も同意だが。
> それに * を適用して lvalue を得ることも未定義動作にはならない。
得られた lvalue を通したアクセスが aliasing rule に基づいて未定義動 (>>819)
つまり、*(long long*)&f もおk ←これも君の見解ね、俺も同意で。
> 得られた lvalue を通したアクセスが aliasing rule に基づいて未定義動作となる可能性がある
ここが違う。
3.10.10には alias が云々って何も書いてないだろ。
しかも *(long long*)&f = i; は両方とも long long なんだから、「型違い」のaliasではないんだよ。
だからGCC等の -fstrict-aliasing には該当しない。
というのが文面からとれる意味だ。あくまで「文面」な。
ただまあ、実際にはそうじゃないんだろ。
ちげーよ。
俺は、reinterpret_castの結果が正当なlvalueなら、それはド頭の
the dynamic type of the object
に該当するから、
*(long long*)&f = i
はありだろ、と読んでるんだよ。そこは君も同じだろ。
> ポインタの reinterpret_cast で型違いの結果を得ることは未定義動作にならないし (>>819)
つまり (long long*)&f で long long* 型になるのはおk ←君の見解ね、俺も同意だが。
> それに * を適用して lvalue を得ることも未定義動作にはならない。
得られた lvalue を通したアクセスが aliasing rule に基づいて未定義動 (>>819)
つまり、*(long long*)&f もおk ←これも君の見解ね、俺も同意で。
> 得られた lvalue を通したアクセスが aliasing rule に基づいて未定義動作となる可能性がある
ここが違う。
3.10.10には alias が云々って何も書いてないだろ。
しかも *(long long*)&f = i; は両方とも long long なんだから、「型違い」のaliasではないんだよ。
だからGCC等の -fstrict-aliasing には該当しない。
というのが文面からとれる意味だ。あくまで「文面」な。
ただまあ、実際にはそうじゃないんだろ。
832デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 16:33:08.86ID:SsMAbqSz0 ああすまん、ちょっと慌ててて余分なコピペされてるわ。
上記1回目の「得られた lvalue を通したアクセスが…」は余分で。
上記1回目の「得られた lvalue を通したアクセスが…」は余分で。
833デフォルトの名無しさん (ワッチョイ 0233-dUYE)
2017/11/19(日) 16:34:35.29ID:xhmNfS4m0 >>830
> 俺は、reinterpret_castの結果が正当なlvalueなら、それはド頭の
> the dynamic type of the object
> に該当するから、
> *(long long*)&f = i
> はありだろ、と読んでるんだよ。そこは君も同じだろ。
違うねぇ。
オブジェクトの型 dynamic type は式の型とは違うし、式の型の影響を受けるものじゃないんだよ。
何度も区別しろと言ったつもりだったんだけど。
> 俺は、reinterpret_castの結果が正当なlvalueなら、それはド頭の
> the dynamic type of the object
> に該当するから、
> *(long long*)&f = i
> はありだろ、と読んでるんだよ。そこは君も同じだろ。
違うねぇ。
オブジェクトの型 dynamic type は式の型とは違うし、式の型の影響を受けるものじゃないんだよ。
何度も区別しろと言ったつもりだったんだけど。
834デフォルトの名無しさん (ワッチョイ 0233-dUYE)
2017/11/19(日) 16:35:57.16ID:xhmNfS4m0 ごめん、アンカーミスった。 >833 は >831 宛てね。
835デフォルトの名無しさん (ワッチョイ 82ae-Eq1o)
2017/11/19(日) 16:43:31.03ID:7jEiMXMd0836デフォルトの名無しさん (オッペケ Srd1-0Zlk)
2017/11/19(日) 16:46:31.93ID:Q6cWJ/Rgr > *(long long*)&f で long long* 型になるのはおk
んなこたーない
doubleオブジェクトの領域にlong longでアクセスすることが未定義動作
んなこたーない
doubleオブジェクトの領域にlong longでアクセスすることが未定義動作
837デフォルトの名無しさん (ワッチョイ c6e7-RjUU)
2017/11/19(日) 17:22:20.65ID:XAwzlQ9S0 double f = 0;
と変数fを構築した時点で、「値0.0のdoubleオブジェクト」が作られてメモリに置かれるんだよ(規格で言うstored valueな)
それはスタック回収やdeleteで破壊されるまでずーーっとdoubleのままで、変わることはないの
外側でポインタや参照をどれだけいじくり回したって決して変わらないの
家の横に「←ここは馬小屋です」って看板を立てたって、その家は家のままだし、勝手に馬を入れて飼うのは未定義動作なんだよ
そろそろ理解したらどうなの
と変数fを構築した時点で、「値0.0のdoubleオブジェクト」が作られてメモリに置かれるんだよ(規格で言うstored valueな)
それはスタック回収やdeleteで破壊されるまでずーーっとdoubleのままで、変わることはないの
外側でポインタや参照をどれだけいじくり回したって決して変わらないの
家の横に「←ここは馬小屋です」って看板を立てたって、その家は家のままだし、勝手に馬を入れて飼うのは未定義動作なんだよ
そろそろ理解したらどうなの
838デフォルトの名無しさん (ワッチョイ c58a-iF25)
2017/11/19(日) 17:56:59.79ID:BMNBgd4s0 >>835
内容ある発言と言われても別にこんなのは規格をひっくり返して議論するようなことでないし
たぶん俺なら(little endianだとして)
union Double {
double v;
struct {
uint64_t f:52; // fraction
uint64_t e:11; // exponent
uint64_t s:1; // sign
};
};
とかにするかな、それで何の問題も起こらない
内容ある発言と言われても別にこんなのは規格をひっくり返して議論するようなことでないし
たぶん俺なら(little endianだとして)
union Double {
double v;
struct {
uint64_t f:52; // fraction
uint64_t e:11; // exponent
uint64_t s:1; // sign
};
};
とかにするかな、それで何の問題も起こらない
839デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 18:00:09.08ID:SsMAbqSz0 >>837
多分それが違うぞ。それはどこに書いてある?
少なくとも多くのCプログラマはそう思って無い。だから平気でキャストする。
そして830内ULRも読んだが、これも明示的なエイリアスがあるケースだ。
お前らが過度にびびって拡大解釈してるだけだろ。
多分それが違うぞ。それはどこに書いてある?
少なくとも多くのCプログラマはそう思って無い。だから平気でキャストする。
そして830内ULRも読んだが、これも明示的なエイリアスがあるケースだ。
お前らが過度にびびって拡大解釈してるだけだろ。
840デフォルトの名無しさん (ワッチョイ 82ae-Eq1o)
2017/11/19(日) 18:11:47.43ID:7jEiMXMd0 あー、こいつcast-as-lvalueに完全に洗脳されている手合いかw
841デフォルトの名無しさん (ワッチョイ 0233-dUYE)
2017/11/19(日) 18:14:47.74ID:xhmNfS4m0 >>839
https://timsong-cpp.github.io/cppwp/n4659/intro.object#1
> ... The properties of an object are determined when the object is created. ... An object has a type. ...
今度からは少なくとも自分でどこをどう探したかぐらい示そうな。
https://timsong-cpp.github.io/cppwp/n4659/intro.object#1
> ... The properties of an object are determined when the object is created. ... An object has a type. ...
今度からは少なくとも自分でどこをどう探したかぐらい示そうな。
842デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 18:31:26.29ID:SsMAbqSz0 >>841
嘘つけ。キャストした場合についてはどこにも書いてない。
型が普遍なんてのは、君が勝手に思い込んでいるだけだ。
というか、いわゆる「強い型」ってのはそうらしいが、C++はそうじゃないだろ。
ちなみに俺も反論を用意してたところだ。
https://godbolt.org/g/viYhGj
中身は795の場所で、ついでだから f = *(double*)&i; を試した。
予想通りこちらはfmov(movsd)が出た。(最適化は切ってある)
つまり、俺が768で言ったように、
*(long long*)&f = i; // mov命令でコピー
または
f = *(double*)&i; // fmov命令でコピー
になるんだよ。少なくともgccはキャストされればその型だと認識している。
君はこれを矛盾無く説明出来ないだろ。
嘘つけ。キャストした場合についてはどこにも書いてない。
型が普遍なんてのは、君が勝手に思い込んでいるだけだ。
というか、いわゆる「強い型」ってのはそうらしいが、C++はそうじゃないだろ。
ちなみに俺も反論を用意してたところだ。
https://godbolt.org/g/viYhGj
中身は795の場所で、ついでだから f = *(double*)&i; を試した。
予想通りこちらはfmov(movsd)が出た。(最適化は切ってある)
つまり、俺が768で言ったように、
*(long long*)&f = i; // mov命令でコピー
または
f = *(double*)&i; // fmov命令でコピー
になるんだよ。少なくともgccはキャストされればその型だと認識している。
君はこれを矛盾無く説明出来ないだろ。
843デフォルトの名無しさん (オッペケ Srd1-0Zlk)
2017/11/19(日) 18:51:00.89ID:Q6cWJ/Rgr >キャストした場合についてはどこにも書いてない
はて、N4700の6.10/p8ほぼそのままの文面が少し上に貼り付けてあったような…
>>821
N4700 3.9, 4.5/p1, 6.8全般, 6.10/p8, 12.3/p1, 12.3/p(5.3), その他「launder」が登場する記述全般
はて、N4700の6.10/p8ほぼそのままの文面が少し上に貼り付けてあったような…
>>821
N4700 3.9, 4.5/p1, 6.8全般, 6.10/p8, 12.3/p1, 12.3/p(5.3), その他「launder」が登場する記述全般
844デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/19(日) 18:52:07.63ID:p3uF8GIb0 正しいそうなコードが吐かれたことは未定義動作でないという証拠には全くならない
なぜなら未定義動作というのは
コンパイル時のエラー、実行時のエラー(または例外)、一見正常っぽく気体通り動く、その他、
というあらゆる事象を包含し得るので、、、
もちろんコンパイラの変更で(ことによったらコンパイル条件の変更だけでも)
ある日突然狂ったコードが吐かれる危険性があるが
そうなっても未定義動作をプログラムした人の責任
よって現時点で正しいげなコードが吐かれることをいかに力説しても無駄で、
規格の矛盾の指摘にはつながらない
なぜなら未定義動作というのは
コンパイル時のエラー、実行時のエラー(または例外)、一見正常っぽく気体通り動く、その他、
というあらゆる事象を包含し得るので、、、
もちろんコンパイラの変更で(ことによったらコンパイル条件の変更だけでも)
ある日突然狂ったコードが吐かれる危険性があるが
そうなっても未定義動作をプログラムした人の責任
よって現時点で正しいげなコードが吐かれることをいかに力説しても無駄で、
規格の矛盾の指摘にはつながらない
845デフォルトの名無しさん (ワッチョイ 0233-dUYE)
2017/11/19(日) 18:53:33.74ID:xhmNfS4m0 >>842
オブジェクトの型に関与しない操作についていちいち記述があるわけないだろ。
まさか「〜によりオブジェクトの方は変わらない」とかの記述が全演算子&標準関数その他諸々について必要だ
なんて言うわけじゃないよね?
未定義動作の結果はなんでもアリだと言っただろう。
その結果(想定の命令コードが生成されたこと)が未定義動作の結果のひとつだとして、何の矛盾も無い。
オブジェクトの型に関与しない操作についていちいち記述があるわけないだろ。
まさか「〜によりオブジェクトの方は変わらない」とかの記述が全演算子&標準関数その他諸々について必要だ
なんて言うわけじゃないよね?
未定義動作の結果はなんでもアリだと言っただろう。
その結果(想定の命令コードが生成されたこと)が未定義動作の結果のひとつだとして、何の矛盾も無い。
846片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ f9b3-HT85)
2017/11/19(日) 19:03:59.08ID:R56+Z6E80 inline const self_type *const_this()
{
return this;
}
template <typename T_TYPE>
inline T_TYPE *drop_const(const T_TYPE *obj)
{
return const_cast<T_TYPE *>(obj);
}
{
return this;
}
template <typename T_TYPE>
inline T_TYPE *drop_const(const T_TYPE *obj)
{
return const_cast<T_TYPE *>(obj);
}
847デフォルトの名無しさん (ワッチョイ f9b3-AWKa)
2017/11/19(日) 19:04:38.54ID:RgqRbH7C0 ソースが仕様、ソース読めってやつか。
848デフォルトの名無しさん (ワッチョイ 82ae-Eq1o)
2017/11/19(日) 19:25:00.73ID:7jEiMXMd0 そう言って居直るやつは問題だが
ソースを読まない言い訳にするやつもダメ
腐敗は両岸から起きうることだ
ソースを読まない言い訳にするやつもダメ
腐敗は両岸から起きうることだ
849デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 19:53:33.03ID:SsMAbqSz0 >>844-845
うむ。それは一理ある。
>>845
では逆から行こう。reiniterpret_castのど頭、
> 5.2.10 Reinterpret cast
> 1. The result of the expression reinterpret_cast<T>(v) is the result of converting the expression v to type T.
vをTに型変換したのが結果だとそのまま書いてある。
これはどう解釈すれば、「型はどうやっても変更できない」と取れるのだ?
さすがに無理だろ。
> 7. An object pointer can be explicitly converted to an object pointer of a different type.
これも型を変更できると読めるが。そして再び1に戻ると、
> 1. ---- If T is an lvalue reference type or an rvalue reference to function type, the result is an lvalue;
つまり当然有効なlvalueであり、デリファレンスも可能だ。
だからキャストを反映してmovなりfmovが出るのだ。
違うか?
君が言うようにメモリ上の型が普遍なら、どうやっても i には fmov が出ては駄目だろ。
(と思ったが、君は837ではないのか、、、)
うむ。それは一理ある。
>>845
では逆から行こう。reiniterpret_castのど頭、
> 5.2.10 Reinterpret cast
> 1. The result of the expression reinterpret_cast<T>(v) is the result of converting the expression v to type T.
vをTに型変換したのが結果だとそのまま書いてある。
これはどう解釈すれば、「型はどうやっても変更できない」と取れるのだ?
さすがに無理だろ。
> 7. An object pointer can be explicitly converted to an object pointer of a different type.
これも型を変更できると読めるが。そして再び1に戻ると、
> 1. ---- If T is an lvalue reference type or an rvalue reference to function type, the result is an lvalue;
つまり当然有効なlvalueであり、デリファレンスも可能だ。
だからキャストを反映してmovなりfmovが出るのだ。
違うか?
君が言うようにメモリ上の型が普遍なら、どうやっても i には fmov が出ては駄目だろ。
(と思ったが、君は837ではないのか、、、)
850デフォルトの名無しさん (ワッチョイ 82ae-Eq1o)
2017/11/19(日) 20:02:38.24ID:7jEiMXMd0851デフォルトの名無しさん (ワッチョイ 0233-dUYE)
2017/11/19(日) 20:09:33.36ID:xhmNfS4m0 >>849
> これはどう解釈すれば、「型はどうやっても変更できない」と取れるのだ?
式の型 (static type) は変わるが、オブジェクトの型 (dynamic type) は変わらない。
> 君が言うようにメモリ上の型が普遍なら、どうやっても i には fmov が出ては駄目だろ。
未定義動作ならなんでもアリだと言った。
> これはどう解釈すれば、「型はどうやっても変更できない」と取れるのだ?
式の型 (static type) は変わるが、オブジェクトの型 (dynamic type) は変わらない。
> 君が言うようにメモリ上の型が普遍なら、どうやっても i には fmov が出ては駄目だろ。
未定義動作ならなんでもアリだと言った。
852デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 20:15:36.23ID:SsMAbqSz0 >>851
それで突っぱねるのなら平行線だね。
俺は仕様書に詳しいわけでは無いから動作から説明するしかない。
君は仕様書には詳しいようだが、キャストした場合にも型が変更されないという記述を出して来れない。
ま、デッドロックだ。
とはいえ状況は色々分かったよ。ありがとう。
それで突っぱねるのなら平行線だね。
俺は仕様書に詳しいわけでは無いから動作から説明するしかない。
君は仕様書には詳しいようだが、キャストした場合にも型が変更されないという記述を出して来れない。
ま、デッドロックだ。
とはいえ状況は色々分かったよ。ありがとう。
853デフォルトの名無しさん (オッペケ Srd1-0Zlk)
2017/11/19(日) 20:42:27.06ID:Q6cWJ/Rgr >つまり当然有効なlvalueであり、デリファレンスも可能だ。
仕様を引用して説明されてもこのとんちんかんな発言を繰り返すあたり、
知らないから間違えているのではなくオツムが悪いので必然的に無知になったと言うことに>>851は気付くべき
仕様を引用して説明されてもこのとんちんかんな発言を繰り返すあたり、
知らないから間違えているのではなくオツムが悪いので必然的に無知になったと言うことに>>851は気付くべき
854デフォルトの名無しさん (ワッチョイ 0233-dUYE)
2017/11/19(日) 20:47:51.98ID:xhmNfS4m0 >>852
> 俺は仕様書に詳しいわけでは無いから動作から説明するしかない。
なら↓お前の理解に基づいてこの動作を説明できるか試してみるといいかもしれない。
https://wandbox.org/permlink/2aKzO4VN3KRDB6Gu
> 君は仕様書には詳しいようだが、キャストした場合にも型が変更されないという記述を出して来れない。
式の型 (static type) とオブジェクトの型 (dynamic type) は別物だという客観的な
前提 [intro.defs] を素直に読みさえすれば何度も見えてるはずなんだけどな。
> 俺は仕様書に詳しいわけでは無いから動作から説明するしかない。
なら↓お前の理解に基づいてこの動作を説明できるか試してみるといいかもしれない。
https://wandbox.org/permlink/2aKzO4VN3KRDB6Gu
> 君は仕様書には詳しいようだが、キャストした場合にも型が変更されないという記述を出して来れない。
式の型 (static type) とオブジェクトの型 (dynamic type) は別物だという客観的な
前提 [intro.defs] を素直に読みさえすれば何度も見えてるはずなんだけどな。
855デフォルトの名無しさん (ワッチョイ c6e7-RjUU)
2017/11/19(日) 20:54:00.37ID:XAwzlQ9S0 こいつわかってて引っ掻き回してるだけのような気がするわ
そうじゃなかったら馬鹿すぎる
そうじゃなかったら馬鹿すぎる
856デフォルトの名無しさん (ワッチョイ 02e7-GXP8)
2017/11/19(日) 21:10:07.51ID:JvH46D6m0 ある型の変数を入力として、別の型にキャストされた値を返すのはそりゃできるだろう
元の変数の型を変えることはそりゃ無理だろう
元の変数の型を変えることはそりゃ無理だろう
857デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 21:20:19.91ID:SsMAbqSz0858デフォルトの名無しさん (ワッチョイ 0233-dUYE)
2017/11/19(日) 21:40:24.30ID:xhmNfS4m0 >>857
お前の中でどういう理解になっているかは把握できていない。
その答えからすると、
"*(long long*)&f = i;" なら未定義動作にならないけど "auto p = (long long*)&f; *p = i;" なら未定義動作になる、
という理解なのかな。まぁそんなことは無いんだけどさ。
お前の中でどういう理解になっているかは把握できていない。
その答えからすると、
"*(long long*)&f = i;" なら未定義動作にならないけど "auto p = (long long*)&f; *p = i;" なら未定義動作になる、
という理解なのかな。まぁそんなことは無いんだけどさ。
859デフォルトの名無しさん (ワッチョイ f9b3-AWKa)
2017/11/19(日) 22:14:48.53ID:RgqRbH7C0 いやまあ無いんだけどな。
いつまで言い張る気なんだろうか。
いつまで言い張る気なんだろうか。
860デフォルトの名無しさん (ワッチョイ f9b3-AWKa)
2017/11/19(日) 22:16:28.57ID:RgqRbH7C0 あると言えばあるんだけどな。
そろそろごめんなさいしてはどうか。
そろそろごめんなさいしてはどうか。
861デフォルトの名無しさん (ワッチョイ 6e81-LokX)
2017/11/19(日) 22:24:05.56ID:kv2+5Ve80 本の虫での解説記事が待たれる
862デフォルトの名無しさん (ワッチョイ a980-61Vg)
2017/11/19(日) 23:33:53.04ID:qbUCqX2r0 strict aliasing ruleについてはここで解りやすく解説されてる。自分で怪しいと思う奴は読め。
http://d.hatena.ne.jp/yohhoy/touch/20120220/p1
http://d.hatena.ne.jp/yohhoy/touch/20120220/p1
863デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/19(日) 23:37:47.80ID:SsMAbqSz0 >>858
ああそうだぞ。それは>>815で既に言ったし、実際に発現事例は今のところ全てaliasされてる。
顕在化させるには、「別型」で「alias」しないといけないんだよ。
オプションの名前も全くそうだろ。
多分君は理屈が分かってないんだ。
あれはtypeグループごとにメモリフェンスしていて、
別typeグループに入っていると結果的にout-of-orderになるだけなんだよ。
それは常時動いている。
ただし different type で alias して無いと顕現しない(ユーザ側には見えない)というだけ。
だからその可能性がある部分にwarningが出る。
しかしwarningというのは「普通やらないけど大丈夫か?」であって「絶対駄目」ではない。
結局君は different type alias について正確に理解出来てないんだよ。
上記を覆したければ、alias無しで different type alias の最適化がかかっている例を持って来い。
君の言う、
> まぁそんなことは無いんだけどさ。
の例だね。多分無いから。
既に言ったがLLVMだからインデックスレジスタは完全に残るんだよ。(多分)
キャストを知らないのだから理解出来ないようだが、(long long*) 部分は命令にならない。
(これはC++仕様書にも明記してあるが、C界では常識)
だから *&f だけが残り、結果、
*(long long*)&f と *&f (=f) は同じLLVM命令になる。(はず)
だからそこは問題視されてないんだよ。最適化器からも同じに見えるから。
逆に考えてみろ。同じtypeグループ内、例えば int と int が out-of-order になったら話にならんだろ。
だから同typeグループ内は alias があっても in-orderになってる。
そして別グループ double と int は常にout-of-orderになってるが、当然、関数でつながれているときにはフェンスされる。
例えば int a = max_idx(double*) みたいな感じで、doubleの配列から最大値の添字を取るときとかね。
だから different type で alias して無いとそれが見えないようになってるんだよ。
というのが俺の理解だ。覆す例があればよろしく。
ああそうだぞ。それは>>815で既に言ったし、実際に発現事例は今のところ全てaliasされてる。
顕在化させるには、「別型」で「alias」しないといけないんだよ。
オプションの名前も全くそうだろ。
多分君は理屈が分かってないんだ。
あれはtypeグループごとにメモリフェンスしていて、
別typeグループに入っていると結果的にout-of-orderになるだけなんだよ。
それは常時動いている。
ただし different type で alias して無いと顕現しない(ユーザ側には見えない)というだけ。
だからその可能性がある部分にwarningが出る。
しかしwarningというのは「普通やらないけど大丈夫か?」であって「絶対駄目」ではない。
結局君は different type alias について正確に理解出来てないんだよ。
上記を覆したければ、alias無しで different type alias の最適化がかかっている例を持って来い。
君の言う、
> まぁそんなことは無いんだけどさ。
の例だね。多分無いから。
既に言ったがLLVMだからインデックスレジスタは完全に残るんだよ。(多分)
キャストを知らないのだから理解出来ないようだが、(long long*) 部分は命令にならない。
(これはC++仕様書にも明記してあるが、C界では常識)
だから *&f だけが残り、結果、
*(long long*)&f と *&f (=f) は同じLLVM命令になる。(はず)
だからそこは問題視されてないんだよ。最適化器からも同じに見えるから。
逆に考えてみろ。同じtypeグループ内、例えば int と int が out-of-order になったら話にならんだろ。
だから同typeグループ内は alias があっても in-orderになってる。
そして別グループ double と int は常にout-of-orderになってるが、当然、関数でつながれているときにはフェンスされる。
例えば int a = max_idx(double*) みたいな感じで、doubleの配列から最大値の添字を取るときとかね。
だから different type で alias して無いとそれが見えないようになってるんだよ。
というのが俺の理解だ。覆す例があればよろしく。
864デフォルトの名無しさん (ワッチョイ c6e7-RjUU)
2017/11/19(日) 23:50:16.66ID:XAwzlQ9S0 ダメだこりゃ
865デフォルトの名無しさん (ワッチョイ 8d8a-Dzd0)
2017/11/20(月) 00:03:11.09ID:y/6cZRj30 そろそろ専用スレを建てて欲しいな
866デフォルトの名無しさん (ワッチョイ f9b3-AWKa)
2017/11/20(月) 00:06:21.48ID:Veq8ZMOx0 最初に質問した奴が謝罪すれば治まるのでは。
867デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/20(月) 00:12:55.32ID:gqHMI2DN0 最適化は人類には早すぎた
早すぎたテクノロジー
早すぎたテクノロジー
いきなりレベルの低い話で割り込んで恐縮です。
よろしくお願いいたします。
久々にJava から C++ に移行して、簡単なイテレータパターンを実装しました。
Java で書いた
https://ideone.com/DJ9pI5
を元に C++ で書いてみたのがこれです。
https://ideone.com/FwNlc4
ここで、コンテナにあたる Aggregateクラス(具象クラスは BookShelf) の中に
イテレータ(Iterator:具象クラスは BookShelfIterator) を作成して返すメンバ関数 iterator() を定義していますが、
C++ だからデストラクタも定義しないとね、と考えて
当初、Aggregate クラスに仮想メンバ関数 delete_iterator() を書いて
Aggregate::iterator() と Aggregate::delete_iterator() を対にするように作っておりました。
しかし教科書をみると
Aggregate::delete_iterator() みたいなデストラクタはそもそも定義しないようで、
普通に
Iterator *it = BookShelf(具象クラス)->iterator();
delete it;
でなんの問題もないようです。
なぜ、これで問題がないのかトンと見当がつきません。
イテレータを作った具象クラスの中でデストラクタを定義する、というのならば分かりやすいのですが、
抽象クラスのポインタをキャストもせずに直接 delete できるのは、どういうからくりになっているのでしょうか?
よろしくお願いいたします。
よろしくお願いいたします。
久々にJava から C++ に移行して、簡単なイテレータパターンを実装しました。
Java で書いた
https://ideone.com/DJ9pI5
を元に C++ で書いてみたのがこれです。
https://ideone.com/FwNlc4
ここで、コンテナにあたる Aggregateクラス(具象クラスは BookShelf) の中に
イテレータ(Iterator:具象クラスは BookShelfIterator) を作成して返すメンバ関数 iterator() を定義していますが、
C++ だからデストラクタも定義しないとね、と考えて
当初、Aggregate クラスに仮想メンバ関数 delete_iterator() を書いて
Aggregate::iterator() と Aggregate::delete_iterator() を対にするように作っておりました。
しかし教科書をみると
Aggregate::delete_iterator() みたいなデストラクタはそもそも定義しないようで、
普通に
Iterator *it = BookShelf(具象クラス)->iterator();
delete it;
でなんの問題もないようです。
なぜ、これで問題がないのかトンと見当がつきません。
イテレータを作った具象クラスの中でデストラクタを定義する、というのならば分かりやすいのですが、
抽象クラスのポインタをキャストもせずに直接 delete できるのは、どういうからくりになっているのでしょうか?
よろしくお願いいたします。
869デフォルトの名無しさん (ワッチョイ 0233-dUYE)
2017/11/20(月) 00:34:03.39ID:uuALJ8Da0 >>863
> 上記を覆したければ、alias無しで different type alias の最適化がかかっている例を持って来い。
これでいいかな。
https://wandbox.org/permlink/RNDO0CIl9UpsaRwQ
> 上記を覆したければ、alias無しで different type alias の最適化がかかっている例を持って来い。
これでいいかな。
https://wandbox.org/permlink/RNDO0CIl9UpsaRwQ
870デフォルトの名無しさん (ワッチョイ 0233-dUYE)
2017/11/20(月) 00:41:55.57ID:uuALJ8Da0871デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/20(月) 00:53:02.54ID:H8zFncfx0 >>869
せこいわw
gcc7.2.0(そこの最新版)で%eにしたら見えるがな。
まあ努力はご苦労様。
とはいえ、gcc4.4.7ならこのコードでも顕在化するし、「aliasが要る」という要件が怪しいのは認める。
この最適化はまだ発展途上のようだね。
せこいわw
gcc7.2.0(そこの最新版)で%eにしたら見えるがな。
まあ努力はご苦労様。
とはいえ、gcc4.4.7ならこのコードでも顕在化するし、「aliasが要る」という要件が怪しいのは認める。
この最適化はまだ発展途上のようだね。
872デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/20(月) 01:07:57.23ID:H8zFncfx0 >>870
おっとすまん、輻輳してしまったが、869で問題なく分かったぞ。
そして両方とも、gcc7.2.0にするか、globalにすると直る。
したがって、 different type alias で問題が発生するのには 「aliasが要る」という俺の見解は間違いだ。
ただ、過度の最適化による不具合を防ぐ努力は行われており、
gcc4..4.7→gcc7.2.0でこのコードに関しては修正されてる。
とはいえgcc7.2.0でもどこまで動くか分かった物ではないね。
おっとすまん、輻輳してしまったが、869で問題なく分かったぞ。
そして両方とも、gcc7.2.0にするか、globalにすると直る。
したがって、 different type alias で問題が発生するのには 「aliasが要る」という俺の見解は間違いだ。
ただ、過度の最適化による不具合を防ぐ努力は行われており、
gcc4..4.7→gcc7.2.0でこのコードに関しては修正されてる。
とはいえgcc7.2.0でもどこまで動くか分かった物ではないね。
873デフォルトの名無しさん (ワッチョイ 0233-dUYE)
2017/11/20(月) 01:11:14.23ID:uuALJ8Da0 >>872 さぁ、お前の罪を数えろ。
874デフォルトの名無しさん (ワッチョイ f9b3-AWKa)
2017/11/20(月) 01:32:56.30ID:Veq8ZMOx0 何で素直に謝罪できないんだろうね。
875はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 01:42:11.88ID:mEO8F9pQ0 >>868
それが virtual の効果だとしか。
基底で virtual 宣言したメンバ関数群はそのポインタをまとめたテーブルが作られ、オブジェクトはそのテーブルを指すポインタを持つ。
派生のオブジェクトは派生側の関数群を指すポインタテーブルへのポインタを持つ。
だから virtual を使うと「変数の型ではなくオブジェクトが呼出すべきメンバ関数を知っている」という状況を作れるんだよ。
ただ、基底のデストラクタを virtual に指定しないときでも見かけ上は型システムをパスしてしまいコンパイルエラーにならない場合がある。
これは未定義だからやっちゃダメだよ。
それが virtual の効果だとしか。
基底で virtual 宣言したメンバ関数群はそのポインタをまとめたテーブルが作られ、オブジェクトはそのテーブルを指すポインタを持つ。
派生のオブジェクトは派生側の関数群を指すポインタテーブルへのポインタを持つ。
だから virtual を使うと「変数の型ではなくオブジェクトが呼出すべきメンバ関数を知っている」という状況を作れるんだよ。
ただ、基底のデストラクタを virtual に指定しないときでも見かけ上は型システムをパスしてしまいコンパイルエラーにならない場合がある。
これは未定義だからやっちゃダメだよ。
876はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 01:59:59.63ID:mEO8F9pQ0 >>868,875
Wikipedia にも解説があるやないけ
https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E9%96%A2%E6%95%B0%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB
Wikipedia にも解説があるやないけ
https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E9%96%A2%E6%95%B0%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB
>>875-876
うーん、普通のポリモフィズムの話が同様に適用できるんですね…
Base<-Derived1
Base<-Derived2
の基底・派生関係のとき
Base *p = new Derived1() ならば、delete p; は delete (Derived1 *)p;
Base *p = new Derived2() ならば、delete p; は delete (Derived2 *)p;
となる、と考えていいでしょうか。
Base *p = new Derived1() ならば、p->method(); は p->method_Dirived1();
Base *p = new Derived2() ならば、p->method(); は p->method_Dirived2();
という話と同じなんですね。
んーなせ Aggregate::delete_iterator() を作らなくちゃ、と考えたのか逆にわからなくなってしまいました…
ありがとうございました。
うーん、普通のポリモフィズムの話が同様に適用できるんですね…
Base<-Derived1
Base<-Derived2
の基底・派生関係のとき
Base *p = new Derived1() ならば、delete p; は delete (Derived1 *)p;
Base *p = new Derived2() ならば、delete p; は delete (Derived2 *)p;
となる、と考えていいでしょうか。
Base *p = new Derived1() ならば、p->method(); は p->method_Dirived1();
Base *p = new Derived2() ならば、p->method(); は p->method_Dirived2();
という話と同じなんですね。
んーなせ Aggregate::delete_iterator() を作らなくちゃ、と考えたのか逆にわからなくなってしまいました…
ありがとうございました。
次に >>868 のテンプレート版を書いてみました。
https://ideone.com/LO68r5
void * (Java の Object)をキャストするのを嫌ったという理由になります。
>>868
>class Iterator
>virtual void *next() = 0;
>class BookShelfIterator : public Iterator { };
>void *BookShelfIterator::next()
>Book *book = (Book *)it->next();
https://ideone.com/LO68r5
そこで不思議に思ったことなんですが、
コンストラクタは
template <typename T> class Derived : Base { public: Derived(){}; };
とテンプレート引数 T をコンストラクタ名をつけなくていい(public: Derived<T>(){}; としない)のに、
デストラクタは
template <typename T> class Derived : Base { public: ~Derived<T>(){}; }; (クラスのメンバ関数宣言)
template <typename T> Derived<T>::~Derived<T>() { } (クラスのメンバ関数定義)
とテンプレート引数 T をデストラクタ名につけないといけないのでしょうか?何か分かりやすい理由はありますでしょうか?
https://ideone.com/LO68r5
void * (Java の Object)をキャストするのを嫌ったという理由になります。
>>868
>class Iterator
>virtual void *next() = 0;
>class BookShelfIterator : public Iterator { };
>void *BookShelfIterator::next()
>Book *book = (Book *)it->next();
https://ideone.com/LO68r5
そこで不思議に思ったことなんですが、
コンストラクタは
template <typename T> class Derived : Base { public: Derived(){}; };
とテンプレート引数 T をコンストラクタ名をつけなくていい(public: Derived<T>(){}; としない)のに、
デストラクタは
template <typename T> class Derived : Base { public: ~Derived<T>(){}; }; (クラスのメンバ関数宣言)
template <typename T> Derived<T>::~Derived<T>() { } (クラスのメンバ関数定義)
とテンプレート引数 T をデストラクタ名につけないといけないのでしょうか?何か分かりやすい理由はありますでしょうか?
879はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 03:03:42.40ID:mEO8F9pQ0 >>877
キャストとは意味が違うんだよ。
上でさんざん議論してる static type と dynamic type の話とも関係あるのかなぁ?
入り組んでてよくわからん。
型はあくまでも Base* で、仮想関数テーブルを辿って必要な関数を呼び出すってだけだ。
繰返すけど、 Base のデストラクタに virtual がついてないときに Base のポインタに対して delete すると
Base のデストラクタが呼び出されるだけになってまうので気をつけてな。
派生クラスのデストラクタが空っぽのときでもデストラクタが呼び出される必要はあるらしいぞ。
キャストとは意味が違うんだよ。
上でさんざん議論してる static type と dynamic type の話とも関係あるのかなぁ?
入り組んでてよくわからん。
型はあくまでも Base* で、仮想関数テーブルを辿って必要な関数を呼び出すってだけだ。
繰返すけど、 Base のデストラクタに virtual がついてないときに Base のポインタに対して delete すると
Base のデストラクタが呼び出されるだけになってまうので気をつけてな。
派生クラスのデストラクタが空っぽのときでもデストラクタが呼び出される必要はあるらしいぞ。
>>878 の続きです。
同じく、テンプレート版
https://ideone.com/LO68r5
にて一点不満におもったことがあります。
>>878 では基底クラスの記述について、
template <typename T>
class Iterator {
public:
virtual T *next() = 0;
};
派生クラスは
template <typename T>
class XXXIterator : Iterato<T> {
public:
T *next();
};
template <typename T> T *XXXIterator::next() { ... }
と書きました。
しかし本当は、基底クラスを純粋に一個にしたいと希望しているのです。
つまり基底クラスにテンプレート引数Tを書きたくない。
class Iterator {
public:
virtual ○○○ *next() = 0;
};
と基底クラスを一つだけにしぼりつつ、
派生クラスにテンプレート引数を使用して記述することは可能でしょうか?○○○に書けるなにかいい記述はないでしょうか?
テンプレート引数を使用した具象クラスに対応する、テンプレート引数を使用しない抽象クラスを書くことは可能でしょうか?
同じく、テンプレート版
https://ideone.com/LO68r5
にて一点不満におもったことがあります。
>>878 では基底クラスの記述について、
template <typename T>
class Iterator {
public:
virtual T *next() = 0;
};
派生クラスは
template <typename T>
class XXXIterator : Iterato<T> {
public:
T *next();
};
template <typename T> T *XXXIterator::next() { ... }
と書きました。
しかし本当は、基底クラスを純粋に一個にしたいと希望しているのです。
つまり基底クラスにテンプレート引数Tを書きたくない。
class Iterator {
public:
virtual ○○○ *next() = 0;
};
と基底クラスを一つだけにしぼりつつ、
派生クラスにテンプレート引数を使用して記述することは可能でしょうか?○○○に書けるなにかいい記述はないでしょうか?
テンプレート引数を使用した具象クラスに対応する、テンプレート引数を使用しない抽象クラスを書くことは可能でしょうか?
881はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 03:15:21.39ID:mEO8F9pQ0 >>878
付けなくてもいいし、付けても通るってのは私は今初めて知った。
付けなくてもいいし、付けても通るってのは私は今初めて知った。
882はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 03:23:45.23ID:mEO8F9pQ0 >>879
ありがとうございます。
meyers の effective C++ 第7章を読み返しています
C++ には Java の fainal がないので、うっかり、std::string や std::vector を派生させてしまうところでした、危ないなあ…
ありがとうございます。
meyers の effective C++ 第7章を読み返しています
C++ には Java の fainal がないので、うっかり、std::string や std::vector を派生させてしまうところでした、危ないなあ…
884デフォルトの名無しさん (ワッチョイ 869f-GXP8)
2017/11/20(月) 03:30:13.52ID:iECo0Ul80 >>868
混乱するならシンプルに設計したら?例えばこんな感じ?登録して表示するだけなら簡単でしょ?
#include <stdio.h>
#include <string>
#include <vector>
class Book{
public:
std::string name;
Book(std::string _name) : name(_name){}
void show(){printf("%s\n",name.c_str());}
};
class Books{
public:
std::vector<Book *>m_list;
Books(){}
~Books(){for (auto p : m_list) if (p) delete p;}
void addBook(Book *p){m_list.push_back(p);}
};
int main(){
Books books;
books.addBook(new Book("aa"));books.addBook(new Book("bb"));
books.addBook(new Book("cc"));books.addBook(new Book("dd"));
for (auto p : books.m_list) p->show();
// iterator使いたいなら
//for (auto it = books.m_list.begin(); it != books.m_list.end; it++) (*it)->show();
return 0;
}
混乱するならシンプルに設計したら?例えばこんな感じ?登録して表示するだけなら簡単でしょ?
#include <stdio.h>
#include <string>
#include <vector>
class Book{
public:
std::string name;
Book(std::string _name) : name(_name){}
void show(){printf("%s\n",name.c_str());}
};
class Books{
public:
std::vector<Book *>m_list;
Books(){}
~Books(){for (auto p : m_list) if (p) delete p;}
void addBook(Book *p){m_list.push_back(p);}
};
int main(){
Books books;
books.addBook(new Book("aa"));books.addBook(new Book("bb"));
books.addBook(new Book("cc"));books.addBook(new Book("dd"));
for (auto p : books.m_list) p->show();
// iterator使いたいなら
//for (auto it = books.m_list.begin(); it != books.m_list.end; it++) (*it)->show();
return 0;
}
885はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 03:34:54.09ID:mEO8F9pQ0 >>880
Java のことはあまり知らんので元ネタにした Java 版の方をよく見てなったけど、
interface のかわりに抽象クラスを使おうとしてたのか。
似たような機能に見えちゃうかもしれないけど、インターフェイスを強制する方法としては抽象クラスはあまり良くない。
C++ 的にはコンパイル時にディスパッチする多相と実行時の多相があって、
抽象クラスは実行時にディスパッチする仕組みなのでコンパイル時に確定するはずのことを実行時にするのはクソザコという風潮。
だけど「コンセプト」の機能が C++ に導入されるのが延び延びになってていまだ入ってないので、
traits とか SFINAE とかを使ったまわりくどいメタプログラミングで代用してるのが実情なんだ。
Java のことはあまり知らんので元ネタにした Java 版の方をよく見てなったけど、
interface のかわりに抽象クラスを使おうとしてたのか。
似たような機能に見えちゃうかもしれないけど、インターフェイスを強制する方法としては抽象クラスはあまり良くない。
C++ 的にはコンパイル時にディスパッチする多相と実行時の多相があって、
抽象クラスは実行時にディスパッチする仕組みなのでコンパイル時に確定するはずのことを実行時にするのはクソザコという風潮。
だけど「コンセプト」の機能が C++ に導入されるのが延び延びになってていまだ入ってないので、
traits とか SFINAE とかを使ったまわりくどいメタプログラミングで代用してるのが実情なんだ。
>>881
>付けなくてもいいし
うーん、デストラクタの場合はテンプレート引数をつけないとおこられちゃいます…
×https://ideone.com/x5FrwU 69行目
○https://ideone.com/FUJ3OO 69行目
よくわらからないな…
>付けなくてもいいし
うーん、デストラクタの場合はテンプレート引数をつけないとおこられちゃいます…
×https://ideone.com/x5FrwU 69行目
○https://ideone.com/FUJ3OO 69行目
よくわらからないな…
887はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 03:53:09.38ID:mEO8F9pQ0 >>886
いや、型名の方には付ける必要あるよ
×:
template <typename T> TShelf::~TShelf() { delete [] (this->t_s); }
〇:
template <typename T> TShelf<T>::~TShelf() { delete [] (this->t_s); }
△: 知らんかった
template <typename T> TShelf<T>::~TShelf<T>() { delete [] (this->t_s); }
いや、型名の方には付ける必要あるよ
×:
template <typename T> TShelf::~TShelf() { delete [] (this->t_s); }
〇:
template <typename T> TShelf<T>::~TShelf() { delete [] (this->t_s); }
△: 知らんかった
template <typename T> TShelf<T>::~TShelf<T>() { delete [] (this->t_s); }
>>884
はい、すごくよくわかります!!
std::vector とか、std::list とかstd::deque とかは、たぶんいけると思います。
http://mevius.2ch.net/test/read.cgi/tech/1434079972/14
http://mevius.2ch.net/test/read.cgi/tech/1434079972/19
なんとなくデザパタ本を読み返していて、車輪の再発明に没頭してしまいましたが、C# のデザパタ本、というのも聞かないし、もうデザパタは古いのかな…
はい、すごくよくわかります!!
std::vector とか、std::list とかstd::deque とかは、たぶんいけると思います。
http://mevius.2ch.net/test/read.cgi/tech/1434079972/14
http://mevius.2ch.net/test/read.cgi/tech/1434079972/19
なんとなくデザパタ本を読み返していて、車輪の再発明に没頭してしまいましたが、C# のデザパタ本、というのも聞かないし、もうデザパタは古いのかな…
889デフォルトの名無しさん (ワッチョイ 42b3-VAF2)
2017/11/20(月) 03:58:54.21ID:O993TKuI0 マジか
役に立つ日が来るかどうかはシランケド
役に立つ日が来るかどうかはシランケド
>>887
ありがとうございます。確認いたしました。
ありがとうございます。確認いたしました。
891デフォルトの名無しさん (ワッチョイ 42b3-VAF2)
2017/11/20(月) 03:59:26.41ID:O993TKuI0 ↑ >>887
>>885
夜遅くにコメントいただきありがとうございます。
>C++ 的にはコンパイル時にディスパッチする多相と実行時の多相があって、
理解できます。コンパイル時に確定できるのなら最大限それに努める思想はたとえば constexpr にも現れていると思いました。
>抽象クラスは実行時にディスパッチする仕組みなのでコンパイル時に確定するはずのことを実行時にするのはクソザコという風潮。
うーん、たぶん私が周回遅れなだけだと思いますが、じゃあ、ひところ、あれほどまでにもてはやされたデザインパターンは、どこにいってしまったのでしょう…もう誰もやらないのかな…
夜遅くにコメントいただきありがとうございます。
>C++ 的にはコンパイル時にディスパッチする多相と実行時の多相があって、
理解できます。コンパイル時に確定できるのなら最大限それに努める思想はたとえば constexpr にも現れていると思いました。
>抽象クラスは実行時にディスパッチする仕組みなのでコンパイル時に確定するはずのことを実行時にするのはクソザコという風潮。
うーん、たぶん私が周回遅れなだけだと思いますが、じゃあ、ひところ、あれほどまでにもてはやされたデザインパターンは、どこにいってしまったのでしょう…もう誰もやらないのかな…
893はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 04:13:43.35ID:mEO8F9pQ0 >>887
なんでこうなってるかっていうのは割と感覚的にやっちゃってるからうまいこと説明できひんのやけど。
クラステンプレートの中に関数テンプレートも書けたりするので
template<class T>
class foo {
public:
template<class U> void bar(void);
};
実装書くときはどれがどれに掛かってるかわかるようにせんといかん
template<class T> template<class U>
void foo<T>::bar(void) {
}
みたいな話なんじゃないかとコンパイラの気持ちになる仁奈ちゃんの気持ちになってた。
なんでこうなってるかっていうのは割と感覚的にやっちゃってるからうまいこと説明できひんのやけど。
クラステンプレートの中に関数テンプレートも書けたりするので
template<class T>
class foo {
public:
template<class U> void bar(void);
};
実装書くときはどれがどれに掛かってるかわかるようにせんといかん
template<class T> template<class U>
void foo<T>::bar(void) {
}
みたいな話なんじゃないかとコンパイラの気持ちになる仁奈ちゃんの気持ちになってた。
894はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 04:30:34.82ID:mEO8F9pQ0 >>892
抽象クラスを使うパターンなんてのがあるわけ? GoF 本とか読んだことないから知らんけど。
それはインターフェイスをまとめた何かを作れって話とかじゃないの?
C++ の抽象クラスを使えって話とは違ったりしそうだけど。
デザインパターンはあくまでデザインの話なんだから言語の具体的な機能はその時代に有るものでやるしかないし、
よりよい機能が提供されるようになったら使うだろ、そりゃ。
抽象クラスを使うやり方しかできないなら「デザイン」を学び取れてないってこった。
まあ今は C++ への理解も十分でないからってのもあるだろうけどさ。
ところで QZ って C++ スレの常連みたいに思ってたけど、
その割にアレなのでひょっとして共通トリップだったりするの?
抽象クラスを使うパターンなんてのがあるわけ? GoF 本とか読んだことないから知らんけど。
それはインターフェイスをまとめた何かを作れって話とかじゃないの?
C++ の抽象クラスを使えって話とは違ったりしそうだけど。
デザインパターンはあくまでデザインの話なんだから言語の具体的な機能はその時代に有るものでやるしかないし、
よりよい機能が提供されるようになったら使うだろ、そりゃ。
抽象クラスを使うやり方しかできないなら「デザイン」を学び取れてないってこった。
まあ今は C++ への理解も十分でないからってのもあるだろうけどさ。
ところで QZ って C++ スレの常連みたいに思ってたけど、
その割にアレなのでひょっとして共通トリップだったりするの?
>>894
>その割にアレなのでひょっとして共通トリップだったりするの?
単に、あれよあれよと、また、次から次へと忘れていくので、ぜんぜん進歩しないだけなのでした。
こんな感じ… https://www.youtube.com/watch?v=Hflpt1-kAl4
>その割にアレなのでひょっとして共通トリップだったりするの?
単に、あれよあれよと、また、次から次へと忘れていくので、ぜんぜん進歩しないだけなのでした。
こんな感じ… https://www.youtube.com/watch?v=Hflpt1-kAl4
896デフォルトの名無しさん (ワッチョイ 228d-zvir)
2017/11/20(月) 07:05:19.03ID:8Dez9ldp0 手元に古いGoF日本語訳(1999年初版)があったので覗いてみたら、
Iteratorのサンプル(C++)が>>880みたいに抽象クラスで実装されていてびっくりした。
抽象クラスを使わなくても、処理の共通化を考えないなら問題ないし、
共通化したい場合でも、そこだけテンプレート化すればよいような気がする。
https://ideone.com/sFzBq4
Iteratorのサンプル(C++)が>>880みたいに抽象クラスで実装されていてびっくりした。
抽象クラスを使わなくても、処理の共通化を考えないなら問題ないし、
共通化したい場合でも、そこだけテンプレート化すればよいような気がする。
https://ideone.com/sFzBq4
897デフォルトの名無しさん (ワッチョイ 4178-kX9V)
2017/11/20(月) 08:00:57.16ID:GfOPAtNP0 VC++とか今でこそまともだけど昔はテンプレート周りがうんこすぎて風呂釜洗剤教の人のやり方に頼らざるを得なかったらしいね
898デフォルトの名無しさん (ワッチョイ 826e-Eq1o)
2017/11/20(月) 09:24:05.14ID:9q5rB25R0 そういう「まとも」を求めてVCを選ぶのは情弱のすることだ
意味の違う「まとも」で定評のあるコンパイラであって
意味の違う「まとも」で定評のあるコンパイラであって
899デフォルトの名無しさん (ワッチョイ f9b3-AWKa)
2017/11/20(月) 09:46:04.69ID:Veq8ZMOx0 Vistaまではgccでコンパイルしてたらしいからな。
900デフォルトの名無しさん (アウーイモ MM05-0x9U)
2017/11/20(月) 10:17:12.94ID:5dn4op1oM 初心者なんですがusing使い方を教えて下せえ
901デフォルトの名無しさん (ワッチョイ 0234-1gB9)
2017/11/20(月) 10:36:08.17ID:Fx3rJ6pW0 usingは時代によって使える機能が異なる
昔はnamespaceから使える宣言を取り出す役割
最近は=を用いてtypedefの簡略化っぽい書き方が出来る
昔はnamespaceから使える宣言を取り出す役割
最近は=を用いてtypedefの簡略化っぽい書き方が出来る
902デフォルトの名無しさん (ワッチョイ 0234-1gB9)
2017/11/20(月) 10:42:51.51ID:Fx3rJ6pW0 将来的にはusingがプロパティの役割まで担ってくれると余計な予約後増やさなくて済む希ガス
903デフォルトの名無しさん (ワンミングク MM52-Dzd0)
2017/11/20(月) 12:17:25.71ID:OatlO4rKM904デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)
2017/11/20(月) 14:57:25.95ID:ZHV8ZCmh0 ratioのバグとかinitializer_listとかね
しっかりしているようで時おり大ボケで笑いを取る謎な会社だ
しっかりしているようで時おり大ボケで笑いを取る謎な会社だ
905デフォルトの名無しさん (ササクッテロラ Spd1-CMbJ)
2017/11/20(月) 16:59:42.71ID:CB3KD7K4p906デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)
2017/11/20(月) 17:06:25.94ID:ZHV8ZCmh0 重箱の隅じゃあんめえ
仮想デストラクタがないことと継承禁止は近いが違う
仮想デストラクタがないことと継承禁止は近いが違う
907はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 17:20:13.60ID:mEO8F9pQ0 std::vector とかを public 継承してもスライシングが起こらないように使う分には全然問題ないわけだしな。
でも人間はアホだからスライシングするし、スライシングしたときにコンパイルエラーにしてくれないから避けようっていう「習慣」なだけで、
言語機能としてはデストラクタが仮想になってないからといって継承が禁止されているってわけではないんだ。
そこらへんは確かに意味づけが違う。
でも人間はアホだからスライシングするし、スライシングしたときにコンパイルエラーにしてくれないから避けようっていう「習慣」なだけで、
言語機能としてはデストラクタが仮想になってないからといって継承が禁止されているってわけではないんだ。
そこらへんは確かに意味づけが違う。
908デフォルトの名無しさん (ワッチョイ 02cf-Gm5t)
2017/11/20(月) 17:54:47.05ID:4sV97R+K0 デザパタは基本的にGC言語向きだしな
C++とは相性が良くない
C++とは相性が良くない
909デフォルトの名無しさん (スプッッ Sd41-LOf1)
2017/11/20(月) 19:05:49.28ID:RcaXyFV8d C++の基本的なコーディングを学ぶのにオススメな書籍あるかな?
テクニック集とかもあると読んでみたいと思っている
テクニック集とかもあると読んでみたいと思っている
910デフォルトの名無しさん (ワッチョイ a17f-8CrJ)
2017/11/20(月) 19:11:23.76ID:q0WTO8Pn0 EffectiveC++シリーズ
Exceptional C++
C++ Coding Standards
あたりの定番中の定番でいいだろ
Exceptional C++
C++ Coding Standards
あたりの定番中の定番でいいだろ
911デフォルトの名無しさん (ワッチョイ 41eb-RjUU)
2017/11/20(月) 20:12:37.95ID:rJCmscgl0 ここって本職でやってる人らばっかりなんかね
日曜プログラマが気安く書き込んでもいいのだろうか
日曜プログラマが気安く書き込んでもいいのだろうか
912はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/20(月) 20:21:38.03ID:mEO8F9pQ0 >>911
いいよ。 俺も趣味プログラマだけど偉そうに書き込んでるし。
いいよ。 俺も趣味プログラマだけど偉そうに書き込んでるし。
913デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/20(月) 21:53:59.25ID:gqHMI2DN0 GoF本のうち
Stateパターンは抽象クラス必須
Abstractなんちゃら系も抽象クラス必須
な印象
Stateパターンは抽象クラス必須
Abstractなんちゃら系も抽象クラス必須
な印象
914デフォルトの名無しさん (ワッチョイ 02e7-GXP8)
2017/11/20(月) 22:05:37.00ID:vFwnmuVP0 >>911
プロがここでうんちく垂れてたら引くわな
プロがここでうんちく垂れてたら引くわな
915デフォルトの名無しさん (ワッチョイ a19f-RjUU)
2017/11/20(月) 22:07:59.95ID:H8zFncfx0 >>873
最新版で該当ケースを探せず、
わざわざ5年前の版を持ち出してきてまで俺ツエーしたいヘタレを相手にしてしまい、すいませんでしたー
gcc4.4.7(2012/3/13)の時点で対応できて無いという情報はものすごく役に立ちますー(棒)
つかマジで、賢いつもりなら最新版で該当ケース探してgccに報告しろよ。
問題に遭遇したらとりあえず最新版、というのは基本だ。
ここを問題視する奴がgcc4.4.7なんて今使ってるわけないだろ。お前は馬鹿なのか?
お前のその努力は誰の為にも役に立ってないだろ。
これは多分に政治的問題で、コンパイラ屋がごねているだけだ。
既に言ったとおり、
reinterpret_cast相当のことがなされている場合、その関数単位で -fno-strict-aliasing すればいいだけで、
これに関して技術/仕様的問題は何もない。
ただ、「ソースさえ正しければこんな問題は発生しない」とか言って、コンパイラ屋がごねてるんだよ。
だから、力関係が逆転すればいきなり全部直ってもおかしくない。
gcc7.2.0がどっちのアプローチ、
つまり、上記の通りばっさり最適化を切ってしまい、最適化ケースを積み上げる方向にしたのか、
或いは従来どおり、過度の最適化を検出し、最適化を防ぐケースを積み上げることにしたのかは、俺は知らない。
ただ、どちらのケースであっても、最新版で上手く行かないケースがあれば、それはgccにとっては有用な情報なんだよ。
それをわざわざ旧版で、しかも隠してしれっととか、意味無いしせこいわw
最新版で出現しないから焦ったか?小物感ありあり。
> まぁそんなことは無いんだけどさ。
とか言うから、お?釣りか?ならここは全力で釣られてやるさ、該当事例持って来いよ!って流れなのに、
事前に該当事例用意しておかずに釣りとかアホかテメーは。
君が最新版で完全にアウトなケースを用意してれば、ああこれは完全に俺の負けですサーセン、とお後がよろしかったのに、
gcc4.4.7であることにも触れず俺ツエーするとか、小物過ぎて泣ける。
お前もうちょっとスレの流れを考えろよ。
最新版で該当ケースを探せず、
わざわざ5年前の版を持ち出してきてまで俺ツエーしたいヘタレを相手にしてしまい、すいませんでしたー
gcc4.4.7(2012/3/13)の時点で対応できて無いという情報はものすごく役に立ちますー(棒)
つかマジで、賢いつもりなら最新版で該当ケース探してgccに報告しろよ。
問題に遭遇したらとりあえず最新版、というのは基本だ。
ここを問題視する奴がgcc4.4.7なんて今使ってるわけないだろ。お前は馬鹿なのか?
お前のその努力は誰の為にも役に立ってないだろ。
これは多分に政治的問題で、コンパイラ屋がごねているだけだ。
既に言ったとおり、
reinterpret_cast相当のことがなされている場合、その関数単位で -fno-strict-aliasing すればいいだけで、
これに関して技術/仕様的問題は何もない。
ただ、「ソースさえ正しければこんな問題は発生しない」とか言って、コンパイラ屋がごねてるんだよ。
だから、力関係が逆転すればいきなり全部直ってもおかしくない。
gcc7.2.0がどっちのアプローチ、
つまり、上記の通りばっさり最適化を切ってしまい、最適化ケースを積み上げる方向にしたのか、
或いは従来どおり、過度の最適化を検出し、最適化を防ぐケースを積み上げることにしたのかは、俺は知らない。
ただ、どちらのケースであっても、最新版で上手く行かないケースがあれば、それはgccにとっては有用な情報なんだよ。
それをわざわざ旧版で、しかも隠してしれっととか、意味無いしせこいわw
最新版で出現しないから焦ったか?小物感ありあり。
> まぁそんなことは無いんだけどさ。
とか言うから、お?釣りか?ならここは全力で釣られてやるさ、該当事例持って来いよ!って流れなのに、
事前に該当事例用意しておかずに釣りとかアホかテメーは。
君が最新版で完全にアウトなケースを用意してれば、ああこれは完全に俺の負けですサーセン、とお後がよろしかったのに、
gcc4.4.7であることにも触れず俺ツエーするとか、小物過ぎて泣ける。
お前もうちょっとスレの流れを考えろよ。
916デフォルトの名無しさん (ブーイモ MMcd-pLBf)
2017/11/20(月) 22:13:38.04ID:cvRta7BJM >>908
GoF本はc++とsmalltalkだったろ
GoF本はc++とsmalltalkだったろ
917デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/20(月) 22:48:11.84ID:gqHMI2DN0 テンキー風のボタンの並びでモードによって意味が変わる(Num Lock ON/OFFのもっと複雑化したようなやつ
というユザーインターフェースの実装はStateパターンのどくだんば
そこまでレトロなのでなくてもGUIでお絵かきツールを集めたツールボックスなUIとか作ると
Abstructなんちゃらパターンのどれかを再発明しているケースが多いと思う
というユザーインターフェースの実装はStateパターンのどくだんば
そこまでレトロなのでなくてもGUIでお絵かきツールを集めたツールボックスなUIとか作ると
Abstructなんちゃらパターンのどれかを再発明しているケースが多いと思う
918デフォルトの名無しさん (ワッチョイ 02e7-GXP8)
2017/11/20(月) 23:04:17.12ID:vFwnmuVP0 ←なぜか変換できない
919デフォルトの名無しさん (ワッチョイ 466f-MUuo)
2017/11/20(月) 23:35:39.24ID:mEO8F9pQ0 独擅場 ← どくせんじょう
920はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/21(火) 00:48:45.97ID:KkY90WH60 >>913
昨日 >>885 でまわりくどいメタプログラミングと言ってたのがそれだ。
State パターンのように特定のメンバ関数を持っていることを強制したいときには
それを判定するトレイツを作って対応する。
たとえば >>886 にあるコードを対象に考えて、
「あるクラスがそのクラス自身のポインタを返す next という名前のメンバ関数を持っているか」
を判定するトレイツはこうなる。
template<class T>
class has_next {
template<class U, class V = T>
struct helper : std::false_type {};
template<class U>
struct helper<U, typename std::enable_if<std::is_same<decltype(std::declval<U>().next()), U*>::value, T>::type> : std::true_type {};
public:
static const bool value = helper<T>::value;
};
C++ 標準の type_traits を真似してるので使い方もだいたい同じ。
static_assert(!has_next<TShelfIterator<Book>>::value, "TShelfIterator must has next() method.");
みたいに書いておけば TShelfIterator<Book> がメンバ関数 next を持っていることが保証される。
持っていなければコンパイル時にエラーになるから。
ここではひとつのメンバ関数を判定するだけのものを作ったけど、 Boost にはもっと汎用的にいい感じにかけるやつが有った気がする。
知らんけど。
昨日 >>885 でまわりくどいメタプログラミングと言ってたのがそれだ。
State パターンのように特定のメンバ関数を持っていることを強制したいときには
それを判定するトレイツを作って対応する。
たとえば >>886 にあるコードを対象に考えて、
「あるクラスがそのクラス自身のポインタを返す next という名前のメンバ関数を持っているか」
を判定するトレイツはこうなる。
template<class T>
class has_next {
template<class U, class V = T>
struct helper : std::false_type {};
template<class U>
struct helper<U, typename std::enable_if<std::is_same<decltype(std::declval<U>().next()), U*>::value, T>::type> : std::true_type {};
public:
static const bool value = helper<T>::value;
};
C++ 標準の type_traits を真似してるので使い方もだいたい同じ。
static_assert(!has_next<TShelfIterator<Book>>::value, "TShelfIterator must has next() method.");
みたいに書いておけば TShelfIterator<Book> がメンバ関数 next を持っていることが保証される。
持っていなければコンパイル時にエラーになるから。
ここではひとつのメンバ関数を判定するだけのものを作ったけど、 Boost にはもっと汎用的にいい感じにかけるやつが有った気がする。
知らんけど。
921デフォルトの名無しさん (ワッチョイ 6e81-LokX)
2017/11/21(火) 01:13:43.73ID:H+r6aFWv0 そんなくそレガシーなtraits
久々に見た…
久々に見た…
922デフォルトの名無しさん (スップ Sd82-LOf1)
2017/11/21(火) 17:31:41.16ID:6BA+Ife8d あるファイルに下のような文字が書き込まれていて
xxxx=3
これの3を取得する完璧無欠なロジックなにかないかな
xxxx=3
これの3を取得する完璧無欠なロジックなにかないかな
923デフォルトの名無しさん (ワッチョイ 4178-kX9V)
2017/11/21(火) 17:32:59.03ID:uRVBPn0b0 完璧無欠とは?
924デフォルトの名無しさん (スップ Sd82-LOf1)
2017/11/21(火) 17:36:16.46ID:6BA+Ife8d925デフォルトの名無しさん (アウアウカー Sa49-vUM9)
2017/11/21(火) 18:10:16.89ID:B2ib4/wIa 正規表現でよくない?
926デフォルトの名無しさん (ワッチョイ a104-0wpo)
2017/11/21(火) 19:05:58.85ID:DIhAB+/L0 リバースイテレータをfindしてイコールでセパレート。
って、数行から見つけるのか。
構文解析とかか?
って、数行から見つけるのか。
構文解析とかか?
927デフォルトの名無しさん (スップ Sd82-LOf1)
2017/11/21(火) 19:38:49.19ID:6BA+Ife8d928デフォルトの名無しさん (ワッチョイ a168-+5lI)
2017/11/21(火) 19:53:50.67ID:GhiisSyt0 (?<=^xxx=)\d+$
929デフォルトの名無しさん (ワッチョイ 41eb-RjUU)
2017/11/21(火) 20:30:32.65ID:0pu32Yjt0 float演算がdoubleよりも遅いってアジですか?
>>929
何が計算するかによる、としか
何が計算するかによる、としか
931デフォルトの名無しさん (ワッチョイ 41eb-RjUU)
2017/11/21(火) 21:12:53.35ID:0pu32Yjt0 さいですか
932デフォルトの名無しさん (オッペケ Srd1-0Zlk)
2017/11/21(火) 21:19:38.81ID:muR8Mwv6r933デフォルトの名無しさん (スップ Sd82-LOf1)
2017/11/21(火) 21:44:16.41ID:6BA+Ife8d934デフォルトの名無しさん (ワッチョイ a980-61Vg)
2017/11/21(火) 21:55:27.92ID:6jcLJvUW0 >>927
そういう設定ファイル的なものを読むならkeyとvalueのペアのリストつまりmapを返す実装を考えた方がいい
そういう設定ファイル的なものを読むならkeyとvalueのペアのリストつまりmapを返す実装を考えた方がいい
935デフォルトの名無しさん (スップ Sd82-LOf1)
2017/11/21(火) 22:16:59.77ID:6BA+Ife8d936はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/21(火) 22:33:26.16ID:KkY90WH60937デフォルトの名無しさん (ワッチョイ 4178-kX9V)
2017/11/21(火) 22:42:43.82ID:uRVBPn0b0 ってかboostのPropertyTreeにiniパーサーがあるからそれ使うといいよ
938デフォルトの名無しさん (スップ Sd82-LOf1)
2017/11/21(火) 22:42:58.28ID:6BA+Ife8d >>936
回答すると
数値以外もありうる
改行は値として入れない
エスケープってなんだろう?
xxxに関しては最大16文字の文字列(大文字小文字計52文字の組み合わせ)
たったこれだけでも深いね
ソフトウェアって神秘
回答すると
数値以外もありうる
改行は値として入れない
エスケープってなんだろう?
xxxに関しては最大16文字の文字列(大文字小文字計52文字の組み合わせ)
たったこれだけでも深いね
ソフトウェアって神秘
939デフォルトの名無しさん (ワッチョイ a168-+5lI)
2017/11/21(火) 23:00:05.88ID:GhiisSyt0 ini-parserてのがなかなか良さそう
picojson,rapidxmlなどが好きな人にはいいかも
picojson,rapidxmlなどが好きな人にはいいかも
940デフォルトの名無しさん (ワッチョイ 869f-GXP8)
2017/11/22(水) 02:34:39.84ID:9vladmL60 構文解析したいならbisonでも使ったらいいんじゃね?
941デフォルトの名無しさん (ワッチョイ f9b3-AWKa)
2017/11/22(水) 03:34:34.44ID:ft6g9THr0 ム板で公開されたのがあったじゃないか。
942デフォルトの名無しさん (ワッチョイ 41b3-RjUU)
2017/11/22(水) 10:29:13.01ID:wHcXBwMz0943デフォルトの名無しさん (ワッチョイ a980-61Vg)
2017/11/22(水) 10:59:36.64ID:jvBgNmmT0 >>942
どこの最近?
どこの最近?
944デフォルトの名無しさん (ワッチョイ c58a-iF25)
2017/11/22(水) 11:55:13.96ID:/unloUf+0 XMLは配列が直接表現できないし手で書くのがクソめんどくさいし見づらい
その点JSONの方がずっとマシなんだけど標準JSONだとコメント書けない
その点JSONの方がずっとマシなんだけど標準JSONだとコメント書けない
945デフォルトの名無しさん (ワッチョイ 42b3-VAF2)
2017/11/22(水) 12:48:47.95ID:PiUoYWXr0 適材適所、の一言で片付く問題
好きな方使え
好きな方使え
946デフォルトの名無しさん (ワンミングク MM52-61Vg)
2017/11/22(水) 13:52:54.31ID:gFgFfMOWM 人が書く設定ファイルならtomlがパースのしやすさと書きやすさでバランスが良いと思う
947デフォルトの名無しさん (ワッチョイ a168-+5lI)
2017/11/22(水) 16:17:23.80ID:HDCbnteD0948はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/22(水) 20:12:53.57ID:Rn9KsJdK0 Cargo の設定ファイルも TOML やぞ。 モダーンな言語のモダーンなツールは TOML がトレンド。 これ。
YAML みたいにインデントで構造を表現するのってパースめんどくさい。
個人的に YAML は不格好に見えて好きじゃないっていう主観もあるんだけど、
YAML ってそんなに定番ってほど目にしたことが無いな〜と思って考えたら
たぶん俺の巣は Scheme スレやからやな。
Lisp 界隈では設定ファイルにはS式を使ってまうもんな。
YAML みたいにインデントで構造を表現するのってパースめんどくさい。
個人的に YAML は不格好に見えて好きじゃないっていう主観もあるんだけど、
YAML ってそんなに定番ってほど目にしたことが無いな〜と思って考えたら
たぶん俺の巣は Scheme スレやからやな。
Lisp 界隈では設定ファイルにはS式を使ってまうもんな。
949デフォルトの名無しさん (ワッチョイ a168-+5lI)
2017/11/22(水) 21:00:11.47ID:h+KIZtFy0 luaなんかもよく使われるけど、schemeやluaが設定ファイルとして使われるのは
呼び出し側の言語が同じであるか、他の用途で使うためにすでに組み込んでる場合がほどんどで
設定ファイルだけの為にLL組み込むにはお手軽とは言えないかな
TOMLはいいとは思うんだけど
自分が使うなら仕様が固まってからの1.0〜は必須で
↓で300程度は使われてからかな
$ apt-file search toml | grep "\.toml$" | wc -l
0
$ apt-file search json | grep "\.json$" | wc -l
3611
$ apt-file search yaml | grep "\.yaml$" | wc -l
1480
呼び出し側の言語が同じであるか、他の用途で使うためにすでに組み込んでる場合がほどんどで
設定ファイルだけの為にLL組み込むにはお手軽とは言えないかな
TOMLはいいとは思うんだけど
自分が使うなら仕様が固まってからの1.0〜は必須で
↓で300程度は使われてからかな
$ apt-file search toml | grep "\.toml$" | wc -l
0
$ apt-file search json | grep "\.json$" | wc -l
3611
$ apt-file search yaml | grep "\.yaml$" | wc -l
1480
950デフォルトの名無しさん (ドコグロ MM41-ZIVp)
2017/11/22(水) 21:10:35.27ID:W0SJQGiTM 最近この手の話題に疎いからtomlとか知らんかったのでちょっとググったけどまあ好きなの使えや
って感想しかないわ
https://gist.github.com/miyakogi/e8631ce5f7c956db2313
って感想しかないわ
https://gist.github.com/miyakogi/e8631ce5f7c956db2313
951はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-RuWE)
2017/11/22(水) 21:16:10.07ID:Rn9KsJdK0 パースの楽さだけで言えば JSON が優勝だけど人が手書きするには色々アレだからな。
952デフォルトの名無しさん (ワッチョイ 41eb-RjUU)
2017/11/22(水) 21:20:22.39ID:3/I2dLA90 好きなの使えっつっても全部導入して試すの面倒や
953デフォルトの名無しさん (ワッチョイ 6ea5-RjUU)
2017/11/22(水) 21:56:28.30ID:+hB2MqUt0 ES5以降ケツコンマOKになったんだからJSONも新規格にすりゃいいのに。
954デフォルトの名無しさん (ワッチョイ 02bd-VFQ0)
2017/11/22(水) 23:47:16.65ID:AAzHTorM0 >>936
正規表現で済んでいるのになんでスタックが要るんじゃ!!!!!!11!1!!!!
正規表現で済んでいるのになんでスタックが要るんじゃ!!!!!!11!1!!!!
956デフォルトの名無しさん (ワッチョイ 5fbd-hcjg)
2017/11/23(木) 00:36:02.97ID:h8NdPAUM0 文脈自由文法は解析にスタック(理論上は無限の段数のやつ)が要るクラスだが
正規言語は有限状態マシンで済む言語のクラス
今話題の設定言語は無限の入れ子は持たなそうなので正規言語で逝ける、
正規言語は有限状態マシンで済む言語のクラス
今話題の設定言語は無限の入れ子は持たなそうなので正規言語で逝ける、
957デフォルトの名無しさん (ワッチョイ 5fbd-hcjg)
2017/11/23(木) 00:37:37.76ID:h8NdPAUM0 と、
言いたいのでわ…
言いたいのでわ…
958はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)
2017/11/23(木) 01:07:08.12ID:fj1LdTry0 ん〜、そのへんの学問的な分類はよう知らんけど、取りうる状態は有限でもバックトラックは起こるしそのためのスタックは要るんちゃう?
同じ文法の構文解析器を作ればどっちのアプローチでもスタックの消費量はかわらんと思うんだけど。
より制限の強い方で「十分」っつーならそれはわかる。 C++ 標準に入ってる機能で出来りゃ楽だしな。
ただ、正規表現ライブラリだとエラーの検出場所の伝達方法とかで融通が利かなかったりするので、
ユーザーが入力する設定ファイルを解析するパーサを作るとなると作りこみ難いという感触があるかな。
同じ文法の構文解析器を作ればどっちのアプローチでもスタックの消費量はかわらんと思うんだけど。
より制限の強い方で「十分」っつーならそれはわかる。 C++ 標準に入ってる機能で出来りゃ楽だしな。
ただ、正規表現ライブラリだとエラーの検出場所の伝達方法とかで融通が利かなかったりするので、
ユーザーが入力する設定ファイルを解析するパーサを作るとなると作りこみ難いという感触があるかな。
959デフォルトの名無しさん (ワッチョイ 7f56-PrD/)
2017/11/23(木) 06:39:00.31ID:NFzuGiE50 「チョムスキー階層」でググれ
960デフォルトの名無しさん (ワッチョイ 7f56-PrD/)
2017/11/23(木) 07:23:17.08ID:NFzuGiE50 >>958
>ん〜、そのへんの学問的な分類はよう知らんけど、取りうる状態は有限でもバックトラックは起こるしそのためのスタックは要るんちゃう?
非決定性有限オートマトンは決定性有限オートマトンに変換できるので、
バックトラックが一切起こらない形に書き換えることは可能。
lexなんかだと、そのような変換を行ったコードを生成していたはず。
ただし、プログラム言語などで一般的に使われる正規表現は、
ここでいう正規言語を拡張したものなので、この限りではない。
>ん〜、そのへんの学問的な分類はよう知らんけど、取りうる状態は有限でもバックトラックは起こるしそのためのスタックは要るんちゃう?
非決定性有限オートマトンは決定性有限オートマトンに変換できるので、
バックトラックが一切起こらない形に書き換えることは可能。
lexなんかだと、そのような変換を行ったコードを生成していたはず。
ただし、プログラム言語などで一般的に使われる正規表現は、
ここでいう正規言語を拡張したものなので、この限りではない。
961デフォルトの名無しさん (アークセー Sxfb-DkU3)
2017/11/23(木) 14:40:51.51ID:QeiOUUJtx C++のプロジェクトに戻りたい。
962デフォルトの名無しさん (ワッチョイ 5fb3-9Jqp)
2017/11/23(木) 18:06:46.17ID:5yPMgLrz0 どうぞどうぞ
963デフォルトの名無しさん (ワッチョイ 5fbd-hcjg)
2017/11/23(木) 18:56:01.32ID:h8NdPAUM0 もう次スレ要らないのでは
またまた低レベルな質問で恐縮しております。よろしくお願いいたします。
https://ideone.com/MXvhkC
ここまで実装できている状態で、演算子 += を定義するには、どのように書けばいいでしょうか?
なお実際に作業している対象は自作の多桁長演算ライブラリで、operator+=() を operator=() や operator+() を再利用できればうれしいな、と考えております。
operator+() や operator=() に書いていることを、繰り返して書くのは避けたいと考えているのです。
https://ideone.com/MXvhkC
ここまで実装できている状態で、演算子 += を定義するには、どのように書けばいいでしょうか?
なお実際に作業している対象は自作の多桁長演算ライブラリで、operator+=() を operator=() や operator+() を再利用できればうれしいな、と考えております。
operator+() や operator=() に書いていることを、繰り返して書くのは避けたいと考えているのです。
965デフォルトの名無しさん (ワッチョイ bfe7-5mWG)
2017/11/23(木) 19:07:30.71ID:IGgCkWwq0 普通はoperator+=()を実装してから、それを使ってoperator+を実装する
>>965
なるほど
https://ideone.com/t89oo1
しかし、+=, -= ならまだしも、 *=, /=, %= を考えると、なんだか似たようなコードを二箇所に書きそうな雰囲気がします…
なるほど
https://ideone.com/t89oo1
しかし、+=, -= ならまだしも、 *=, /=, %= を考えると、なんだか似たようなコードを二箇所に書きそうな雰囲気がします…
967デフォルトの名無しさん (ワッチョイ bfe7-5mWG)
2017/11/23(木) 19:54:00.12ID:IGgCkWwq0 だからboostにこんなのがあったりする
https://boostjp.github.io/tips/operators.html
https://boostjp.github.io/tips/operators.html
968デフォルトの名無しさん (ワッチョイ 7feb-aYIp)
2017/11/23(木) 19:56:33.11ID:5nCr5Wf60 CRTP使って自動実装
969はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)
2017/11/23(木) 20:01:00.33ID:fj1LdTry0 >>964
なんで friend がついてんの?
なんで friend がついてんの?
970デフォルトの名無しさん (ワッチョイ 47b3-ThNz)
2017/11/23(木) 20:17:56.76ID:j5z8beti0 >>967
これってなんでprivate継承なのか分からない
これってなんでprivate継承なのか分からない
971はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)
2017/11/23(木) 20:23:32.48ID:fj1LdTry0 >>970
スライシングを起こさないようにじゃないの。
デストラクタを virtual にすると要らん仮想関数テーブルが作られちゃうからな。
それでいて定義する関数は friend 関数にしてるから外側からでも見えるんだな。
スライシングを起こさないようにじゃないの。
デストラクタを virtual にすると要らん仮想関数テーブルが作られちゃうからな。
それでいて定義する関数は friend 関数にしてるから外側からでも見えるんだな。
>>969
こんな小題でもいろいろと試されるんですね…
たしかに operator+=() は、意味からいっても friend である必要はまったくないですね。
一方 operator==(), operator+() は式の表現としての対象性を保存したいので、friend をつけたいと考えています。
operator<<() に対しては friend を必ずつけないといけないようですが、その理由はよくわかっていません。
https://ideone.com/pR0EP1
こんな小題でもいろいろと試されるんですね…
たしかに operator+=() は、意味からいっても friend である必要はまったくないですね。
一方 operator==(), operator+() は式の表現としての対象性を保存したいので、friend をつけたいと考えています。
operator<<() に対しては friend を必ずつけないといけないようですが、その理由はよくわかっていません。
https://ideone.com/pR0EP1
973デフォルトの名無しさん (アウアウウー Sacb-DWFp)
2017/11/23(木) 22:59:38.32ID:vKpvx9Uha IDE使っていて思うのがtemplate関数でデフォルト引数classAを設定すれば、
template<typename T=classA>
void Test(T tmp){
tmp.func(1, 2, 3);
}
上記のtmp.のところでclassAの関数とかが出て来るようになると嬉しいとか思ったり
コンセプトとかで対応できるようになるんでしょうか?
template<typename T=classA>
void Test(T tmp){
tmp.func(1, 2, 3);
}
上記のtmp.のところでclassAの関数とかが出て来るようになると嬉しいとか思ったり
コンセプトとかで対応できるようになるんでしょうか?
974デフォルトの名無しさん (ワッチョイ 7f81-fNTp)
2017/11/23(木) 23:16:02.95ID:WYrOiD8s0 mix-inもまともに知らないやつがなぜ回答してるのか…
975デフォルトの名無しさん (ワッチョイ 0704-bLiP)
2017/11/24(金) 00:17:10.75ID:mELw8YtS0976デフォルトの名無しさん (ワッチョイ df7e-lrN+)
2017/11/24(金) 01:03:21.71ID:/7rxT1Yr0977デフォルトの名無しさん (ワッチョイ 5fbd-hcjg)
2017/11/24(金) 01:39:31.39ID:Z3szivMI0 mix-inで理解が止まっている人がなんか吼えてますな
978デフォルトの名無しさん (オッペケ Srfb-gBtc)
2017/11/24(金) 08:42:41.97ID:ZeExn92sr979デフォルトの名無しさん (ワッチョイ 7f81-fNTp)
2017/11/24(金) 09:00:16.20ID:nFkUcp0I0 >>977
boost operatorsのprivate継承がmix-in以外のなんだと思ってるんだ?
boost operatorsのprivate継承がmix-in以外のなんだと思ってるんだ?
980デフォルトの名無しさん (ワッチョイ dfeb-+V5r)
2017/11/24(金) 10:03:13.88ID:dhAYmdbT0 静的リフレクションが欲しい
981デフォルトの名無しさん (ワッチョイ 47c8-fNTp)
2017/11/24(金) 10:21:33.74ID:Un7I7rhA0 後のプリプロセッサである
982デフォルトの名無しさん (アウアウカー Sadb-ZI9b)
2017/11/24(金) 12:38:49.19ID:p8RxfMqqa C++を勉強しようとしてるんだが
基本的にCの書き方が一般なのか
C++の書き方が一般なのか教えてもらいたい
基本的にCの書き方が一般なのか
C++の書き方が一般なのか教えてもらいたい
983デフォルトの名無しさん (ワッチョイ 0778-4Z1+)
2017/11/24(金) 12:51:25.91ID:l1+FhW7v0 コーディングスタイル?
そんなの好きにすればいいよ
そんなの好きにすればいいよ
984デフォルトの名無しさん (ワッチョイ 678a-nf8U)
2017/11/24(金) 13:21:28.52ID:w0OmJEj50986はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)
2017/11/24(金) 14:07:55.96ID:lG8HVUMw0 >>985
operator+= の返却値は参照にしといた方が辻褄が合うので良いよ
operator+= の返却値は参照にしといた方が辻褄が合うので良いよ
987デフォルトの名無しさん (スプッッ Sdbb-T4vC)
2017/11/24(金) 14:10:30.10ID:/RqU0h4Pd 関数内で作ったベクターやマップは関数を抜けたらメモリ解放されると考えてよかです?
989デフォルトの名無しさん (スプッッ Sdbb-T4vC)
2017/11/24(金) 14:25:57.62ID:/RqU0h4Pd >>988
記憶クラスによるとは
スマホで打ってるから書式とかガタガタだけど下みたいなことしてる
createmapってのを抜けたときにvectorもmapも解放されると信じている
vector XX( *map)
{
要素数二個のstring型のvectorデータを作成
return vector<string> ←要素数2
}
createmap ()
{
map<string,string> y
{
vector<string> tmp = XX(&y)
y.insert( tmp[1] , tmp[2])
}
}
記憶クラスによるとは
スマホで打ってるから書式とかガタガタだけど下みたいなことしてる
createmapってのを抜けたときにvectorもmapも解放されると信じている
vector XX( *map)
{
要素数二個のstring型のvectorデータを作成
return vector<string> ←要素数2
}
createmap ()
{
map<string,string> y
{
vector<string> tmp = XX(&y)
y.insert( tmp[1] , tmp[2])
}
}
990デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)
2017/11/24(金) 14:36:50.33ID:9/UAKu4i0 うん、信じていい
XXから抜けるときにムーブコンストラクタでtmpへ移動され
createmapから抜けるときに解放される
このときoperator deleteが呼び出されるが
operator deleteがどのようなタイミングで解放しているかには依存すべきでない
我々が関心を持つべきはoperator deleteが呼び出されるタイミングで実装の詳細ではない
XXから抜けるときにムーブコンストラクタでtmpへ移動され
createmapから抜けるときに解放される
このときoperator deleteが呼び出されるが
operator deleteがどのようなタイミングで解放しているかには依存すべきでない
我々が関心を持つべきはoperator deleteが呼び出されるタイミングで実装の詳細ではない
991はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)
2017/11/24(金) 15:15:03.03ID:lG8HVUMw0992デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)
2017/11/24(金) 15:33:02.71ID:9/UAKu4i0993はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)
2017/11/24(金) 16:06:58.81ID:lG8HVUMw0 >>992
そう。 RVO 必須だからコピーコンストラクタもムーブコンストラクタも無いクラスでも OK っていう新しいルール。
https://wandbox.org/permlink/X6g7JSpkSl82VvtZ
そう。 RVO 必須だからコピーコンストラクタもムーブコンストラクタも無いクラスでも OK っていう新しいルール。
https://wandbox.org/permlink/X6g7JSpkSl82VvtZ
994デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)
2017/11/24(金) 16:44:55.52ID:9/UAKu4i0 >>993
OK? それは03でも同じことやん
OK? それは03でも同じことやん
995はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)
2017/11/24(金) 16:48:44.24ID:lG8HVUMw0996デフォルトの名無しさん (ワッチョイ 5fcf-H1rY)
2017/11/24(金) 16:54:03.03ID:WoNXR2ax0 C++相談室 part133
http://mevius.5ch.net/test/read.cgi/tech/1511509970/
http://mevius.5ch.net/test/read.cgi/tech/1511509970/
997デフォルトの名無しさん (ワッチョイ 07eb-5mWG)
2017/11/24(金) 16:58:12.64ID:jkTO/gHT0 乙。
998デフォルトの名無しさん (ワッチョイ 07b3-5mWG)
2017/11/24(金) 17:04:12.57ID:BCw6/Ft50 彼。
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 45日 16時間 56分 20秒
新しいスレッドを立ててください。
life time: 45日 16時間 56分 20秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… ★4 [BFU★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★5 [Hitzeschleier★]
- 「これいいじゃん!!!」 セブン-イレブンの1620円で買える“1人用クリスマスケーキ”🎂に注目殺到「天才すぎる」 [パンナ・コッタ★]
- 高市早苗首相が天理教系企業に“巨額発注” 総額5000万円 本人は「政治団体の活動に必要な支出」と回答 ★2 [Hitzeschleier★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 【速報】テレビ朝日本社から20代〜30代の男性が飛び降り自殺して死亡 東京・六本木 [597533159]
- 【高市速報】中国、最後通牒 [308389511]
- お前らダウナー系だよな
- 現役JKのお茶会スレ( ¨̮ )︎︎𖠚ᐝ182
- 【朗報】カニ漁バイト募集!急げ! [834922174]
- 精液がゼリー状で黄ばんでるせいで女と付き合う勇気ない
