トップページ⇒tech
1002コメント338KB

C++相談室 part128 [無断転載禁止]©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2016/11/27(日) 00:03:49.04ID:Hj6igpz/
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

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

前スレ:
C++相談室 part127 http://echo.2ch.net/test/read.cgi/tech/1474636291/

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

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

■ shared_ptr で 標準ライブラリのFILE構造体ポインタをラップしよう
class FILE_Ptr : public shared_ptr<FILE> {
 struct FILEDeleleter {
  void operator() (FILE* fp) const { if (fp != NULL) { fclose(fp); }}
 };
public:
 FILE_Ptr(FILE* fp = NULL) : shared_ptr<FILE>(fp, FILEDeleleter()) {}
 operator FILE* () { return get(); }
 template<typename T> bool operator == (const T& obj) const { return get() == reinterpret_cast<FILE*>(obj); }
 template<typename T> bool operator != (const T& obj) const { return get() != reinterpret_cast<FILE*>(obj); }
};
0002デフォルトの名無しさん2016/11/27(日) 00:28:48.17ID:1WWISKCd
2
0003デフォルトの名無しさん2016/11/27(日) 00:53:39.36ID:oNxTNf5q
前スレでSTLなんて使わない信用できないみたいな恐ろしいこと言ってるアホがいたが、そういう人って生配列、生ポ、for、whileで暮らしてるのかな
正気の沙汰ではない
0004デフォルトの名無しさん2016/11/27(日) 00:59:26.69ID:wer2Kop4
C++の規格書に書かれているということはC++の一部なのであってそれを避けるというのはC++の機能の半分を使わないでいるということだ
0005デフォルトの名無しさん2016/11/27(日) 00:59:39.65ID:wlJLbi6+
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

---- テンプレ ここまで ----
0006デフォルトの名無しさん2016/11/27(日) 01:08:13.74ID:42UX/YwI
STLが時代遅れとかほざいてたな
モロにスタンダードで常に進化を続けているというのにな
0007デフォルトの名無しさん2016/11/27(日) 01:18:02.64ID:0maVDSwR
>>3, >>6
自社でSTLやboostより素晴らしいのを作っているじゃないか
日本企業のIT技術力は圧倒的世界一で、3流の外国製のライブラリ等は使用に耐えないって企業が多いから
そうなるんだろ
0008デフォルトの名無しさん2016/11/27(日) 01:19:33.70ID:MAcCGYLn
STLは使ったことがないな
標準ライブラリのstd::vectorはよく使う
0009デフォルトの名無しさん2016/11/27(日) 01:43:32.38ID:wer2Kop4
そうだな
0010デフォルトの名無しさん2016/11/27(日) 02:11:39.36ID:4hBpEO9s
実際問題、コンテナクラスに汎用的な性能を求めることが間違ってる。
本当に速度が欲しい場合には選ばん。
0011デフォルトの名無しさん2016/11/27(日) 02:16:56.70ID:0maVDSwR
>>10
本当に速度が欲しい場合はコンテナを自作しているんだろな
0012デフォルトの名無しさん2016/11/27(日) 02:47:34.77ID:wer2Kop4
という奴が実際にvectorに対して明確に優位性のあるコンテナを作れたところを見たことがない
どうせそういった研究に取り組んだこともなく口だけなんだろうな
0013デフォルトの名無しさん2016/11/27(日) 03:11:56.31ID:Hj6igpz/
STLはこれ以上速くなりようがないくらいに簡素な作りだと思いこんでいる私には、STLを上回る速度のコンテナ書く自信は全くないな。
私は圧倒的にスキルが不足しているから、要素をコピースワップするコストはついついshared_ptr使って対処してしまう。コンテナを自作できない無能な自分が嫌になるよ。
0014デフォルトの名無しさん2016/11/27(日) 03:21:22.71ID:411Nbo29
使い方次第じゃないかなぁ
極端な話、vectorで毎回先頭に挿入するような使い方してたら遅くなるよね
どういうのか把握して適切なコンテナ選べるならわざわざ自作する必要はないかと
0015デフォルトの名無しさん2016/11/27(日) 03:30:23.93ID:Hj6igpz/
私の場合、ついつい std::vector<T> ではなく、std::vector<shared_ptr<T>> を使って済ませてしまうので、いつまでたってもコンテナを自作するスキルが上がらないよ。
「ぼくのかんがえたさいきょうのこんてな」を自作する精神力がまだまだ足りないようだ。反省。
0016デフォルトの名無しさん2016/11/27(日) 03:33:36.54ID:wer2Kop4
C++はコンテナの種類だけなら無駄に多いからな
0017デフォルトの名無しさん2016/11/27(日) 06:48:20.63ID:pUctI5IC
dequeとvectorは片方あればいいとかか
0018デフォルトの名無しさん2016/11/27(日) 09:24:27.84ID:SqUFXM7z
>>11
vectorはただのガワなんだから、速度が必要ならallocatorだけ自作すりゃいいだろ
0019デフォルトの名無しさん2016/11/27(日) 09:29:56.70ID:WW/pNH6a
連続性が保証できないから。
0020デフォルトの名無しさん2016/11/27(日) 09:53:11.77ID:Hj6igpz/
任天堂の倒し方知ってる系の人なら、当然のようにSTLを否定するだろう。
私は任天堂の倒し方知らないので、こういう人たちを心の底から尊敬する。
0021デフォルトの名無しさん2016/11/27(日) 10:42:14.10ID:P/uIEXU4
>>20
なぜそこまでSTLを否定したいのかよこ分からないなあ。
多くのケースで多くの人が使うのに必要十分な程度の機能、性能は持ってる訳だし、標準ライブラリとしては妥当な仕様かと思う。
これで不足な場合だけ自作のコンテナなりを考えればいいだけでしょ。
0022デフォルトの名無しさん2016/11/27(日) 10:58:23.07ID:Uyh6ikI3
>>8
何をいってるのか、意味不
0023デフォルトの名無しさん2016/11/27(日) 11:06:06.35ID:l9GcbBcF
いつものあれだろ?
「標準仕様書中の表現として、STLあるいはstandard template libraryなどという言葉は一回も使用されていない」
って言う。

厳格にこの言いつけを守ってる人がいるんだよ…
0024デフォルトの名無しさん2016/11/27(日) 11:26:05.74ID:Hj6igpz/
「STLのコンテナでは力不足」と言い切る優れたプログラマになりたいのだが、私はちっともそのレベルに到達できない。orz
0025デフォルトの名無しさん2016/11/27(日) 11:37:32.43ID:zdOfPVrj
婆ちゃんがイオンのことを今でもジャスコというのを聞くとちょっとイラッとする
STLという単語をみると同じような気持ちになるが
老人に新しいことを覚えさせるのが難しいと知っている俺は
そしらぬ顔で静観することにしている
0026デフォルトの名無しさん2016/11/27(日) 11:39:37.56ID:wer2Kop4
>>19
また古代からタイムスリップしてきた人ですか?
0027デフォルトの名無しさん2016/11/27(日) 11:44:52.34ID:qE9zLQzg
>>24
それ、優れたプログラマじゃない可能性がたっぷりある。
0028デフォルトの名無しさん2016/11/27(日) 11:48:02.44ID:MAcCGYLn
標準ライブラリは速くなる余地が無いわけではないな。
テンプレート特殊化を書いてやらないと解決出来ないときもある。
Visual C++の標準ライブラリが最近見直したら一部の処理が何十倍も速くなったと言っているくらいだ
0029デフォルトの名無しさん2016/11/27(日) 11:56:08.91ID:wer2Kop4
そりゃ実装依存のところは多い
規格書に事細かに記されているわけではない
しかしそれはコンテナのような昔からあって仕様がシンプルなクラスのことでは無いだろう
0030デフォルトの名無しさん2016/11/27(日) 12:10:55.75ID:Hj6igpz/
以下の文書によると、basic_string のパフォーマンスが改善され、std::vectorをオーバーホールとか。
マイクロソフトの連中は、このスレでSTLを否定する優秀な人のような英断ができず、いまだにSTLの保守をやってる。
このスレでSTLを否定する優秀な人を一本釣りしてマイクロソフトにスカウトすればいいのに、マイクロソフトは見る目がないな。

What's New for Visual C++ in Visual Studio 2017 RC
https://docs.microsoft.com/en-us/cpp/top/what-s-new-for-visual-cpp-in-visual-studio
0031デフォルトの名無しさん2016/11/27(日) 12:12:18.35ID:MAcCGYLn
>>29
>規格書に事細かに記されているわけではない

突然関係ないことを言い出してどうした?
コンテナー自作する必要が有ったと主張する人に対してその必要性が全く理解できないという人がいたので
可能性はを示唆しただけだが。
0032デフォルトの名無しさん2016/11/27(日) 12:14:02.11ID:LAFeCFqG
algorithm系は使うもの使わないものがはっきりわかれない?
0033デフォルトの名無しさん2016/11/27(日) 12:17:16.89ID:Hj6igpz/
このスレは何人も天才プログラマが書き込んでるんだな。
STLで十分と思ってしまうレベルの低い私は、己の無能さで嫌悪感に陥りそうだ。
0034デフォルトの名無しさん2016/11/27(日) 12:17:28.71ID:wer2Kop4
>>30
C++のベンダーをやっている以上保守は義務だろ
MS独自のMFCはあまりにもゴミだが
CMapを使おうと思ったらあまりにも低機能すぎてキーボード破壊しそうになった
0035デフォルトの名無しさん2016/11/27(日) 12:28:42.78ID:plVb52Pg
>>32
adjacent_differenceの悪口はよせ
0036デフォルトの名無しさん2016/11/27(日) 12:41:27.00ID:Hj6igpz/
怠惰で無能な私は、bool で存在有無だけを返すストイックな binary_search() を使いこなせない。
ついつい、upper_bound()やlower_bound() を使ってしまう。
STLで事足りると思ってしまう自己暗示からどうしても抜け出せない。
このスレの天才プログラマーのようにSTLを捨てて「ぼくのかんがえたさいきょうのこんてな」に行くべきなのだが。
0037デフォルトの名無しさん2016/11/27(日) 13:18:21.08ID:+eKpaGRF
STLはあくまで汎用的で問題が起こりにくい作りになっているから
プログラムの用途に合った特殊なコンテナってことなら
自作する意味はあるかもしれない
例えば要素を削除するときに前詰めしないコンテナ、とか
そのコンテナには、どこが「空き」になっているか、別途把握できるしくみが
必要だけど、それはそういう風に実装すればよいだけだし
要は、連続的なメモリに確保されるけど、歯抜けになることが許されるコンテナ
ただしそんなに速くならないだろうね
0038デフォルトの名無しさん2016/11/27(日) 13:55:49.85ID:eIL19TgX
>>1は無能
自分で書いておきながらワッチョイ付けられないわ
ウンコード貼り付けるわ
0039デフォルトの名無しさん2016/11/27(日) 14:11:24.54ID:LAFeCFqG
>>36
むしろequal_rangeしか使わない
0040デフォルトの名無しさん2016/11/27(日) 14:12:23.15ID:Hj6igpz/
>>38
全くその通り。無能。恥を知れって感じ。
0041デフォルトの名無しさん2016/11/27(日) 14:50:05.59ID:w634zOe4
今時STLはないだろ
0042デフォルトの名無しさん2016/11/27(日) 15:08:20.29ID:P/uIEXU4
>>33
STLで十分と思うことは、別にレベルが低いとはならない。
STLで十分と思うことがレベルが低いというのは、レベルが低いと思う。

自分を卑下する書き込みをしつつ、高尚なこと考えている俺カッケーと酔いしれてないか?
0043デフォルトの名無しさん2016/11/27(日) 15:26:29.03ID:BLqqs723
それは己ちゃうんかいw
0044デフォルトの名無しさん2016/11/27(日) 15:55:56.37ID:3Qbc/l9n
>>42
ド素人の背伸びなんだからほっといてやれよw
下手につつくと居付いちゃうぞ
0045デフォルトの名無しさん2016/11/27(日) 15:56:46.93ID:SqUFXM7z
>>37
それってlistじゃないの?
0046デフォルトの名無しさん2016/11/27(日) 15:57:37.51ID:SqUFXM7z
>>45
失礼連続前提ね
0047デフォルトの名無しさん2016/11/27(日) 16:32:55.67ID:42UX/YwI
理解出来ないと時代遅れと言って反応を見ているんだろうが端から見ていて痛々しい限りだ
0048デフォルトの名無しさん2016/11/27(日) 16:49:01.91ID:2ZVZJ+KM
STLが理解できない?
お前さんだけじゃねw+
0049デフォルトの名無しさん2016/11/27(日) 17:08:21.71ID:LAFeCFqG
コンテナ、イテレータ、アルゴリズムの組合せ、という根っこにある考え方でまあ上手く行ってたんだけど、
今となってはちょっと古びた感じはするね。
<algorithm>のごちゃついた様を見るとそういうふうに思う。
0050デフォルトの名無しさん2016/11/27(日) 18:02:33.78ID:Hj6igpz/
>>42 のような面白い返答があったのでそろそろ真意を正直に書くと、
コンテナ自作派に憧れるていを取りつつコンテナ自作派をバカにしてただけだ。

「任天堂の倒し方知ってる」とか「ぼくのかんがえたさいきょうのこんてな」とか例えてる時点で
コンテナ自作派をバカにしてると君らに察してもらえるだろうと思ってたのだが、
本当にコンテナ自作派に憧れているとストレートに解釈した人が出てきて楽しかったわ。

>>37
「空き」の定義は開発者が決めなければならない。
コンテナに突っ込むクラスに「空き」フラグを扱うメンバ変数を追加すればSTLコンテナ利用で解決することを
わざわざ車輪の再発明でコンテナまで自作する人をおだててバカにするのは実に楽しい。
0051デフォルトの名無しさん2016/11/27(日) 18:11:22.15ID:MAcCGYLn
>コンテナ自作派をバカにしてると君らに察してもらえるだろうと思ってた

これは思った。気付かない奴はアスペ
0052デフォルトの名無しさん2016/11/27(日) 19:37:37.43ID:YEwu7XTV
俺も諄いなーと思いつつ黙って見てたけど、ストーレートに解釈してるやつが居るのみてビックリしたのと同時に、こんなに純真な心で2chやってて大丈夫なのかと心配になったわ。
あと、だからこのスレよく荒れてるんだなぁと納得した。
0053デフォルトの名無しさん2016/11/27(日) 19:49:28.80ID:4JtqQJ1X
ゲームとかなら、汎用性よりスピード命や小メモリとかで俺会社のSTLを作ってそうなきがするが
ゲーム制作会社とかではしているところはないのかな

>>1 はなんでshared_ptrのFILE deleterを張っているんだ
C++ならFILEじゃなくfstreamだろって気がするが
0054デフォルトの名無しさん2016/11/27(日) 20:14:35.31ID:Hj6igpz/
>>53
あまりにも ID:Hj6igpz/ が無能すぎて fstream を使いこなせないからだよ。みなまで言わせんな恥ずかしい。
アホな ID:Hj6igpz/ は>>1 のラッパークラス FILE_Ptr を使って以下のように稚拙なコードを書く傾向がある。
こんなことやってるからいつまでたっても ostream系を使いこなすスキルが育たない。ID:Hj6igpz/ は C++プログラマに向いてないよ。

 {
  FILE_Ptr fp = fopen("foo.log", "w");
  if (fp != NULL) {
   fprintf(fp, "1hello world\n");
   fputs("2howdy world\n", fp);
   fwrite("3hello world\n", 13, 1, fp);
  }
 }
0055デフォルトの名無しさん2016/11/27(日) 20:42:29.48ID:pUctI5IC
fstreamはfstreamで20余年の付き合いを経てもいまだにイミフなとこあるし
0056デフォルトの名無しさん2016/11/27(日) 20:47:34.07ID:P/uIEXU4
>>50
お前さんの真意とやらはどうでもいいから、面倒くさいことせずに、初めからもっと直接的に意味のある議論をしてほしい。
ここまでの流れで唯一ためになったのは、>>52のレスにあった「諄い」という漢字を知ったということだけだ。
0057デフォルトの名無しさん2016/11/27(日) 20:49:47.24ID:P/uIEXU4
>>53
ゲーム会社のことはよく知らないけど、そういうのはアロケータの自作でもしてるのかな。
0058デフォルトの名無しさん2016/11/27(日) 21:04:15.44ID:zEm283RN
ゲームエンジン・アーキテクチャによると
コンテナを自作するのは普通らしい
0059デフォルトの名無しさん2016/11/27(日) 21:13:33.19ID:kJvliJ+f
>>54
それ以前に、FILE"Deleleter"ってわざとしているのか
それともdeleteのスペル知らないのか
deleteはC++のキーワードだよな
operator FILE* () はcons抜けだし
0060デフォルトの名無しさん2016/11/27(日) 21:46:20.25ID:Hj6igpz/
>>59
何しろ無能だからこんなもんだろう。生温かく見守ってやれ。
0061デフォルトの名無しさん2016/11/27(日) 21:54:20.66ID:IYfuOepr
>>53
有名なのだとEASTLでオープンソース化されてる

ttp://i-saint.hatenablog.com/entry/20101012/1286822888

ttps://github.com/electronicarts/EASTL
0062デフォルトの名無しさん2016/11/27(日) 21:59:03.95ID:WW/pNH6a
ベンチ取ってみたらどうか。
僕の古典的PCしかもノートでも驚くほど速い。
意外と問題にならない程度の速度を持っているのではないか。
0063デフォルトの名無しさん2016/11/27(日) 22:00:05.48ID:Hj6igpz/
>>59
勉強する良い機会になった。ありがとう。
https://ja.wikipedia.org/wiki/Cons
0064デフォルトの名無しさん2016/11/28(月) 00:27:42.27ID:nFYh94sG
type erasureのためだけにshared_ptrを持ち出さなければならないクソ言語
0065デフォルトの名無しさん2016/11/28(月) 13:41:28.68ID:VFe8unWC
SSEのイントリンシック使うとき16バイト境界にアライン必須なんで
stlに入れるとき用にアロケータだけ自作したことはあるな(コンテナの型自体変わってしまうので不便だけど
EASTLは知らんかった、家帰ったら使ってみよう
0066デフォルトの名無しさん2016/11/28(月) 17:31:28.84ID:w/GpYaDf
>>61
docディレクトリの文書でEAの中の人がSTLについて熱く語っているのが好感を持てた。
0067デフォルトの名無しさん2016/11/28(月) 21:08:56.39ID:w/GpYaDf
EASTL にベンチマークプログラム があったのでWindows10(x86)の Visual Studio 2017 RC でビルド&実行してみた。
以下は、そのベンチマークプログラム EASTLBenchmarks.exeの標準出力結果

****************************************************************************************
EASTL Benchmark test results
****************************************************************************************

EASTL version: 3.04.00
Platform: Windows on X86
Compiler: Microsoft Visual C++ compiler, version 1910
Allocator: PPMalloc::GeneralAllocator. Thread safety enabled.
Build: Full optimization. Inlining enabled.

Values are ticks and time to complete tests; smaller values are better.

Test VC++ Dinkumware EASTL Ratio Difference?
---------------------------------------------------------------------------------------------------------------------
algorithm/adj_find/vector<TestObject> | 699814 699.8 us | 913513 913.5 us | 0.77 -
algorithm/copy/vector<LargePOD> | 270367 270.4 us | 269001 269.0 us | 1.01
algorithm/copy/vector<uint32_t> | 8193 8.2 us | 5462 5.5 us | 1.50 +
algorithm/copy_backward/vector<LargePOD> | 280267 280.3 us | 274463 274.5 us | 1.02
algorithm/copy_backward/vector<uint32_t> | 3072 3.1 us | 3414 3.4 us | 0.90
algorithm/count/vector<uint64_t> | 270367 270.4 us | 266271 266.3 us | 1.02
algorithm/equal_range/vector<uint64_t> | 10268141 10.3 ms | 22004184 22.0 ms | 0.47 -
0068デフォルトの名無しさん2016/11/28(月) 21:12:50.29ID:w/GpYaDf
>>67 の続き。途中省略で末尾だけ記載する。

vector<AutoRefCount>/erase | 2132212 2.1 ms | 2128798 2.1 ms | 1.00

vector<MovableType>/erase | 124073512 124.1 ms | 121713608 121.7 ms | 1.02
vector<MovableType>/reallocate | 2317236 2.3 ms | 2053355 2.1 ms | 1.13

vector<uint64>/erase | 11193260 11.2 ms | 11209646 11.2 ms | 1.00
vector<uint64>/insert | 9193159 9.2 ms | 9221835 9.2 ms | 1.00
vector<uint64>/iteration | 68957 69.0 us | 68957 69.0 us | 1.00
vector<uint64>/operator[] | 106166 106.2 us | 86368 86.4 us | 1.23
vector<uint64>/push_back | 2452078 2.5 ms | 1394507 1.4 ms | 1.76 +
vector<uint64>/sort | 8286133 8.3 ms | 7735840 7.7 ms | 1.07

sum | 871753892 871.8 ms | 768601049 768.6 ms | 1.13

****************************************************************************************

Time to complete all tests: 3.66 s.
RETURNCODE=0
0069デフォルトの名無しさん2016/11/28(月) 21:22:19.20ID:w/GpYaDf
>>68の続き。
188個あったテスト項目のうち、71個がEASTL有利、10個がSTL有利、107個が互角という結果になった。
以下に、参考までにEASTL有利だった項目を良い成績順にベスト10を記す。

algorithm/find_end/string/end | 600816 600.8 us | 25945 25.9 us | 23.16 +
deque<ValuePair>/push_back | 5864095 5.9 ms | 880058 880.1 us | 6.66 +
deque<ValuePair>/push_front | 6016006 6.0 ms | 1031627 1.0 ms | 5.83 +
deque<ValuePair>/operator[] | 4007712 4.0 ms | 693327 693.3 us | 5.78 +
hash_map<uint32_t, TestObject>/count | 264563 264.6 us | 56326 56.3 us | 4.70 +
deque<ValuePair>/find | 1577482 1.6 ms | 381996 382.0 us | 4.13 +
algorithm/find_end/string/middle | 579650 579.6 us | 148497 148.5 us | 3.90 +
string<char8_t>/operator[] | 133476 133.5 us | 34820 34.8 us | 3.83 +
string<char16_t>/operator[] | 133477 133.5 us | 35844 35.8 us | 3.72 +
algorithm/lex_cmp/schar[] | 137914 137.9 us | 39941 39.9 us | 3.45 +
0070デフォルトの名無しさん2016/11/28(月) 21:47:38.32ID:w/GpYaDf
>>69の続き。上述のランキングをさらに11位から25位まで追記しておく。

algorithm/search/string<char> | 934678 934.7 us | 285728 285.7 us | 3.27 +
algorithm/rotate/vector<TestObject large> | 161470 161.5 us | 58716 58.7 us | 2.75 +
hash_map<uint32_t, TestObject>/operator[] | 343762 343.8 us | 129722 129.7 us | 2.65 +
hash_map<uint32_t, TestObject>/find | 177172 177.2 us | 67250 67.3 us | 2.63 +
map<TestObject, uint32_t>/clear | 90805 90.8 us | 35162 35.2 us | 2.58 +
string<char16_t>/swap | 78515 78.5 us | 30723 30.7 us | 2.56 +
bitset<1500>/count | 14115750 14.1 ms | 6574833 6.6 ms | 2.15 +
hash_map<string, uint32_t>/count | 946967 947.0 us | 443784 443.8 us | 2.13 +
deque<ValuePair>/insert | 28192924 28.2 ms | 13517665 13.5 ms | 2.09 +
bitset<75>/count | 1468243 1.5 ms | 700838 700.8 us | 2.09 +
string<char16_t>/insert/pos,p | 1060986 1.1 ms | 513424 513.4 us | 2.07 +
hash_map<string, uint32_t>/find_as/char* | 947992 948.0 us | 461194 461.2 us | 2.06 +
string<char16_t>/find/p,pos,n | 66859496 66.9 ms | 33442208 33.4 ms | 2.00 +
bitset<75>/flip | 400772 400.8 us | 200727 200.7 us | 2.00 +
set<uint32_t>/count | 1733147 1.7 ms | 870841 870.8 us | 1.99 +
0071デフォルトの名無しさん2016/11/28(月) 22:16:01.54ID:aUTLhSnb
キモッ
0072デフォルトの名無しさん2016/11/28(月) 22:29:08.06ID:nxkexmqL
EASTLにコンテナの範囲外アクセスチェックとかのデバッグ機能ってある?
自分でもやってみるけど知ってる人いたら教えて欲しい
0073デフォルトの名無しさん2016/11/29(火) 03:57:58.52ID:JKfAWAo3
C++派八策

1.C++で書けばパフォーマンスが良くなる。なぜならパフォーマンスが良くなるまでC++書くからだ。
これを頭に叩き込め。

2.常にC++で書いておればそのうち他の要因でパフォーマンスが良くなるときが来る。
そのときに思い切りC++の手柄を主張しろ。

3.いいことはC++の手柄、悪いことは他の要因のせいにしろ。

4.データは都合のいいところだけ使え。グラフは切貼りしろ。

5.タイムラグを上手く使え。

6.「これがC++だ」と明言するな。定義を問われたら「C++の本を読め」と言っておけ。

7.批判されたら「お前はC++を理解してない」と言え。

8.いざとなったら定義を変えろ。オブジェクト指向に固執するな。
0074デフォルトの名無しさん2016/11/29(火) 06:49:46.04ID:nF3eDud1
boost spiritって
LL(∞)パーサー生成すんの?
PEGパーサー生成するの?
LL法とPEG法wikipedia両方の実装例にこの名前のってあるんだけど
それとも両方とも実装してるの?
0075デフォルトの名無しさん2016/11/29(火) 10:54:07.14ID:FnERKnae
菅官房長官「ちょっと何言ってるかわかんない」
0076デフォルトの名無しさん2016/11/29(火) 13:08:19.85ID:nF3eDud1
4行目の「法」と「w」の間に格助詞の「の」が入る予定でした
0077デフォルトの名無しさん2016/11/29(火) 13:44:34.04ID:CM7LOPnj
プログラム的にいうと
LLは実装で使うアルゴリズムのひとつ
PEGは仕様を定義する表現(言語)のひとつ
で対立・排他関係にあるわけではない

boost.spiritはPEG形式で与えられたルールから構文解析器を作成するライブラリ
(作成された解析器はLL法で入力を解析する)
0078デフォルトの名無しさん2016/11/29(火) 18:41:17.09ID:nF3eDud1
>>77
ど素人の私にわざわざ回答をくださってありがとうございます。
これからも勉強に励みます
0079デフォルトの名無しさん2016/11/29(火) 18:46:41.16ID:GF2v+9TM
boost spiritってEBNFじゃなくてPEGだったんだな
使わんからどうでもいいが
0080デフォルトの名無しさん2016/11/29(火) 20:31:51.74ID:baTvYruL
いま趣味で囲碁ソフト作ってるんだけど
Cなんすよ。
いろいろ面倒なんでC++で
作りなおそうかと思案中です。

作成の労力は何割ぐらい
軽減するでしょうか?
0081デフォルトの名無しさん2016/11/29(火) 20:47:31.45ID:DmRk6e1B
増す
0082デフォルトの名無しさん2016/11/29(火) 20:55:01.08ID:1SK7brxW
その質問に答えられる人は誰一人としていないが
少なくともCより面倒になることは(熟練したC++プログラマなら)ありえないから
チャレンジしてみる価値はある
ただし、()の中が重要で、熟練したプログラマなら、という話
君がすごく筋がよいならC++はきっと役に立つはず
一方で筋が悪いというのはC++においては余計なことをやろうとすること
余計なことさえしなければ、Cより面倒になることはあり得ないし
逆に心に邪念があれば、Cとは別の意味で面倒な樹海に迷い込む
C++は書く人の心の中を映す鏡
0083デフォルトの名無しさん2016/11/29(火) 21:09:35.06ID:glNciwx+
Haxe(ヘックス)はOSSで、JSに型チェックを付けたような言語で(altJS)、
JS(ES5), Flash, PHP, C++, Java, C#, Python に書き出せる。
Windows8.1対応。IDEは、FlashDevelop

このサイトで、ブラウザでプログラミングして、実行できる
Try Haxe !
try.haxe.org/

Haxeプログラミング入門、尾野政樹、2015
0084デフォルトの名無しさん2016/11/29(火) 21:16:52.64ID:bPmZgvzu
>>83
このコピペ時々見るけどヘイトHaxeの効果抜群だな
0085デフォルトの名無しさん2016/11/29(火) 21:19:45.31ID:X8I97SOu
>>80
レートどんくらい?
いちおープラスなんか?
0086デフォルトの名無しさん2016/11/29(火) 21:24:49.77ID:Ofu9bBqm
>>84
せやな。Mindに手を出すわ
0087デフォルトの名無しさん2016/11/29(火) 21:42:26.41ID:8ZPVrbbC
>>80
お前の能力によるとしか言えないんじゃないのか
ソースコードの量が多いと今のCをC++へ作り直す工程はかなりの労力だろな
0088デフォルトの名無しさん2016/11/29(火) 21:44:01.60ID:ua9E/pwR
いや、>>80は絶対にC++で書き直すべきだ!!
0089デフォルトの名無しさん2016/11/30(水) 06:56:30.70ID:UPCsGfLr
C++を「Cにvectorとかstringなんかの便利な型を追加した言語」と
割り切って使うなら手間は増えないんじゃないかな。

でも実際にC++で書き始めると、C++らしい書き方をしないと
恥ずかしいみたいな気持ちになって深みにはまることが多い。
0090デフォルトの名無しさん2016/11/30(水) 07:12:30.65ID:HOaAIIiu
>>80がgithubにソースを晒せば解決
0091デフォルトの名無しさん2016/11/30(水) 07:35:10.92ID:60EZvxwk
三割くらい減る
0092デフォルトの名無しさん2016/11/30(水) 08:50:24.62ID:AmbpRVJT
Cでいったん書いたんなら、そのときの反省点が色々あるだろ
それを踏まえてより上手くまとめるにはC++はいいツールだぜ
0093デフォルトの名無しさん2016/11/30(水) 09:01:18.76ID:WcEJDmm/
ぼくのかんがえるC++にしかできない超強力3大機能。
・自動的なデストラクタ呼び出し。
・moveコンストラクタと右辺値参照。
・ラムダ。
0094デフォルトの名無しさん2016/11/30(水) 09:03:12.26ID:WcEJDmm/
下の根の乾かないうちに訂正。

ぼくのかんがえるC++にしかできない超強力3大(5大?)機能。
・自動的なデストラクタ呼び出し。
・moveコンストラクタと右辺値参照。
・templateとlambda。
0095デフォルトの名無しさん2016/11/30(水) 09:05:34.45ID:WcEJDmm/
exceptionとRTTIはよく使うけど次点。

異論反論はもちろん認める。
0096デフォルトの名無しさん2016/11/30(水) 09:15:29.34ID:60EZvxwk
RTTIは使わないな
使うなって偉い人が言ってるし
0097デフォルトの名無しさん2016/11/30(水) 09:19:23.91ID:mG9+BxSG
なんで?(殺意)
0098デフォルトの名無しさん2016/11/30(水) 10:01:29.94ID:2V+M5QrA
RAIIの間違いじゃね?
RTTIをよく使うって違和感ある。
0099デフォルトの名無しさん2016/11/30(水) 10:25:44.68ID:TMG+JuRV
話題になっていた
STLと標準ライブラリと違うもの?
0100デフォルトの名無しさん2016/11/30(水) 11:41:28.64ID:AmbpRVJT
typeidをデバッグや実験でなく実用で使ったことが確かにないなあ
C++例外は嫌々しぶしぶ使ってるけど、クソすぎてため息
0101デフォルトの名無しさん2016/11/30(水) 12:37:13.96ID:60EZvxwk
例外ってなんか悪い部分あるの?
0102デフォルトの名無しさん2016/11/30(水) 12:51:41.03ID:zOzS6ENl
???部にどの様な記述でコンパイルできるのですか?

#include <iostream>
#include <vector>

template<class T>
class Point{
public:
    Point(T x,T y):m_x(x),m_y(y){}
private:
    T m_x;
    T m_y;
};

int main( int argc, char *argv[] )
{
 Point<int> p1(0,0);
 Point<double> p2(0.0,0.0);
    
    std::vector<Point<???>> vpoints;
    vpoints.push_back(p1);
    vpoints.push_back(p2);
 return 0;
}
0103デフォルトの名無しさん2016/11/30(水) 13:02:54.90ID:7bek9hnS
エラーメッセージは?
0104デフォルトの名無しさん2016/11/30(水) 13:08:22.75ID:0DxS4g7L
親クラス用意しなきゃ無理じゃね?
0105デフォルトの名無しさん2016/11/30(水) 13:16:41.10ID:7bek9hnS
あ、今意味がわかった
それやるならunion用意するかな
そもそも同じvectorにする意味がわからないけど・・・
0106デフォルトの名無しさん2016/11/30(水) 13:21:49.66ID:TMG+JuRV
>>105
プログラム的に意味があるかどうかなんか問題ではないだろ
それ言い出したら、

push_backした後なにもせずにプログラムが終了しているんだから
push_backする必要ないだろ
0107デフォルトの名無しさん2016/11/30(水) 13:47:54.21ID:kcnEUqeY
>>102
そこをどの様に記述してもコンパイルはできない

そのPoint<int>とPoint<double>はそれぞれなんの関係もない独立した型であって
相互に変換や代入などはできないから
0108デフォルトの名無しさん2016/11/30(水) 14:23:43.41ID:X0PK+rS4
>>99
STLは前世紀にどこかのメーカーが作ったライブラリ
便利なので広まって標準ライブラリの礎となった
最新のバージョンは3.3で今でもダウンロードできる
対応する環境はMS C++ Ver.5とかgcc 2.9とかだと思う
0109デフォルトの名無しさん2016/11/30(水) 14:26:14.29ID:TMG+JuRV
標準ライブラリっていってもパクリってこと?
0110デフォルトの名無しさん2016/11/30(水) 15:43:30.08ID:tnQQtKaj
パクリでもなんでも、便利そうなものは標準に取り入れる意味があるんだよ
さもなくば、コンパイラごとに違ったSTLとか嫌だろ
0111デフォルトの名無しさん2016/11/30(水) 16:25:16.47ID:34Y1lEhk
C++例外は、明らかにJavaやC#のそれに比べて親切度において劣る。
どこからジャンプしてきたかの呼び出し履歴をとれないのはあまりに大きい。
0112デフォルトの名無しさん2016/11/30(水) 16:53:47.96ID:34Y1lEhk
EASTLを Visual Studio 2017 RC で使って感じたこと。
 ・なるほど少し速いかも、なレベル。悪くない。むしろ良い。
 ・仕事ではなく趣味や学習目的で扱う分には、手本としてもオススメできる。
 ・既存のstdとeastlを混在利用することは可能だが要注意。
 ・EASTLに限らずテンプレートの宿命だが、プログラマ側ソースコードのどの箇所がエラー原因なのか場所を特定しずらい。

具体的に困ったこと。いずれも対策を講じて解決済み。
 ・eastlで作ったコンテナをうっかり std::random_shuffle() にいれると、どのライブラリの swap() を呼ぶかコンパイラがわからずエラーになる。
  eastl::shuffle()に置き換えて、第三引数の乱数生成器は stdの<random>の乱数生成器を使って対処した。
 ・eastl::make_shared<>(args...) で Gdiplus::Bitmapの梟雄ポインタのインスタンスを作ろうとすると 引数2つ渡すGdiplus::GdiplusBaseのnew演算子が定義されてないとかで、エラーになる。
  従来通り、new Gdiplus::Bitmap(...) で作ったものを渡して対処した。
0113デフォルトの名無しさん2016/11/30(水) 17:29:43.03ID:AmbpRVJT
noexceptがデフォじゃないのが許せん
0114デフォルトの名無しさん2016/11/30(水) 19:00:58.85ID:j7/lwSC0
>>109
標準化ってのは独自性の有る新たなものを産み出すんやなくて
世に存在する既存のものの統一を図るのが本来やで
0115デフォルトの名無しさん2016/11/30(水) 19:08:39.22ID:TMG+JuRV
>>110
コンパイラごとにSTLの実装は違いますけど?

VC++、gcc、clang、C++builderで実装が同じだと思ってました?w
                   ~~~~~
0116デフォルトの名無しさん2016/11/30(水) 19:33:15.69ID:tnQQtKaj
誰が実装が同じだといった?
規格の話しているのに、なんで実装の話が出てくるのか謎なんだが
0117デフォルトの名無しさん2016/11/30(水) 19:46:20.54ID:TMG+JuRV
>>116
おまえ頭おかしいのか?
己が書いたものを100回復唱してみろよ
↓
> 誰が実装が同じだといった?
> 規格の話しているのに、なんで実装の話が出てくるのか謎なんだが
0118デフォルトの名無しさん2016/11/30(水) 19:54:56.69ID:34Y1lEhk
規格がまずあり、開発環境がそれをちゃんと守ってるかどうかは実装を見て確かめる。
規格の話だけするのなら、そもそもコンパイラや実行環境さえ必要なくて、日本の自称・憲法学者(笑)のように紙とペンだけで済む。
規格と実装、両方の話をするのが正しい。
0119デフォルトの名無しさん2016/11/30(水) 20:16:34.70ID:SxJugRcT
規格の話しているのに、なんで実装の話が出てくるのか謎なんだが?
0120デフォルトの名無しさん2016/11/30(水) 20:22:51.93ID:wWCievJu
実装はコンパイラ毎に違うに決まってんだろ
0121デフォルトの名無しさん2016/11/30(水) 20:43:04.57ID:TMG+JuRV
>>110
を読んでみろ
0122デフォルトの名無しさん2016/11/30(水) 20:50:12.38ID:o1dhiyLy
.
.
■■人間性に批判殺到 あの悪質パクツイ垢 @copy__writing の管理人は東京都三鷹市の莉里子■■
http://i.imgur.com/5qAgsHG.png
http://i.imgur.com/kldi84l.png
http://i.imgur.com/8vCymiC.jpg


■今までのプライベート垢
@riricoco0
@bibliophilia333
@muzimuzi333
@nekomatagensou
@hanasoraumimori
@mirainosekai3
@zibanyan666
@parlorchild
@liliririko
@EriotN
@mike_peko
@riricoco0
@ririko_neko
@nyanpas ※1
@telegraphyneko
・
・
@riricatputi (新アカ)  http://imgur.com/a/X1vQA


100垢以上作ってるキチガイ出会い厨 (粘着やめろ詐欺師!はやく捕まれホラ吹きネットストーカー犯罪者!!)
0123デフォルトの名無しさん2016/11/30(水) 21:00:50.51ID:SxJugRcT
質問とか罵倒とか〜を読めとかじゃなくて自分の主張をすれば一発で終わることを
0124デフォルトの名無しさん2016/11/30(水) 21:13:12.45ID:34Y1lEhk
実装の定義がマチマチ。
ある人はプロプロセッサ処理前のソースコードという意味で。
ある人はプロプロセッサ処理後のソースコードという意味で。
ある人はコンパイル後のobjバイナリという意味で。
ある人はビルド後の実行バイナリという意味で。
0125デフォルトの名無しさん2016/11/30(水) 21:39:54.28ID:tnQQtKaj
ID:TMG+JuRV がなぜ発狂しているのか謎なんだが

---
パクリでもなんでも、便利そうなものは標準に取り入れる意味があるんだよ
さもなくば、コンパイラごとに違った(規格の)STL(モドキ)とか嫌だろ
---
0126デフォルトの名無しさん2016/11/30(水) 21:56:08.67ID:pYpq7m+B
一番頭おかしいやつが降臨しました>>124
0127デフォルトの名無しさん2016/11/30(水) 22:24:40.10ID:1zLD/kv4
パクリとかw
開発者本人が標準化委員会に提案したんだぞ
0128デフォルトの名無しさん2016/11/30(水) 23:42:37.82ID:lwghcYzA
ID:TMG+JuRV がなぜ発狂しているのか一瞬分からなかったが>>108-110を読み直して理解した
>>110の説明の日本語がよろしくない
0129デフォルトの名無しさん2016/12/01(木) 00:10:57.08ID:SwKXepyG
PCRE という正規表現ライブラリが存在する。
これをSTLのregexと同じインターフェースでラップした場合、STLと呼べるだろうか?
0130デフォルトの名無しさん2016/12/01(木) 00:14:57.78ID:rFASmZLg
regexはSTLなのか
threadをSTLと言ってる人も見かけたし何でもありだな
0131デフォルトの名無しさん2016/12/01(木) 00:18:17.94ID:O3rxu16z
つまり
STLという言葉を使う奴=バカ
ハゲもその一人
0132デフォルトの名無しさん2016/12/01(木) 00:23:12.22ID:SwKXepyG
>>130
指摘ありがとう。
regex はあくまでstdに採用されたのであってSTLではなかった。訂正します。
0133デフォルトの名無しさん2016/12/01(木) 00:27:51.92ID:9RDsFVMO
stdは「スタド」と発音すべき
0134デフォルトの名無しさん2016/12/01(木) 00:37:39.97ID:SwKXepyG
studio をスタジオと呼ぶ日本語の舌なのに、あろうことか stdio をスタディオと呼んでしまう。
0135デフォルトの名無しさん2016/12/01(木) 01:01:51.34ID:lTTMQ5z2
>>113
ある程度のサイズのプログラムで大半を占めるアプリケーション層の操作が noexcept になる
なんてことは考えにくいので、 noexcept がデフォだったらそれはそれで許せない感じになる。
noexcept がデフォでうれしいのなんてライブラリ作者ぐらいでしょ。
0136デフォルトの名無しさん2016/12/01(木) 01:37:48.41ID:TTb4zObN
>>130
regexもスタンダードなテンプレートライブラリだろ
0137デフォルトの名無しさん2016/12/01(木) 02:09:31.61ID:SwKXepyG
たとえ話。
STLを会社とすると、basic_stringはSTLの特別顧客だがSTLの社員ではない。
STLを会社とすると、regex、thread、iostreamは一般客。

regexを会社とすると、basic_stringはregexの特別顧客だが、regexの社員ではない。
stringstreamを会社とすると、basic_stringはstringstreamの契約社員。

basic_stringだけが特別な存在として異彩を放っている。
0138デフォルトの名無しさん2016/12/01(木) 02:52:13.09ID:PTAZcCnS
下手な例え話はやめろとあれほど言ったじゃないか
0139デフォルトの名無しさん2016/12/01(木) 03:20:50.25ID:n8BYNyNm
>>128
確かに>>110の内容は誤解する余地のある書き方だけど普通に読めば理解できるし、>>115は良く読まずに脊髄反射してるか、分かってて揚げ足取りしてるのか、いずれにせよ建設的な議論ができないタイプなんだろう。
0140デフォルトの名無しさん2016/12/01(木) 06:56:46.70ID:SwKXepyG
>>138
いらだつ気持ちはわかるよ。
basic_stringはヴェルタースオリジナルと同じくらい特別な存在だからね。
https://www.youtube.com/watch?v=4Yi9_uCw2NY
0141デフォルトの名無しさん2016/12/01(木) 08:11:31.70ID:7obV0jvg
STLが会社ならstringはハケン
「ボク、正規になれるって頑張ってきたのに…」
0142デフォルトの名無しさん2016/12/01(木) 10:05:27.69ID:PTAZcCnS
>>139
ほう?
この例え話から建設的な議論を広げて貰おうか?
0143デフォルトの名無しさん2016/12/01(木) 12:54:22.29ID:rYSe/HxL
>>142
そう言うレスが建設的じゃないって言われてるんだろ
0144デフォルトの名無しさん2016/12/01(木) 13:02:57.96ID:PTAZcCnS
>>143
え?なんで?
出来ないこと要求しちゃったから?
0145デフォルトの名無しさん2016/12/01(木) 14:01:09.15ID:vPHgqg3S
template<typename T> struct moge
{
struct hage{};
};
template<typename T> void hoge(typename moge<T>::hage)
{}
hoge(moge<int>::hage{});

hogeの呼び出しができません。hogeをどう変えればいいですか。
0146デフォルトの名無しさん2016/12/01(木) 15:05:36.97ID:SwKXepyG
>>145
hoge<int>(moge<int>::hage());
0147デフォルトの名無しさん2016/12/01(木) 15:17:40.11ID:vPHgqg3S
呼び出しの方は変えたくないです
Tがどの型でも呼び出せるようにするにはどうすればいいですか
0148デフォルトの名無しさん2016/12/01(木) 15:38:14.38ID:O+yJrb2h
俺はテンプレートなんか自分ではめったに書かないし
テンプレートの型推論のメカニズムも何も知らないが
要はhoge()の中でTが得られれば良いんでしょ?

template<typename T> struct moge
{
struct hage{ typedef T type; };
};
template<typename U> void hoge( U arg )
{
typedef U::type T;
}
hoge(moge<int>::hage{});

一応これでコンパイルは通る
0149デフォルトの名無しさん2016/12/01(木) 15:39:23.16ID:X/1wKSRH
>>101
拾いきれない例外は外にふっとんでいく
0150デフォルトの名無しさん2016/12/01(木) 15:41:27.17ID:SwKXepyG
>>141
正社員より年収の良い派遣社員だよ、basic_stringさんは。
しかも、boost の文字列操作ライブラリの強力な支援を受けられる最強の八方美人。
0151デフォルトの名無しさん2016/12/01(木) 15:42:30.64ID:vPHgqg3S
それだとtypeを持った型ならなんでも受け付けてしまいます
mogeのhageしか受け付けないhogeが必要です
0152デフォルトの名無しさん2016/12/01(木) 16:29:20.65ID:aVqOQbdr
コンパイラ無いから試せないけど、呼び出しに{}いるんだっけ?
0153デフォルトの名無しさん2016/12/01(木) 16:59:12.87ID:umvXirxE
clang: candidate template ignored: couldn't infer template argument 'T'

gcc: candidate: template<class T> void hoge(typename moge<T>::hage)
template argument deduction/substitution failed:
couldn't deduce template parameter 'T'

cl:
'hoge': no matching overloaded function found
'void hoge(moge<T>::hage)': could not deduce template argument for 'T'
see declaration of 'hoge'

みんな口を揃えて「Tが推定できない」と言ってくる
じゃあ、Tを明示的に与えては?
hoge<int>(moge<int>::hage{});
ちょっと腹立つけど、typenameだのtemplateだのの前置と
ウザさはそう変わらんと思う
0154デフォルトの名無しさん2016/12/01(木) 17:04:30.75ID:umvXirxE
ヘルパー関数を用意するとか
template <typename T>
void hige()
{
hoge<T>(moge<T>::hage{});
}
0155デフォルトの名無しさん2016/12/01(木) 17:06:57.95ID:umvXirxE
ラムダ式でも似たようなのできるな
auto closure = [](auto arg){ hoge<decltype(arg)>(moge<decltype(arg)>::hage{}); };
closure(1);
0156デフォルトの名無しさん2016/12/01(木) 17:12:07.19ID:vPHgqg3S
hoge(moge<int>::hage());
呼び出し方はこうでないといけないのです
hogeの定義の方をなんとかしてできませんか
0157デフォルトの名無しさん2016/12/01(木) 17:20:15.24ID:EvfhiEON
template<typename T> struct moge {
struct hage{ using type = T; };
};

template<typename T>
std::enable_if_t<std::is_same<T, typename moge<typename T::type>::hage>::value>
hoge(T) {};
0158デフォルトの名無しさん2016/12/01(木) 18:08:07.28ID:rYSe/HxL
すでに終わった話を引っ張るのが建設的とはとても思えないんだが...
まあ、なんか悔しいんなら一人でやっててくれ w
0159デフォルトの名無しさん2016/12/01(木) 18:49:53.87ID:Xkx3qm7U
>>157
hoge関数をどう変えるかと聞いてるのに
勝手にmogeの定義を変えるお題改変野郎
0160デフォルトの名無しさん2016/12/01(木) 19:01:40.82ID:aVqOQbdr
>>156でなんか問題あるの?
0161デフォルトの名無しさん2016/12/01(木) 19:13:39.34ID:xNXWtXQs
答えられないと「俺のお題改変に文句付けるのか」
「何が気に入らんのやワレ」と圧力
0162デフォルトの名無しさん2016/12/01(木) 19:14:31.57ID:O+yJrb2h
>>159
現実問題としては、using type = T は無くても有ってもかまわないんだろうよ
実際のコードのhageの中身がどうなっているかわからないが
Tを使ったメンバがあるならdecltypeでTは取得できるし
Tを使ったメンバがないなら
おそらくはhageの処理をするのにTは要らない公算が高いだろ
hoge()が何をする関数かわからないから何とも言えないが
using type = T はサービスみたいなものじゃないかな
0163デフォルトの名無しさん2016/12/01(木) 19:15:49.51ID:vPHgqg3S
>>160
コンパイル通りません
153のようなエラーが出ます
0164デフォルトの名無しさん2016/12/01(木) 20:31:23.58ID:O3rxu16z
>現実問題としては、using type = T は無くても有ってもかまわないんだろうよ

質問者以外の者がどうして根拠なしに決めつけようとするのか疑問だ
math.hにM_PIを入れただけで因縁をつけられてしまうというのに
0165デフォルトの名無しさん2016/12/01(木) 21:42:58.03ID:O+yJrb2h
だから質問者に良いかどうか決めてもらえばよいだろって話
質問者が納得さえすればそれで終わりなんだからさ
それなのにこの質問者は>>157についてはノーコメントなんだよ
0166デフォルトの名無しさん2016/12/01(木) 23:10:33.41ID:O3rxu16z
本気で質問しているようにも見えなかったが「できませんか」と訊かれているのだから
まず「出来ません」と回答しないと>>156は納得しないのではないだろうか。
可否がはっきりしない状態で質問通りでない代替案に誘導したらお題改変と罵られても致し方ない
0167デフォルトの名無しさん2016/12/01(木) 23:22:29.15ID:O+yJrb2h
おまえなー、それなー
いいかげんにしろよな
お前、俺に>>164で何て言った?
0168デフォルトの名無しさん2016/12/01(木) 23:42:50.11ID:SwKXepyG
min(x,y)とmax(x,y)の定義がマクロ版とテンプレート版が混在して悶絶した経験のある人だけが石を投げなさい。
0169デフォルトの名無しさん2016/12/01(木) 23:46:56.05ID:rFASmZLg
マクロ版min,maxは消せるけど
0170デフォルトの名無しさん2016/12/02(金) 00:39:59.68ID:pucVjZc7
質問です。
http://ideone.com/R8pyc7
配列と要素数を受け取るクラスにvectorを渡したい時のスマートな方法を教えて下さい。
0171デフォルトの名無しさん2016/12/02(金) 00:46:20.74ID:xqmmn7KF
vectorが変更しないならそれでいいだろうけど
そのコードみたいにpush_backするならhogeクラスには渡したくない
素直に考えるならvectorごと渡すクラスにすべきだが・・・
0172デフォルトの名無しさん2016/12/02(金) 00:56:10.11ID:vQsfzK7a
>>156の
>"hogeの定義の方"をなんとかしてできませんか
はできないからあきらめれよ!ってこと?
0173デフォルトの名無しさん2016/12/02(金) 01:11:57.66ID:EkOvBjK1
>>170
http://ideone.com/bdR6fU

これでいいじゃん

constの参照だと参照を握ったままになるから常に反映される
0174デフォルトの名無しさん2016/12/02(金) 01:17:41.14ID:BG6OiKaZ
既存のライブラリをそのまま使いたいのでクラスの変更はなしの方向でお願いします

ラムダ式でコピーコンストラクタを呼ぶ方法がいいのかな
http://ideone.com/R8pyc7
0175デフォルトの名無しさん2016/12/02(金) 01:46:59.92ID:bQI5jx4o
この状況だとvectorを直接からめた時点でスマートじゃなくなるだろ
unique_ptrとか補助に使ってnew[]で確保した領域に値をコピーして渡すのが結局スマート(賢い)
0176デフォルトの名無しさん2016/12/02(金) 01:50:25.88ID:FOrSERG0
vector用のオーバーロード作ればいいんじゃないのか
0177デフォルトの名無しさん2016/12/02(金) 01:59:15.75ID:EkOvBjK1
>>174
size()を使ってる点でおかしいよ
vectorのインスタンスを無視するつもりか
0178デフォルトの名無しさん2016/12/02(金) 02:33:56.52ID:kfHVwGjq
>>177
君は間違っている。
STLでも begin() と end() で範囲指定するだろ。
イテレータがない型にも対応しようと思えば、先頭ポインタとサイズを渡すのが正しい。
0179デフォルトの名無しさん2016/12/02(金) 02:49:25.45ID:l8IxU+t8
クラス変更無しでvector渡したいなら、ラッパを作って
配列と要素数を更新してからメソッド呼ぶようにするしかないんじゃないかな?
0180デフォルトの名無しさん2016/12/02(金) 05:46:11.27ID:na0ypgqO
何が問題でどうしたいのか明確にしてないからこんな風にとっちらかった回答になるんだよな
0181デフォルトの名無しさん2016/12/02(金) 07:22:37.66ID:nGP8T2R9
質問者本人はこれ以上無いくらいに明確にしたつもり
0182デフォルトの名無しさん2016/12/02(金) 07:57:25.48ID:na0ypgqO
>>181
本人?
意図不明なラムダ使った未定義動作のコードで明確にしたつもりって言われてもなあ
0183デフォルトの名無しさん2016/12/02(金) 08:20:31.67ID:4/nN0nxx
明確でないならスルーしとけばいい
明確でないから自分の都合で改編するとか迷惑なだけ
0184デフォルトの名無しさん2016/12/02(金) 09:56:01.01ID:tdlBqAAM
>>174
連続格納が保証されてるのだから
&a[0]を渡せばいいよ
0185デフォルトの名無しさん2016/12/02(金) 10:09:51.51ID:HWcr/nXn
そもそもの基本
◎ int* に vector<int> は渡せない
相手が int* でビルトイン[]演算子を使う限り、
vector ではなく生の配列を用意する以外に選択肢はない
0186デフォルトの名無しさん2016/12/02(金) 10:30:03.38ID:na0ypgqO
明確にしたとしても
>>185
みたいに何も解ってない初心者がでしゃばって見当違いな回答する事も多かったな
0187デフォルトの名無しさん2016/12/02(金) 10:53:45.98ID:HWcr/nXn
そもそもの基本を指摘されて発狂するようなガイキチが暴れてただけだろ
0188デフォルトの名無しさん2016/12/02(金) 10:59:49.79ID:dQ26sSxp
>>170
ラッパーかヘルパーを用意して、vectorはそっちで処理する。
0189デフォルトの名無しさん2016/12/02(金) 11:04:51.34ID:na0ypgqO
>>187
お前は何のためにstd::vector<T>::dataがT*を返すと思ってんの?
0190デフォルトの名無しさん2016/12/02(金) 12:06:38.84ID:kfHVwGjq
vector::data()が追加されたのはC++11 からだから古い入門書には載ってない。
だから安易にdata()を使えと回答する人もまた入門者に近しい。
0191デフォルトの名無しさん2016/12/02(金) 12:12:12.15ID:jbEu1BDa
どうも論理が飛躍しているな
0192デフォルトの名無しさん2016/12/02(金) 12:28:12.29ID:7EcjjmS3
質問者はラムダ使ってるんだからdata()使えるでしょ
0193デフォルトの名無しさん2016/12/02(金) 12:29:35.07ID:dQ26sSxp
>>190
古い入門書を想定しろ、はさすがに言いがかりがひどすぎる。
0194デフォルトの名無しさん2016/12/02(金) 12:36:41.22ID:oWLJBZXg
AnsiString::data()のパクリか…
0195デフォルトの名無しさん2016/12/02(金) 12:38:30.29ID:oWLJBZXg
いや、string::data()か
0196デフォルトの名無しさん2016/12/02(金) 14:14:03.78ID:uzv70fAD
data()はいいけど、vectorにemplace_back()したらsize()も変化するんだが
それが渡したクラスでは反映されないってのが問題だと思ってたんだが勘違い?
0197デフォルトの名無しさん2016/12/02(金) 14:59:13.58ID:7EcjjmS3
俺もそう思ってた
もっといえば要素増やすとdata()の場所がかわってアクセス違反になるかもしれなくて困ると言うことかと
0198デフォルトの名無しさん2016/12/02(金) 15:03:09.14ID:uzv70fAD
>>197
あーそれはあるね
どんどん要素を増やして行くと再newしてそこに全部要素コピーされなおして
元のアドレスは無効になるってのがあったな
だからvectorをメンバに持つのを頑なに拒否する理由がわからない
0199デフォルトの名無しさん2016/12/02(金) 15:13:55.45ID:kfHVwGjq
なんだか急にスレのレベルが落ちたのはなぜ?
他の場所で使うためのvectorをメンバ変数にするとか勝手なこと言いだしているし、精神病っぽいんだが。
0200デフォルトの名無しさん2016/12/02(金) 15:37:45.05ID:uzv70fAD
>>199
あのさあ・・・
>>170見てから発言しようよ
クラスにvectorの中身を受け渡してからその時の要素数で和を求めてるでしょ?
他のところで元のvectorの要素数が変化してもクラスに反映されたいのかと思ったわけですよ
それだったらconst&で参照を握るのが一番いいでしょって話

レベルが落ちてるのは君の頭では?
0201デフォルトの名無しさん2016/12/02(金) 15:53:53.33ID:jbEu1BDa
さすがにそんな今更な
0202デフォルトの名無しさん2016/12/02(金) 16:04:44.72ID:kfHVwGjq
普通に考えれば、クラスのメンバ変数として配列を持つ必要はなくて、
sum(int* arr, size_t arrsize); のように計算したいときにその配列を渡すだけでいい。
>>170の人は、クラス設計の基礎について学んでいる最中なのだろう。

>>200
内部でvectorを持てなどど初心者をミスリードするような言説は支持できない。
参照渡ししようがsum()実行時に配列がすでに破棄されている危険は避けられない。
0203デフォルトの名無しさん2016/12/02(金) 16:07:07.03ID:uzv70fAD
>>202
それはそうだけど、精神科医でもないのに他人を精神病呼ばわりするのはどうかと思うね
0204デフォルトの名無しさん2016/12/02(金) 20:25:46.27ID:CA3LJl/S
念のため受診してみるのはどうか。
0205デフォルトの名無しさん2016/12/02(金) 20:55:50.99ID:u0tVj5kO
>>167
ん?何か問題でも?
0206デフォルトの名無しさん2016/12/02(金) 21:54:40.66ID:U8hBv6+y
必要もないのに受診するんだからお前金出せ
0207デフォルトの名無しさん2016/12/02(金) 22:09:36.42ID:7p6FlYPM
>>203
自分およびリアルの周りの連中に精神病の奴が多いから、すぐにそう呼ぶんだよ
プログラマは、基地外・低脳・ド素人でもなれる底辺職業だからしょうがない
あと,2chに来る連中は基地外・低脳が普通でコミュ障害の奴が多い
0208デフォルトの名無しさん2016/12/02(金) 22:22:54.67ID:bT0HhoKK
>>207
類は友を呼ぶって言うからお前も頭おかしいんだな
だからお前の回りばっかり精神病の奴がたくさん集まるわけだ
俺の周囲にそんなおかしい奴いないぞ
0209デフォルトの名無しさん2016/12/02(金) 22:35:27.15ID:7p6FlYPM
>>208
お前も、2chに来ている。つまり、お前もおかしい奴で基地外の仲間
0210デフォルトの名無しさん2016/12/02(金) 22:42:18.13ID:bT0HhoKK
>>209
無理があり過ぎるよそれ
2chに来ていたら頭おかしいってどうなんだよ
極論過ぎるだろ
0211デフォルトの名無しさん2016/12/02(金) 22:57:40.10ID:kfHVwGjq
物事をわざと難しい方に倒すような人は精神の変調をきたしやすい。
質問者はvectorをメンバ変数に持つつもりなら最初からやってるよ。
質問者がクラスにやらせるべきこととそうでないことを判断するトレーニング中であることぐらい、察したらどうか。
0212デフォルトの名無しさん2016/12/02(金) 23:17:08.89ID:bT0HhoKK
あーこりゃ完全に頭逝ってるね
0213デフォルトの名無しさん2016/12/03(土) 00:40:47.30ID:lJ+FIy6l
そう言っている奴こそ完全に頭逝っているよな
普通の奴はそんなことは普通は言わないからな
0214デフォルトの名無しさん2016/12/03(土) 01:16:45.36ID:o5juI1ev
>>213が既に普通でない件
0215デフォルトの名無しさん2016/12/03(土) 01:45:59.55ID:lJ+FIy6l
昼間は楽しかったんだな。俺も参加したかったよ。
>>170 の
19. hoge huga(&[&]{return a;}()[0],a.size());
20. cout<<huga.sum()<<endl;
21. a.push_back(4);
22. cout<<huga.sum()<<endl;

質問者が聞いているのは、19のところの渡し方のみで
21でpush_backしたことが22のhuga.sum()に反映されなくてもOK
ってことでこのコードなのか。でも、普通は反映されないと駄目だろうってなるが
しかし、そのあたりのことは質問者の方針しだいだからな
0216デフォルトの名無しさん2016/12/03(土) 02:11:45.06ID:VaD9CZL6
>>215
そもそもそのコード未定義だから。コピーされた一時オブジェクトの寿命がfugaのコンストラクタの終了時までしかない。つまりコンストラクタが終わった時点でfugaは無効なポインタを保持している。
俺意外誰も指摘してないこのレベルの低さよ
まともなバッファーオーバーフローチェックツールもないWindows使ってるだろうからずっと気付かないんだろうけどさ。
0217デフォルトの名無しさん2016/12/03(土) 02:17:26.63ID:Ub2Qtd0L
>>216
Visual Studio に静的コード分析するツールがついてるよ。

http://qiita.com/t_takahari/items/8886b84f16c21dcf3169
ツールバーの[ビルド] → [ソリューションでコード分析を実行]
0218デフォルトの名無しさん2016/12/03(土) 02:45:48.72ID:VaD9CZL6
>>217
この流れで紹介するから検出すんのかと思って件のコードに使ったけど検出しねえじゃん。
何で紹介したの?見てください。こんなゴミしかありませんって言いたかったの?
0219デフォルトの名無しさん2016/12/03(土) 03:22:46.71ID:Ub2Qtd0L
>>218
無理だったか。人柱になってくれてありがとう。参考になったわ。
0220デフォルトの名無しさん2016/12/03(土) 06:19:52.60ID:Dg5vNEL0
>何で紹介したの?

文脈を理解できずに単語レベルで脊髄反射したから
以外の理由が思いつかない
0221デフォルトの名無しさん2016/12/03(土) 09:55:36.59ID:PFahUF7+
そもそも fuga なんてどこにもないし、無効なポインタとバッファーオーバーランの区別もついてない >>216 が知ったか君の脊髄反射にしか見えん...
0222デフォルトの名無しさん2016/12/03(土) 10:41:31.67ID:VaD9CZL6
>>221
そんなどうでもいい事しか指摘出来ないんかね?
×fuga
○huga
これで満足かね?
あと、勝手に脳内補完したんだろうけどバッファーオーバーフローしているとは言っていない。
0223デフォルトの名無しさん2016/12/03(土) 11:01:08.63ID:ueq5z8BC
>>222
ビルド不可能な致命的なミスをどうでもいいとかレベルが知れるね
0224デフォルトの名無しさん2016/12/03(土) 11:09:33.93ID:VaD9CZL6
>>223
へえ、お前はあのコメントビルドしなきゃ解釈出来ないんだ?
融通の効かない脳みそ持ってて大変そうだね。
ちょっと気の利いた実在するコンパイラですらfugaじゃなくてhugaじゃない?と提案してくれだろうに
0225デフォルトの名無しさん2016/12/03(土) 11:35:29.83ID:msYNpxCE
>>222
>>170もタイプミスで
hoge huga(&[&]{return a;}()[0],a.size());
としたんだよ
ほんとは、
hoge huga( &[&]()->std::vector<int>&{return a;}()[0], a.size());
(でも、ラムダを使った意図が分からんが)
で、一方、a.size()はラムダじゃないところがなかなか良いな

>>216で言っているチェックツールはなんていうもの?
0226デフォルトの名無しさん2016/12/03(土) 11:43:54.49ID:VaD9CZL6
>>225
その質問者であろう次のコメント
>>174
を読んでそう言ってる?
0227デフォルトの名無しさん2016/12/03(土) 11:55:45.48ID:msYNpxCE
>>226
>>215と>>170ぐらいしか読んでいない
で、チェックツールはなんていうもの?
0228デフォルトの名無しさん2016/12/03(土) 13:30:42.63ID:NvhxMxG9
1.配列と要素数を受け取るクラスにvectorを渡したい(>>170)
2.既存のライブラリをそのまま使いたいのでクラスの変更はなし(>>174)

だからラッパー作るしかないんじゃ
0229デフォルトの名無しさん2016/12/03(土) 13:32:28.64ID:yMrCSOQZ
>>216
そんなの誰でも気づいてるんだが・・・
「誰も気付いてないことに気づいてる、俺偉い!」みたいなガキみたいな発言やめようよ
0230デフォルトの名無しさん2016/12/03(土) 14:13:03.65ID:10B4blEi
>誰でも気づいてるんだが

ラムダを使った意図が分からんと言っている人が
無効ポンタの問題に気付いているなんてありえるんか?
0231デフォルトの名無しさん2016/12/03(土) 14:32:15.79ID:ibetNlvy
>>230
くやしいのうくやしいのうwww
0232デフォルトの名無しさん2016/12/03(土) 14:38:22.39ID:VaD9CZL6
>>229
後からならなんとでも言えるよねw
それに”俺偉い”じゃなくて”お前ら役立たず”だから。
0233デフォルトの名無しさん2016/12/03(土) 14:49:46.37ID:3jlcDMZy
>>230
ローソンで使わないとポインタつかないよ
0234デフォルトの名無しさん2016/12/03(土) 15:34:57.86ID:RB4pAnBd
03ぽい話はこういうところで話してもつまらないと思う。てゆーかみんなもう興味ないでしょ。
0235デフォルトの名無しさん2016/12/03(土) 17:47:38.70ID:obyPXWW/
>>174
これでダメならラップだな
http://ideone.com/FdmnJX
0236デフォルトの名無しさん2016/12/03(土) 20:55:37.22ID:nmEGc+VH
メモリポインタの話でもしようぜ!
0237デフォルトの名無しさん2016/12/03(土) 21:35:23.01ID:Ub2Qtd0L
クラスがnew や delete をオーバーライドしている場合は、
make_shared によるshared_ptrインスタンス作成は避けた方がよさげ?
0238デフォルトの名無しさん2016/12/03(土) 22:49:36.24ID:P2bjLPkk
>>235 ついでに >>228
質問者はLambda覚えてうれしいみたいだから
auto getsum_of_vec_a = [&](){ return hoge(a.data(),a.size()).sum();};
or
auto getsum_of_vec_int = [](std::vector<int>& rveci){return hoge(rveci.data(),rveci.size()).sum();};
の方が好きなんじゃないのか
0239デフォルトの名無しさん2016/12/04(日) 01:18:15.57ID:NuV6w8ql
気のせいかQの匂いがする
QはID入ってから消えたけど老害なのにC++11/14やり始めたのか
0240デフォルトの名無しさん2016/12/04(日) 01:21:08.10ID:ym269Z+p
まあそうかも知れない
見ていて哀れな自演をするのが片山
自演せずにアホなレスを続けるのがQ
0241802016/12/04(日) 11:02:45.11ID:VNQPodhL
お礼が遅れましたが、レス沢山いただきまして
ありがとうございます。

毎週土曜日に囲碁ソフトを作ってる仲間で集まって対戦しているのですが、
昨日は、とうとう勝率で最下位に転落してしまいました。

というわけで来週の対戦に備えて、C言語のままでレベルをはかります。
C++への移植は、C++をもうちっと勉強してからにします。
0242デフォルトの名無しさん2016/12/04(日) 11:30:28.53ID:lLLqnakU
>>241
> 毎週土曜日に囲碁ソフトを作ってる仲間で集まって対戦しているのですが、
面白そうだな、羨ましい
0243デフォルトの名無しさん2016/12/04(日) 12:44:55.51ID:3hO5sNCQ
集まる必要があるのか?
0244デフォルトの名無しさん2016/12/04(日) 12:52:15.85ID:vQKkq8/O
ソケットの勉強してネットで対戦出来るようにしてくれ
0245デフォルトの名無しさん2016/12/04(日) 13:15:12.36ID:G39rTcwP
>>244
いくらでもあるじゃん
0246デフォルトの名無しさん2016/12/04(日) 13:18:43.46ID:0x/ZyvVg
>>241
英断
C++なんて初めたら囲碁ソフトどころじゃなくなるからな
0247デフォルトの名無しさん2016/12/04(日) 13:22:41.10ID:npHUCn5F
>>243
集まってわいわいやるのが楽しいんだろ
0248デフォルトの名無しさん2016/12/04(日) 13:34:54.43ID:3bGgXPCq
>>243
ぼっちか?
0249デフォルトの名無しさん2016/12/04(日) 15:02:30.49ID:3hO5sNCQ
>>248
集まるか?
まあ楽しいんだろうけど。
そういう場で言語の話題になったりしないのかな?
0250デフォルトの名無しさん2016/12/04(日) 19:50:57.71ID:IGd+W/R5
>>243みたいに一生ずーっとスマホ越しの
同好の士との交流だけをし続けるやつキモすぎ
0251デフォルトの名無しさん2016/12/04(日) 21:01:23.82ID:3hO5sNCQ
>>250
C++忘年会には出るけどな
0252デフォルトの名無しさん2016/12/04(日) 21:22:06.89ID:c0yJ+Nvf
日本語が通じなさそう
0253デフォルトの名無しさん2016/12/04(日) 21:31:12.40ID:WzPfJn5T
雑談している時が平和で良いな
C++のレベルは低くてC++の話はたいしてできないんだから
もう、C++な奴のの雑談スレで良いな
0254デフォルトの名無しさん2016/12/04(日) 21:34:02.43ID:IGd+W/R5
おまえの中ではな
0255デフォルトの名無しさん2016/12/04(日) 21:44:00.38ID:3bGgXPCq
>>251
このスレ基準だとすぐ喧嘩になりそう
0256デフォルトの名無しさん2016/12/04(日) 22:05:03.03ID:ORLi/53U
>>237
そんな気がする
0257デフォルトの名無しさん2016/12/04(日) 22:21:04.25ID:mxVYcsZL
>>253
ついったーとかですればいい
0258デフォルトの名無しさん2016/12/04(日) 22:21:43.19ID:mxVYcsZL
訂正
>>253
れべるの高い話はついったーとかですればいい
0259デフォルトの名無しさん2016/12/04(日) 22:53:20.88ID:BLPKeA8O
「このnewでインスタンスを作成する所が」
「インスタンスはコンパイラが明示的または暗黙的に作成するもの。イミフ」
「会話の流れから常識で理解できない馬鹿はお辛そうですねww」
「論破されて反論出来なくなると人格攻撃ミジメwww」
こんな感じだな
02601122016/12/04(日) 23:39:04.98ID:Auh8Qey4
eastl::make_shared<>(args) で new オーバーライドがないエラーが出て調べたんだが、
VS2017RC の std や boost の make_shared<>(args) は、しれっと new/delete オーバーライドを無視して、通常のnew/deleteを使うので要注意。

最初はコンパイルできないeastlの問題かと思ったが、今はむしろ意図しない解釈を許す std や boostの方が問題に思える。
0261デフォルトの名無しさん2016/12/04(日) 23:39:11.45ID:WzPfJn5T
>>259
ここには俺も含めてそうなる連中以外いないだろ
いまや,2chは基本的にコミュ障(議論っぽいことはしているが、実はコミュニケーションはできていない)
者が集まるところ。
議論にはコミュニケーション能力必要だが、雑談ならコミュニケーション能力なくていい。
意味不明の独り言でもよいし

>>258
れべるの高い話だけじゃなく低い話もついったーとかで
雑談はここで良いが、C++のこと(議論)をここですると(コミュ障全開の)罵倒・喧嘩・基地りあいになるから
雑談以外はついったーとかですればいい
0262デフォルトの名無しさん2016/12/05(月) 00:01:16.81ID:JXZGoe9z
>>260
make_shared<T>はTとshared_ptrの管理ブロック用の領域を合わせた大きさで
一回しかメモリ確保を行わないからそういうもの
Tの大きさ分のメモリしか確保しないオーバーロードされたnewはメモリ確保には使わない
0263デフォルトの名無しさん2016/12/05(月) 00:19:06.63ID:oh/e0eB5
>>262
そういうもの、とはどういう意味ですか?
やはりコンパイルエラーが出るEASTLが間違っているということでしょうか。
0264デフォルトの名無しさん2016/12/05(月) 00:23:17.61ID:soEx3sdp
>>263
特定のアロケーター使って欲しい場合のためのstd::allocate_shared
02652632016/12/05(月) 00:33:53.91ID:oh/e0eB5
>>264
代替的な解決策のご提示、ありがとうございます。
正直、クラスのnew/deleteオーバーライドを警告なしに無視することが make_shared() の仕様であるとは思いたくないです。
0266デフォルトの名無しさん2016/12/05(月) 00:43:42.73ID:soEx3sdp
>>265
std::listなどのコンテナ関係が警告なしに無視するのは許せるの?
逆に言えば標準ライブラリの中でクラスのnew deleteがあればそれを使うなんてもの殆ど無いよ
02672632016/12/05(月) 02:11:52.64ID:oh/e0eB5
>>266
警告くらいは出してもいい気がしますが。
list<shared_ptr<T>> を使えばクラスのnew/deleteオーバーライドを呼ぶよう対処可能だけど、
そのshared_ptr<T>インスタンスをmake_shared<T>()で作ると要素をshared_ptrでラップした意図も台無しになる。
0268デフォルトの名無しさん2016/12/05(月) 03:07:21.93ID:PDKg3SYv
どいつもこいつもオブジェクトをJava化しようとするんだろうな
0269デフォルトの名無しさん2016/12/05(月) 07:38:41.26ID:nBxFX+pd
>仕様であるとは思いたくないです

だが仕様は確認しない。
そう誓ったに相違ない
0270デフォルトの名無しさん2016/12/05(月) 08:03:39.13ID:soEx3sdp
>>267
何のためにクラスのnew deleteをオーバーロードしてるのか知らんけどスタックに構築するのはいいの?
std::list<T> a;って出来るのはいいの?
それらが良くてmake_shared<T>()がダメな理由が解らないよ。
02712632016/12/05(月) 09:14:32.56ID:oh/e0eB5
>>270
> 何のためにクラスのnew deleteをオーバーロードしてるのか知らんけどスタックに構築するのはいいの?

ん?オーバーロードじゃなくてオーバーライドの話してるんだけど。

Win32APIのGDI+ のクラスはすべてGdiplusBaseを基底クラスとして持っていて、
GdiplusBaseのnew/deleteオーバーライドがヘッダーファイル GdiPlusBase.h に定義されている。
何のためにオーバーライドしてるのかこっちが聴きたいくらい。
0272デフォルトの名無しさん2016/12/05(月) 10:16:56.47ID:soEx3sdp
>>271
new deleteはオーバーライド出来ません

gdiplusは恐らくそのクラスをgdiplusのdllの中でnewしてポインタ返しユーザーにdeleteさせるような設計になってるからdllの中のnewとアプリケーションのdeleteが不一致になるのを防ぐ為だと思う。
だからアプリケーションコードの中で生成、削除する分には必ずしもオーバーロードされてるnew deleteを使う必要はないんじゃねえかな
02732632016/12/05(月) 10:33:28.39ID:oh/e0eB5
>>272
ここはC++相談室スレだから、憶測のデタラメな回答はやめましょう。
雑談はよそのスレでどうぞ。
0274デフォルトの名無しさん2016/12/05(月) 11:18:49.61ID:AODxEeuP
お前いったい何がしたいんだよ
反論できなくなったり、気に入らなかったりしたら
「雑談はよそのスレでどうぞ」
かよ
ことの発端はお前だろ
で、new delete の「オーバーライド」の話はどうなったの?
0275デフォルトの名無しさん2016/12/05(月) 11:20:32.71ID:soEx3sdp
>>274
触っちゃダメな人だよ
02762632016/12/05(月) 11:42:41.49ID:oh/e0eB5
new 演算子がヘッダーに書かれているのに dllの中で new するなどとデタラメなこと書いてるから門前払いさせてもらった。
このスレは、質問者の想定する前提条件を勝手に変更する読解力のない人がちょくちょく来るんだけど、何なの?
ほかのスレにこんな人いないよ。
0277デフォルトの名無しさん2016/12/05(月) 11:44:07.18ID:soEx3sdp
公式のexampleでもスタックに構築してる事から構築方法に特に制限は無い、(もし制限があるなら記述するか、factory関数内でのみこう)
0278デフォルトの名無しさん2016/12/05(月) 11:51:24.58ID:soEx3sdp
途中で書きこんでしまった。
通じる人に向けて書こうと思ったけど面倒くさくなったからいいや。
0279デフォルトの名無しさん2016/12/05(月) 12:02:47.33ID:soEx3sdp
C++とdllとnew deleteの関係性について理解してる人には説明の余地もないけど、DLLの中でnewっていうのは所謂factoryメソッドのようなもの。gdiplusならBitmap::FromFileとか中で構築した物の生ポインタを返してるね。
それをユーザーコードでdeleteするとnew deleteをオーバーロードしていなけれはnewはDLLの中でリンクされているライブラリのメモリ確保が呼ばれる。
deleteはアプリケーションでリンクされているライブラリのメモリ解放が呼ばれる。

自分の知識の無さを棚に上げてデタラメ呼ばわりしたことを恥じて貰うために詳細に説明してあげたよ。
02802632016/12/05(月) 12:17:58.38ID:oh/e0eB5
>>279
基底クラスが newやdeleteをオーバーロードすることの説明になってない。
あなたの言っていることは根本的にズレているんだが。
あなたが自分で書いた>>270の質問に自分で回答してみたらどうか。
0281デフォルトの名無しさん2016/12/05(月) 12:22:37.14ID:AODxEeuP
>gdiplusならBitmap::FromFileとか中で構築した物の生ポインタを返してるね。

は>>272の

>gdiplusのdllの中でnewしてポインタ返しユーザーにdeleteさせるような設計

には該当してないんですか?
頭大丈夫?

そのあとの説明も、お前のはタイプミスしているようだが、ともかく
お前の長々書き上げたその説明も
>>272の

>dllの中のnewとアプリケーションのdeleteが不一致になるのを防ぐ為だと思う。

を意味もなく長く書いただけにすぎないと思うが
まったくお前の行動は意味不明すぎて訳が分からない
否定しておいて自分で同じことを言いなおすのが趣味の人?
0282デフォルトの名無しさん2016/12/05(月) 12:28:33.16ID:IcdzVsWl
>>281
いや、それ俺(同一人物)だから…
270の回答は良いんだよstd::vector<Bitmap> a;しても。
02832632016/12/05(月) 12:35:24.21ID:oh/e0eB5
>>282
頼むからデタラメ書いてスレを荒らすのをやめてもらえないか。
0284デフォルトの名無しさん2016/12/05(月) 12:42:20.04ID:IcdzVsWl
直接入れると配置newが無いってコンパイルエラーになるかもしらんけどね。
0285デフォルトの名無しさん2016/12/05(月) 12:53:16.01ID:AODxEeuP
>>282
素で間違えたわ・・・・ゴメンゴ
ついでににmake_sharedも問題ないね
DLLの内部でnewされるものにmake_sharedは使えないからね
02862632016/12/05(月) 12:54:28.05ID:oh/e0eB5
Bitmapはコピーコンストラクタがprivateになってるのでvector<Bitmap>を使えない。結果的にnew/deleteの問題を起こせないようになってた。

Bitmapをコンテナで使うには、生ポでいれるかshared_ptrでくるんで入れるしか選択肢がない。
前にも書いたが、stdやboostの場合、shared_ptrをmake_sharedで作るとnew/deleteの不整合問題が暗黙のうちに発生する。
0287デフォルトの名無しさん2016/12/05(月) 13:19:44.05ID:MCpw3CLl
>>286
それは何が不整合になると言ってんだ?
new deleteのオーバーロードが使われないというだけなら問題ないという話をしてたわけだけど
0288デフォルトの名無しさん2016/12/05(月) 16:56:12.05ID:rZWSQmpd
>>286
横レス失礼
そのBitmapとやらは、内部的にはHBITMAPだったりするのか?
コピコンがprivateってあたりが、そのように聞こえるんだが
だとしたらnew/deleteじゃなくCreateDIBSection/DeleteObjectだろ
0289デフォルトの名無しさん2016/12/05(月) 16:57:36.27ID:rZWSQmpd
いや、何でもない
忘れてw
0290デフォルトの名無しさん2016/12/05(月) 17:39:58.18ID:IxGDT3As
newのオーバーライドなんてできたっけ??
0291デフォルトの名無しさん2016/12/05(月) 18:23:28.13ID:5HZvpDM+
【被爆】治療法より原因を報道せよ!【死刑】


増える原因不明死 死因解明が追いつかない
(NHK・クローズアップ現代)

某看護師会の集まりで
「なぜ最近20代の突然死が急に増えたのか」
というテーマが議題にあがったそう。
みんな全く理由がわからなかったらしい。
1990年以降、被曝医学が
カリキュラムから追放された事情も大きい


たくさんの人があっけなく死んでいく
ベンチに座ったまま バスを待ちながら
説明のつかない死が多かった
多くの人が脳卒中や心筋梗塞を起こした
駅やバスの中で (『チェルノブイリの祈り』)


朝本浩文、自転車転倒死。(UAなど作曲、53)
小泉義仁、駅で脳梗塞。(スピリチュアルTV 51)
森岡賢、、心不全。     (元ソフトバレエ 49)
飯野賢治、心不全。    (株式会社ワープ 42)
今井洋介、心筋梗塞。(テラスハウス出演者 31)
杉崎由佳、急死。(『進撃の巨人』作画監督 26)

今井雅之54 盛田幸妃45 松来未祐38 泉政行35
宮田紘次34 黒木奈々32 丸山夏鈴21 椎名もた20
02922632016/12/05(月) 19:02:40.60ID:oh/e0eB5
>>290
>newのオーバーライドなんてできたっけ??

newはオーバーライドできる。さらに独自にクラス内でオーバーロードもできる。

世間では オーバーロード が使われることが多いが、オーバーライド を使うのが正しい。
オーバーライドは、 異なるクラスの同名メソッド
オーバーロードは、 同じクラスの引数違いの同名メソッド

new /delete を引数違いで複数定義すればオーバーロードになる。
多くの場合、newした場所を特定するデバッグ手段としてオーバーロードしているため、誤用が広まった。
0293デフォルトの名無しさん2016/12/05(月) 19:06:45.48ID:Ij/A1A/c
>>290
そこは触れないでおきたい、おもしろそうだから。
あー、でも もう263逃げちゃったかな。

> ん?オーバーロードじゃなくてオーバーライドの話してるんだけど。
名言だな
0294デフォルトの名無しさん2016/12/05(月) 19:12:16.92ID:Ij/A1A/c
まだいたの?
盛り上がってくるの?
02952632016/12/05(月) 19:18:05.98ID:oh/e0eB5
「コンテナに入れるクラスの実装を変えろ」という意見はごもっともだが、他から提供されたクラスなので勝手に書き換えできないケースも想定するべきだろう。

Gduplusは、MFCやと違ってcyginやmingw向けにもクラスライブラリが提供されている。皮肉交じりに言えば、
意のままにならない他社製クラスをC++のコンテナやテンプレートで扱うためのスキルを磨くのに、Gdiplusのクラスが一役買うかもしれない。

>>293
何を対象として話しているか曖昧になるので、オーバーロードの誤用は控えるべき。ヘッダーを見ればすぐわかることだが、
そもそもGdiplusBaseはサイズ引数1つだけをとる基本の new, new[], delete, delete[] がオーバーライドされているだけであり、オーバロードはされてない。
0296デフォルトの名無しさん2016/12/05(月) 19:19:21.48ID:HK8B5iWy
>>260は最初からオーバーライの話をして
そいつの相手をしている人は最初からオーバーロードの話をしているんだろ。
最初から議論がかみ合っていない、やっぱり2chだよな。議論はついったーとかでだな
0297デフォルトの名無しさん2016/12/05(月) 19:23:45.88ID:TTRwCBA5
まだnew deleteのオーバーライドなんて言ってんのかよ。
お前はoperator+書くときもオーバーライドって言うのか
0298デフォルトの名無しさん2016/12/05(月) 19:28:52.02ID:HK8B5iWy
>>297
>>260はnew deleteのオーバーロード(operator+のオーバーロードじゃなく)の話じゃなく
継承でオーバーライドされたnew deleteの話をしているんだろ
0299デフォルトの名無しさん2016/12/05(月) 19:29:18.41ID:TTRwCBA5
http://en.cppreference.com/w/cpp/memory/new/operator_new

Class-specific overloads
03002632016/12/05(月) 19:35:38.93ID:oh/e0eB5
>>297
同一クラス内で operator+ がひとつだけならオーバーライド。
同一クラス内で operator+ が複数あればオーバーロード。

オーバーロードという語を誤用しても普通は問題ない。
誤用すると混乱する話題だからあえて指摘した。
0301デフォルトの名無しさん2016/12/05(月) 19:37:03.33ID:2NaB5jfD
>>298
それが誤用だって言ってんだよ
お前は派生クラスで基底クラスのvirtualではない関数と同じ名前付けて隠した場合もoverrideって言うのかよ。
そうだとしたら根本的に話通じない相手だな。
0302デフォルトの名無しさん2016/12/05(月) 19:47:51.17ID:HK8B5iWy
>>301
俺は>>298のように>>263(>>260?)のオーバーロードとオーバーライドの違いと理解したが
でも、>>300からするとなんか違ったみたいだが。
0303デフォルトの名無しさん2016/12/05(月) 19:53:49.64ID:2NaB5jfD
>>302
最初に述べたようにnew deleteはオーバーライド出来ない。
クラス内に書くnew deleteもオーバーロード。
グローバルのnew deleteの他にそのクラスだけで使うnew deleteを多重定義できるからオーバーロード。
そのクラスを派生して基底のメンバーを使用したからと言ってオーバーライドされてるなんて言わない
0304デフォルトの名無しさん2016/12/05(月) 19:53:59.55ID:HK8B5iWy
Win32APIのGDI+ のクラスや 、それのGdiPlusBase.h をよく見てみないと
>>263(>>260?)が言っているnew/deleteことが分からんのかもしれないが。
当然、俺は全く見ていない
0305デフォルトの名無しさん2016/12/05(月) 19:59:25.50ID:Ij/A1A/c
263 俺がC++標準規格だ
0306デフォルトの名無しさん2016/12/05(月) 20:07:08.59ID:lQvX1MVr
>>300
なんだよその謎基準w
03072632016/12/05(月) 20:25:56.28ID:oh/e0eB5
例えると、インターネットとイントラネットの違いみたいな感じ。
override = inter-
overload = intra-

内と外の境界をどこに置くかで定義が変わる。
0308デフォルトの名無しさん2016/12/05(月) 20:31:39.99ID:SJelErcp
こんばんは。

このスレ見ていますと、
C++は、難しい言語なんですね。

覚えてしまえば便利なんだけど
誰しも完全には覚えていない
言語のように思います。

私は記憶力の悪い馬鹿なので
頭のよくなる薬ができるまで
C++は触らないようにいたします。
0309デフォルトの名無しさん2016/12/05(月) 20:36:21.46ID:q1I0LUvJ
まもなくAIで頭の悪いやつは何もしなくて良くなるからな
0310デフォルトの名無しさん2016/12/05(月) 20:41:41.42ID:lQvX1MVr
そもそもstaticじゃなかったっけ?
0311デフォルトの名無しさん2016/12/05(月) 21:03:57.36ID:Xa5pMyWr
newもdeleteもoverrideできないというのは間違い
そもそもnewもdeleteも非staticなメンバとして定義できない
だからnewとdeleteはoverloadはできるが、そもそもoverrideどうのこうのという議論自体がおかしい

ID:oh/e0eB5は完全に勘違いしててクラス内に書いてあるメソッドをoverrideできるんじゃなくて仮想メソッドをoverrideできるの
こういう人ってクラスのメンバを全部virtual宣言したり必ず仮想デストラクタをつけるよね
C++の言語仕様を全く理解してないと言っても過言ではないが、Javaとかから流れてきた人なのかな
03122632016/12/05(月) 21:15:20.00ID:oh/e0eB5
>>311
抽象的なoverrideの話は、言語仕様に依存する static や virtual といった属性と何の関係もない。
あなたが、既定のグローバルな new や delete がどのように定義されているかさえ知らないってのはよくわかった。
0313デフォルトの名無しさん2016/12/05(月) 21:21:35.11ID:ddMLk6te
>new や delete がどのように定義されているかさえ

C++のreplaceable functionってよく理解してないんだ
アホな俺に教えて
0314デフォルトの名無しさん2016/12/05(月) 21:25:06.89ID:0ETq54/D
>>312
違う
overrideというのはサブクラスからベースクラスのメソッドを上書きすること
staticメソッドでは非staticメソッドと違って暗黙的にクラスのインスタンスを受け取ることがないためクラスの話ですらない
ADLについて議論するならまだしも、クラス内に書いたら強制的にstaticにされてしまうnewやdeleteをクラスという枠組み前提で話すのは間違いだよ
そもそもクラスのメンバ関数と言うものが何かもわかってないのかな?
03152632016/12/05(月) 21:27:27.80ID:oh/e0eB5
特定の言語仕様ではなく、厳格なオーバーライドとオーバーロードの定義の話をしている。

<new> をインクルードして グローバルな new や delete を置き換えるのはオーバーロード。
グローバルなnew や deleteを呼ばないようクラスのnew deleteで置き換えるのはオーバーライド。
さらにそのクラスでnew や deleteの引数違いなメソッドを複数提供すればオーバーロード。
03162632016/12/05(月) 21:32:31.98ID:oh/e0eB5
>>314
グローバルの new, delete は暗黙の基底クラスの静的メソッド扱い。名前なしだからそう見えないだけ。
0317デフォルトの名無しさん2016/12/05(月) 21:33:42.07ID:nEyLAjLt
俺は頑張った
もうこれ以上にわかりやすい説明は無理
誰か変わってくれ
0318デフォルトの名無しさん2016/12/05(月) 21:38:26.70ID:2NaB5jfD
>>317
無理
無知はバカとは思わないがアレは本当にバカってやつだと思う
03192632016/12/05(月) 21:43:39.81ID:oh/e0eB5
オーバロードを誤用するのは別に構わないが、「new. deleteはオーバライドできない」というのは明らかな間違いだから訂正した方がいい。
オーバライドすることなくクラスの new delete を規定の名前なしグローバルのnew, deleteから置き換えることなどできないからだ。
オーバロードとオーバライドの定義をちゃんと理解せずに回答するのはもうやめてもらえるか?
0320デフォルトの名無しさん2016/12/05(月) 21:46:15.11ID:kGsjhS/J
オーバーロードは同じ名前で引数や型引数の違う関数を定義し、静的な型推論で呼び分けること
operator newは型引数と実引数でオーバーロードされた関数
オーバーライドは派生クラスが親クラスの仮想関数の挙動を上書きする事
0321デフォルトの名無しさん2016/12/05(月) 21:49:30.78ID:kGsjhS/J
operator newのやっていることは技術的にはテンプレートの特殊化と同じ
0322デフォルトの名無しさん2016/12/05(月) 21:50:58.52ID:GeoPwQ8R
>>319
あなたにとって
class Base {
  static void doSomething();
};

class Sub : public Base {
  static void doSomething();
};
はオーバーライド?オーバーロード?
0323デフォルトの名無しさん2016/12/05(月) 21:54:27.23ID:ryWJUcx/
オーバーヒート
03242632016/12/05(月) 21:54:33.97ID:oh/e0eB5
>>320
オーバーロードでは、静的な型推論の優先付けできない。
オーバーライドすることにより、はじめて静的な型推論の優先付けが成立する。
まず自分のメソッドを、なければ親のメソッドを辿って探す型推論の優先付け。
0325デフォルトの名無しさん2016/12/05(月) 21:56:27.49ID:nEyLAjLt
オーバーライドは静的でなく動的解決なのですが…
03262632016/12/05(月) 21:58:11.44ID:oh/e0eB5
>>322
少なくともオーバーライドである事は確か。親子関係による優先付けが発生するから。
オーバロードの誤用も可。
0327デフォルトの名無しさん2016/12/05(月) 22:07:57.44ID:rZWSQmpd
  static void doSomething() override;
できるわけないやろw
03282632016/12/05(月) 22:16:44.60ID:oh/e0eB5
各言語仕様としての厳格な定義と、オブジェクト指向における定義が混在している。
0329デフォルトの名無しさん2016/12/05(月) 22:19:29.78ID:nEyLAjLt
オーバーライドはオブジェクト指向と一切関係内が…
0330デフォルトの名無しさん2016/12/05(月) 22:23:15.37ID:kGsjhS/J
直接関係ないのはオーバーロードじゃね
0331デフォルトの名無しさん2016/12/05(月) 22:27:22.59ID:+86vS9TV
「演算子のオーバーロード」で丸暗記しとこうかな‥
03322632016/12/05(月) 22:32:43.25ID:oh/e0eB5
ざっくりいうと、メソッド推論の優先付けを伴わないのがオーバーロード。
親子関係などによるメソッド推論の優先付けを伴うのがオーバーライド。

オーバーライドとオーバーロードは同時に成立しうる。排他的ではない。
0333デフォルトの名無しさん2016/12/05(月) 22:34:17.42ID:x3Qm2Sdl
規格書を見ながら書き込みした方がいい
0334デフォルトの名無しさん2016/12/05(月) 22:36:02.30ID:+86vS9TV
>>332
new から離れていいから,オーバーライドとオーバーロードが同時に成立するコードを見せてくれ
0335デフォルトの名無しさん2016/12/05(月) 22:37:53.65ID:kGsjhS/J
オーバーライドはそれ自体では型推論なぞしないだろうに。
究極的には呼び出し先がインスタンス毎に変わるのだから。
0336デフォルトの名無しさん2016/12/05(月) 22:38:15.95ID:2NaB5jfD
>>334
それは普通に成立するぞ
0337デフォルトの名無しさん2016/12/05(月) 22:41:20.81ID:W20d9Bun
規格にはオーバーロードともオーバーライドとも書いてない

もともと中途半端な動作な訳だからオブジェクト指向的には~とかの議論でさえする意味ないとおもうが

C++は自身のこの機能についてどっちとも言ってない、だからどっちでもないでいいだろ
0338デフォルトの名無しさん2016/12/05(月) 22:48:00.07ID:lQvX1MVr
>>315
厳格な話をするなら規格が必要であって、それはすなわち特定の言語に絞って語らないと無理
0339デフォルトの名無しさん2016/12/05(月) 22:48:07.34ID:+86vS9TV
>>336
オーバーライドは引数の種類が変わらない,オーバーロードは引数の種類が変わる.
だから両立は出来ないはずなんだが
0340デフォルトの名無しさん2016/12/05(月) 22:48:15.59ID:2NaB5jfD
>>337
普通に”Overloaded operators”の中でnew deleteが書かれてるけど
0341デフォルトの名無しさん2016/12/05(月) 22:50:10.06ID:lQvX1MVr
>>315
厳格で言語によらない定義だというなら根拠を示すべきだ。
0342デフォルトの名無しさん2016/12/05(月) 22:51:57.06ID:2NaB5jfD
>>339
俺とお前で両立の定義が違ったかもな
struct A{
virtual void a()=0;
virtual void a(int)=0;
};
これを構築できるように派生したらaはオーバーロードしてるしオーバーライドもしてる。という意味で俺は両立出来ると言った
0343デフォルトの名無しさん2016/12/05(月) 22:52:22.32ID:lQvX1MVr
>>339
いや、一度オーバーロードしたものを(引数の種類は変えずに)サブクラスでオーバーライドすることはできる
0344デフォルトの名無しさん2016/12/05(月) 22:53:46.89ID:nEyLAjLt
>>342
それはオーバーロードであってオーバーライドの例ではない
0345デフォルトの名無しさん2016/12/05(月) 22:54:51.57ID:2NaB5jfD
>>344
構築できるように派生するにはオーバーライドするしかないだろう?
0346デフォルトの名無しさん2016/12/05(月) 22:58:01.25ID:lQvX1MVr
どっちにしてもstaticメンバ関数をオーバーライドなんて語義矛盾だよ。
obj.func(); という式においてobj の動的な型に応じて実際の関数が呼ばれることをオーバーライドと言う。
0347デフォルトの名無しさん2016/12/05(月) 22:58:36.17ID:nBxFX+pd
>>315
><new> をインクルードして グローバルな new や delete を置き換え

置き換えるのにどうしてインクルードが必要なのか
0348デフォルトの名無しさん2016/12/05(月) 23:06:27.98ID:kGsjhS/J
overrideじゃなくhideになるよね
仮想関数でない奴は
0349デフォルトの名無しさん2016/12/05(月) 23:11:21.87ID:nBxFX+pd
>>337
規格の10.3にはoverridesという単語が出てきてかつ斜字体なので用語なのだが何を言っているんだお前は
因みにC++98の時からある
まさか規格にカタカナは書かれていないとでも言いたいのか
0350デフォルトの名無しさん2016/12/05(月) 23:24:58.31ID:Ij/A1A/c
つーか、釣りだろ。
日付変わってID変わったらいなくなるよ。
03512632016/12/05(月) 23:31:31.40ID:oh/e0eB5
>>350
釣ってなどいない。
オーバーロードが既存のメソッドを置き換えできるのは、オーバーライドが行われたから。

>>347
失礼。<new>は必要ない。nothrowの制御と勘違いしてた。
0352デフォルトの名無しさん2016/12/05(月) 23:41:10.21ID:2NaB5jfD
C#でも派生先で同じ名前付けるときoverrideとnewが選べるというのに
03532632016/12/05(月) 23:56:17.43ID:oh/e0eB5
日付変わる前に勝利宣言しとくわ。
0354デフォルトの名無しさん2016/12/05(月) 23:59:54.08ID:kX3Q4svv
今来たけど、「C++の話」をみんなしてる中に「オブジェクト指向一般の話」をしだしたってこと?
抽象化したオブジェクト指向は人によって考え方に差があるから用語の定義とかについて論ずるだけ無駄
0355デフォルトの名無しさん2016/12/06(火) 00:06:10.61ID:QfNOYQI4
人はなぜ
「現象AをBと解釈することもできる。」で満足すべきところで
「AはBだ!」と主張してしまうのか。
0356デフォルトの名無しさん2016/12/06(火) 00:11:44.86ID:VyUdPje1
良くある誤用だから普通に流してレスしてたのにオーバーライドの話してるんだけどと突っかかってきたのはバカの方だからね
0357デフォルトの名無しさん2016/12/06(火) 00:20:55.18ID:ed0lUfqA
オバマが到☆来と聞いてやってきました
0358デフォルトの名無しさん2016/12/06(火) 00:27:15.13ID:Eq2L1D85
>>353 日付変わっても続けられる際はコテハンそのままにするなどしてあなた様からのレスであることを特定できるようにおねがいします。
0359デフォルトの名無しさん2016/12/06(火) 01:02:27.01ID:0b/2xA1k
>>353
さっぱりわからんが、勝利おめでとう!
0360デフォルトの名無しさん2016/12/06(火) 01:14:21.67ID:0b/2xA1k
>>354
オーバーロードやオーバーライドはオブジェクト指向の中で定義されている言葉なのか?
もう、コンピュータサイエンスの言葉としてのオーバーロードやオーバーライドの話
をしているような感じからな
俺、情報系の学科には縁遠いところの出だから、ズバリコンピュータサイエンスの知識
は幼稚園児レベルになるからな。。大学レベルにはほど遠い,orz
(ほんとはコンピュータサイエンスは超重要なんだろうけどな)
0361デフォルトの名無しさん2016/12/06(火) 02:23:43.51ID:PnhmU0S2
大企業なメーカーの工場は規則規則アンド規則で窮屈そうだったわ
0362デフォルトの名無しさん2016/12/06(火) 02:24:21.93ID:PnhmU0S2
誤爆
0363デフォルトの名無しさん2016/12/06(火) 03:02:41.09ID:Wqo8M9+m
昨日は爆釣だったんだな
俺も参加したかったわー
0364デフォルトの名無しさん2016/12/06(火) 04:15:23.89ID:8D/vbLGJ
オーバーロードの総集編が映画化されるらしいな
誰が見に行くんだろうな
0365デフォルトの名無しさん2016/12/06(火) 05:01:33.51ID:ig7i7qkA
cの関数ポインタみたいに関数オブジェクトの配列を実行時に動的に変えて実行するにはどうすれば良いのでしょう
Boost使えばc++11のlambdaが使えなくても出来ますか?
0366デフォルトの名無しさん2016/12/06(火) 07:58:54.09ID:qXZeYWw/
>>365
関数オブジェクトを引数にとる関数はテンプレートであり、関数オブジェクトの型ごとに別々の関数としてコンパイルされるのでファイルサイズも大きくなる。
配列で実行したい場合は、基底クラスのpublicな仮想関数を実装した派生クラスのインスタンスをテンプレートでない関数に参照なりポインタなりで渡すといい。
0367デフォルトの名無しさん2016/12/06(火) 08:04:00.59ID:EqtjFn+M
>>365
std::function
0368デフォルトの名無しさん2016/12/06(火) 13:32:25.71ID:QJVgZbOV
>>365
その制約はどこからくるの?
0369デフォルトの名無しさん2016/12/06(火) 13:33:39.26ID:S+t491v8
なんで質問に質問で返すかね
0370デフォルトの名無しさん2016/12/06(火) 13:42:09.34ID:MylKYtcA
>>369
要件出し全否定か
0371デフォルトの名無しさん2016/12/06(火) 13:43:39.76ID:S+t491v8
>>370
>>365の仕様を>>368が実装するわけじゃないのでその反駁は無意味
0372デフォルトの名無しさん2016/12/06(火) 14:07:32.78ID:QJVgZbOV
単に「不思議な制約だなあ」と思っただけで他意はないよ
0373デフォルトの名無しさん2016/12/06(火) 14:09:34.92ID:Y8nBMTUH
ちょっと試してみた
std::bindとstd::mem_fnは面倒っちいけどメンバ関数のポインタだから仕方ない

http://ideone.com/91JDrF

この場合std::unique_ptrはコピーコンストラクタがdelete指定になっているので使えない
0374デフォルトの名無しさん2016/12/06(火) 16:04:03.46ID:EzooQ0Q1
結局は関数ポインタなのか
関数オブジェクトの配列は各要素がnaitiveコード列かと思った
0375デフォルトの名無しさん2016/12/06(火) 20:10:27.18ID:QJVgZbOV
Advent
0376デフォルトの名無しさん2016/12/06(火) 20:15:35.52ID:ndfTDeJn
shared_ptrを使う奴は大馬鹿
ということだな
0377デフォルトの名無しさん2016/12/06(火) 21:42:11.99ID:7XmOARyR
>>376
お前アスペか?unique_ptrを使ってみたところbindでエラーが出たから
仕方なくshared_ptrを使ったってことだろ
生ポインタでも当然構わない

http://stackoverflow.com/questions/20268482/binding-functions-with-unique-ptr-arguments-to-stdfunctionvoid
http://qiita.com/rinse_/items/2873fa75e63153dd6f85

こういう件もあるしいろいろ面倒なんだろ
でも少し考えてみると当然なんだよな
関数にunique_ptrを渡すと所有権が呼び出し先に移ってしまいいろいろ面倒なことになる
03783662016/12/06(火) 21:52:31.40ID:qXZeYWw/
私は>>366 を書いた者だが、>>367 のstd::functionが正解。>>366は古い解決方法。
std::bindとstd::mem_fnは必要ない。当然、shared_ptr も必要ない。

http://ideone.com/q8ngfp
0379デフォルトの名無しさん2016/12/06(火) 22:10:33.84ID:ltofPI3U
>生ポインタでも当然構わない

ナマポで構わないところにshared_ptrを持ち出すことが不適切と言われている
という認識には至らなかったようだ
0380デフォルトの名無しさん2016/12/07(水) 02:07:23.12ID:GZUHYq4p
>>379
いやだからさ・・・classをnewしなきゃらならないでしょ今回の場合
誰がdeleteするかって話をしてるんだが
deleteが面倒だからスマポ使ったわけでしょ
0381デフォルトの名無しさん2016/12/07(水) 02:13:54.48ID:GZUHYq4p
ごめん本当だ
new不要だなこれ

http://ideone.com/AeaHf4
0382デフォルトの名無しさん2016/12/07(水) 03:19:04.95ID:ujGMInBH
>Boost使えばc++11のlambdaが使えなくても出来ますか?
c++11が使えなくてBoostでって話ならboost::functionあたりで適当に
0383デフォルトの名無しさん2016/12/07(水) 10:13:47.80ID:aRBhCK1g
質問です。
winsock2でTCP IP通信をするプログラムを勉強しているのですが、
クライアントプログラムを立ち上げていないのにも関わらず、listen(serverSock,5);の戻り値が0になります。
なぜでしょうか?listen(serverSock,5)の引数を間違えているのでしょうか?
また、listen関数のタイムアウト時間は何秒程度に設定されているのでしょうか?
開発環境はVS2015,VC++です。必要があれば追記します。
0384デフォルトの名無しさん2016/12/07(水) 10:51:22.83ID:eOxcQ614
接続待ちの開始なんだから、クライアント立ち上げる前に
0(成功)になって正しいんじゃ?
03853832016/12/07(水) 12:50:14.65ID:aRBhCK1g
acceptが実際に受付待ちをするみたいでした。
勘違いしていました。ありがとうございます
0386デフォルトの名無しさん2016/12/07(水) 18:15:44.93ID:+0olbaDa
受付待ちという表現がいまいちだな
listenしたら受け付けはオペレーティングシステムが行う
アプリが固まっていてもクライアントからの接続要求は処理される
acceptは接続をオペレーティングシステムシステムから受け取るだけ
接続要求がなければ無期限に待つ
0387デフォルトの名無しさん2016/12/07(水) 18:37:28.05ID:1BXK2gQc
初学者はC++をやるまえにCを触っておいた方が良いのでしょうか?
03883832016/12/07(水) 18:47:21.59ID:aRBhCK1g
>>386
勉強になりました。ありがとうございます
0389デフォルトの名無しさん2016/12/07(水) 19:05:18.68ID:iM29S6qT
>>387
「やるまえ」でなくても、同時でおk
同時でCだけでなくアセンブラも必要
0390デフォルトの名無しさん2016/12/07(水) 19:22:50.32ID:lJ3XWqgd
話蒸し返して悪いけど
>>286は間違っているからね
GDIplusのBitmapをmake_sharedしても問題ない

make_sharedはグローバルなアロケーターを使ってBitmapを確保するし
また、グローバルなアロケーターを使ってdeleteするから
整合性は保たれる
Bitmapは基底クラスにGDIplus独自のnew/deleteを持っているけど
make_sharedした場合は、これらは使われない
だから問題は起きない
Bitmap::FromFileのように、DLL内でBitmapをnewしてナマポを返す場合
クラス定義のdeleteを使わなければならないが
Bitmapの生成時にmake_sharedを挟み込む余地はないので
初めっから使えないし、問題は起きない

Bitmap::FromFileのように、DLL内でBitmapをnewしてナマポを返す場合
使い手が自分でdeleteするわけだけど、この時、DLLとアプリの間で
new/deleteが不一致になったらマズいので、自前のdeleteが定義してある
普通に delete bitmap; としても問題が出ないようにね
で、deleteを独自のものにしたのなら、newも独自のものに定義しとかないとマズいよね
ってことで、newも独自なものに定義してある

普通にnew/deleteした場合や、ナマポをshared_ptrに入れた場合は
クラス定義のnew/deleteが使われるので、これはこれで問題がない

常に確保した時と同じ方法で解放されるので問題が起きないって理屈
0391デフォルトの名無しさん2016/12/07(水) 19:26:27.65ID:lJ3XWqgd
ちょっとアレな部分を補足しておく

>Bitmap::FromFileのように、DLL内でBitmapをnewしてナマポを返す場合
>クラス定義のdeleteを使わなければならないが
>( Bitmap::FromFile内部で行われる )
>Bitmapの生成時にmake_sharedを挟み込む余地はないので
>初めっから使えないし、問題は起きない
0392デフォルトの名無しさん2016/12/07(水) 19:39:19.41ID:1BXK2gQc
>>389
ありがとうございます
0393デフォルトの名無しさん2016/12/07(水) 19:52:06.31ID:Ao5egMeL
C++の仕事してて、
アメリカ人やイギリス人の
作ったプログラムを
よみながら直してるけど
さっぱりわかりません。

とりあえず見るのが20万ステップで
ドキュメントはないです。
ささやかなコメントが頼りです。

勉強しながら見てますけど
どう見てもぐちゃぐちゃです。
もう辞めたいです。
つか辞めます。
0394デフォルトの名無しさん2016/12/07(水) 20:20:42.25ID:2yTgyuYL
正直なところ、>>390,391にある「DLL内でBimapをnewする」という説明が何に基づくのか分からない。
問題あるかどうかはクラスを提供するマイクロソフトが判断すること。
ヘッダーを見る限りvoid* 型別名 GpImage* のポインタが返されてることだけがわかる。
>>390,391がマイクロソフト社のソースを実際に見て確認したのなら信頼していいだろう。
0395デフォルトの名無しさん2016/12/07(水) 20:35:25.36ID:pN2ME9Zl
>>390
Gdiplusが配置newを使ってるせいでDEBUG_NEWが使えなくて面倒くさいなと思っていたが、
そんな理由だったのか。
いままでnew/deleteの問題があるからDLLのインターフェースはどうしてもC++っぽくない形に
せざるを得なかったんだけど、そんな手も使えるんだな。参考になった。
0396デフォルトの名無しさん2016/12/07(水) 20:37:31.13ID:2yTgyuYL
クラス独自の new/delete が呼ばれずじまいなことが正しいかどうかって話してたのに、またもやズレた話になってきた印象。
>>390,391が情報源を示してくれれば、ある程度の説得力は得られるだろうが、
この人は、delete とデストラクタを混同して語っている気がしてならなない。
0397デフォルトの名無しさん2016/12/07(水) 20:48:59.93ID:2yTgyuYL
長文ででたらめ書く人って何なの? >>395みたいに鵜呑みにする人出てくるし。
0398デフォルトの名無しさん2016/12/07(水) 20:51:11.20ID:uSFo19YS
お、すぐ出てきたなw
0399デフォルトの名無しさん2016/12/07(水) 20:55:48.50ID:uSFo19YS
newオーバーライド君、最後の方ネタに見せかけて逃げたと思ってたけど、まだ理解してなかったとは救いようがないな。
0400デフォルトの名無しさん2016/12/07(水) 21:03:14.74ID:pN2ME9Zl
でたらめなのか。>>390で間違ってるのはどっち?それとも両方?
・Gdiplusはそんなことしていない
・自前のnew/delete定義でもDLL境界の問題を隠蔽することはできない
0401デフォルトの名無しさん2016/12/07(水) 21:17:36.98ID:uSFo19YS
>>400
gdiplusbase.hでググれば
0402デフォルトの名無しさん2016/12/07(水) 21:17:42.26ID:2yTgyuYL
このスレに書き込んだ人は自身のソースレビュー能力を晒すことになる。
このスレがワッチョイ非対応であることを八百万の神に感謝し、今日という日が終わるのを待て。
0403デフォルトの名無しさん2016/12/07(水) 21:21:58.54ID:KapaWVji
学会なら追放ものだよ
0404デフォルトの名無しさん2016/12/07(水) 21:31:26.04ID:uSFo19YS
>>400
あと、newオーバーライド君はnew deleteのDLL境界の問題について一ミリも理解してないし、理解する気もないみたいだから聞いても仕方ないよ
0405デフォルトの名無しさん2016/12/07(水) 21:36:23.67ID:lJ3XWqgd
>クラス独自の new/delete が呼ばれずじまいなことが正しいかどうかって話してたのに、
>またもやズレた話になってきた印象。

Bitmap bmp(〜);
とした場合はどうなんだねチミ
この場合はクラス定義のnew/deleteは呼ばれないぞ
スタック上に作ることがOKなら
クラス定義のnew以外の方法で確保した領域にBitmap置くのも自由だろ
メモリ確保/解放の整合性さえあってればな
スタックがOKでmake_sharedがダメな理由がどこにある?
0406デフォルトの名無しさん2016/12/07(水) 21:47:16.13ID:5VlRXYq6
>>402
一対多で勝利を収めた方ですよね?その偉業と名声を語り継ぐべくコテハン付けるべきだと思います!
この人の言葉なら… と周囲からの反応も違った物になると思いますので。
0407デフォルトの名無しさん2016/12/07(水) 21:50:16.54ID:2yTgyuYL
>>405
>スタックがOKでmake_sharedがダメな理由がどこにある?

それを言い出すとクラス独自なnew/deleteの存在意義を否定することになるけど、
それでいいかどうかはクラス利用者ではなくクラス設計者が判断すべきことじゃないかな。
あなたがあえてマイクロソフトに代わってGDI+クラスを保守サポートする覚悟があるなら、ぜひ勝利宣言なさってください。
0408デフォルトの名無しさん2016/12/07(水) 21:57:37.18ID:lJ3XWqgd
ではこうしようか?
new/deleteを独自定義しているhoge_tクラスがあったとしよう

struct piyo_t
{
  int reference_counter;
  hoge_t hoge;
};
auto piyo = new piyo_t;

この場合、hoge_tで独自定義したnew/deleteは呼ばれないが、これはどうするんだ?
C++はこーゆー入れ子の構造体を認めているし
実際make_shared内で起こっていることもコレなわけ
これを一切禁止するときは、コンスラクタ/デストラクタを隠す
逆にコンストラクタ/デストラクタが公開されているということは
こーゆーのを認めているということ
0409デフォルトの名無しさん2016/12/07(水) 22:08:01.19ID:lJ3XWqgd
>それを言い出すとクラス独自なnew/deleteの存在意義を否定することになるけど、

何故そうなる?
存在意義は>>390で書いた
new/deleteで不整合が発生しないようにするため

>それでいいかどうかはクラス利用者ではなくクラス設計者が判断すべきことじゃないかな。

コンストラクタが公開されている以上、どこに生成するかはプログラマの自由
スタックがOKなのにmake_sharedがダメな理由など無い
ただし、DLL内で生成されたものに関しては、クラス定義のdeleteを使ってくださいってだけ
0410デフォルトの名無しさん2016/12/07(水) 22:08:12.80ID:2yTgyuYL
>>408
私ではなくhoge_tクラス設計者にご確認のうえ、勝利宣言をどうぞ。
0411デフォルトの名無しさん2016/12/07(水) 22:16:10.80ID:uSFo19YS
普通に考えてクラスのメンバーに出来ないとかそんな致命的な制限があるならドキュメントに書いてあるから。
0412デフォルトの名無しさん2016/12/07(水) 22:30:57.55ID:2yTgyuYL
コンパイルが許可されたのだから安全性も担保されたことにしようという、大胆な提案ですね。よくわかります。
0413デフォルトの名無しさん2016/12/07(水) 23:37:18.51ID:lJ3XWqgd
>>411も言っているが、もしできないのなら、ドキュメントに書いてあるはず
コンストラクタを公開しているのに
スタックには作れません、構造体で入れ子にできません、make_sharedは使えません
っていうんなら、ドキュメントに書いておかないと最大限マズイ
だからお前はMSDNを漁ってmake_sharedが使えないって文章を探してこい
書かれてない場合は通常の発想、使えるってこと
0414デフォルトの名無しさん2016/12/08(木) 00:28:40.63ID:Dl6k+dfy
MSDNではスタックに構築してるサンプルだらけだから、少なくともスタックには構築できる。
そしてスタックのアドレスの範囲を決めうちし、それ以外のアドレスに構築されたら故意に不具合が発生するような実装をしない限りスタック以外に構築しても問題ない。
そんなアホみたいな実装をしているという大胆な主張ですね。わかりません。
0415デフォルトの名無しさん2016/12/08(木) 09:22:15.11ID:V15cSFDl
気楽な問題
glslのような、スウィズル文法をC++で定義することはできるか?
glslの例
float3 v = float3(1,2,3);
float3 y = v.yyy; // y = (2,2,2)
実用上、float3クラスに余計な成分は持たせたくない
class float3{public : float x,y,z; ...(?)...};
(全てのスウィズルに対応する成分をもたせることで可能だが、消費するメモリ量が組合せ爆発を起こす)
逆に、メモリが増えなければ成分は持たせてもよいから
サイズ0の中間クラスを定義してそこからキャストすればできそうな気がしたがどうだか?
0416デフォルトの名無しさん2016/12/08(木) 09:43:44.17ID:f999g3ye
>>415
struct A{};
sizeof(A)==1
だから。
やるとしたら
struct XXX{float x,y,z;operator vec3(){return vec3(x,x,x);}}
のような型を(3要素だけなら)27通り作ってunionで持たせるとか。
0417デフォルトの名無しさん2016/12/08(木) 09:48:16.18ID:V15cSFDl
>>416
ああvec3でしたな
あとunion という手がありましたねえ
考え直してみます
0418デフォルトの名無しさん2016/12/08(木) 13:31:27.61ID:iaOJa8zn
その文法だとなんかしらを27通り書く必要が出てくる

C++ならC++らしく書くべきじゃん

https://ideone.com/N697kB
0419デフォルトの名無しさん2016/12/08(木) 13:38:19.98ID:vGsZ5jRR
それEffective Modern C++にも載ってたな
templateのインスタンス化を利用してメンバの組み合わせをコンパイル時に決定するのもあった
0420デフォルトの名無しさん2016/12/08(木) 13:40:05.12ID:vGsZ5jRR
ついでに

typedef float float3::*member_type;

を

using member_type = float float3::*;

と書いても同じだね
0421デフォルトの名無しさん2016/12/08(木) 13:53:59.18ID:dGX7aDi+
>>418
その書き方は使う方が流石に面倒すぎて無くない?
0422デフォルトの名無しさん2016/12/08(木) 13:57:52.40ID:vGsZ5jRR
>>421
わかってないなあ
もし3^3通りでなくて10^10通りだったらどうなるかって話なのに
0423デフォルトの名無しさん2016/12/08(木) 14:00:52.41ID:dGX7aDi+
>>422
それでも
float3 b(a.x,a.z,a.z);
の方が書くの楽なのは本末転倒だと思うよ
0424デフォルトの名無しさん2016/12/08(木) 14:11:00.32ID:WXYhvZot
やりたいことはglslコードの流用なので
最大でも4^4通りです
パターン化できれば書き出しは別にプログラムすればいいと思っています
今>>416案でできそうな詰まりそうな感じです
0425デフォルトの名無しさん2016/12/08(木) 14:22:13.82ID:vGsZ5jRR
>>423
この場合はな
メンバ関数を含んでたりしたらまた違うんだよ
そういう場合constexprの威力を感じる
C++11はconstexprの用途が大幅に制限されてたのがC++14で目覚めたしな
unionも目覚めたんだぜ
0426デフォルトの名無しさん2016/12/08(木) 14:52:06.28ID:iaOJa8zn
>>423
そっちより短くしてやったぜ
https://ideone.com/N697kB
0427デフォルトの名無しさん2016/12/08(木) 19:55:50.56ID:Oqc+z4pd
右辺値参照、ムーブセマンティックス、完全転送についてまとまってるページないかな
Effective Modern C++の訳がひどすぎる
0428デフォルトの名無しさん2016/12/08(木) 19:59:18.54ID:nWlkNCgu
流れ読んでないけどこういうのは?
https://ideone.com/OwnhEG
メンバのx, y, zがメモリ上で連続してるかどうかは保障されてないんだっけ?
0429デフォルトの名無しさん2016/12/08(木) 20:28:22.34ID:NkEermSo
>>427
http://thbecker.net/articles/rvalue_references/section_01.html
0430デフォルトの名無しさん2016/12/08(木) 22:06:28.35ID:eMOVQdLS
>>429
おっこれ良さそう。ありがとう
0431デフォルトの名無しさん2016/12/08(木) 22:43:09.13ID:ZbTHf5IN
EASTL、使ってるけど、いいね。おススメできる。
わりと速いし、stdのSTLを使った実行ファイルよりもファイルサイズが小さくなるし。
0432デフォルトの名無しさん2016/12/08(木) 23:03:53.33ID:mq/wDsmO
STL2.0の登場が求められる
0433デフォルトの名無しさん2016/12/08(木) 23:34:38.83ID:UAmWCZIj
>>428
どうして保証されると思った?
0434デフォルトの名無しさん2016/12/09(金) 00:35:55.63ID:5DBzrJdL
eastlは早いけど中身見たときにstdみたいに表示されないのが残念
stdみたいに見る方法あれば完璧
0435デフォルトの名無しさん2016/12/09(金) 05:35:34.69ID:b9kIASzF
>>434
試してないがVisual Studioだったら autoexp.datを編集すればいける気がする

ttps://msdn.microsoft.com/ja-jp/library/zf0e8s14.aspx

ttp://blogs.wankuma.com/melt/archive/2007/10/01/98927.aspx
0436デフォルトの名無しさん2016/12/09(金) 05:45:05.45ID:b9kIASzF
>>435
公式のがあったわ
https://github.com/electronicarts/EASTL/blob/master/doc/AutoExp.dat
0437デフォルトの名無しさん2016/12/09(金) 09:17:44.85ID:inf5Yz5x
>>435-436
ありがとう
これで無敵な気がする
0438デフォルトの名無しさん2016/12/09(金) 09:51:47.55ID:wyGLW805
現在のVisual Studioは、XML形式のNatvis フレームワークでデバッグ時データ表示の指定するらしい。
VS2017RCにはautoexp.datがないのでNatvis一択っぽい。


ネイティブ オブジェクトのカスタム ビューの作成
https://msdn.microsoft.com/JA-JP/library/jj620914(v=VS.140,d=hv.2).aspx
04394352016/12/09(金) 10:31:55.44ID:9P/5Un1M
>>438
訂正サンクス
0440デフォルトの名無しさん2016/12/09(金) 17:02:16.15ID:iZKXxh2B
出遅れ感満載だが
>>415が最近やったことなんで自分のやり方
http://ideone.com/33POAz

a.xy とか a.xxx とかを括弧なしでやろうとしたのでメンバ関数の数はえらいことになるけどGLSLと同じ書き方ができる
xyとかxyzとかyzwとかは左辺値にも出来るお

あとswizzle関数は可変長テンプレートでまとめることも一応できる

無名共用体で別の名前で参照するコードが混在するのはパフォーマンス的にはよくないらしいけど
0441デフォルトの名無しさん2016/12/09(金) 18:23:14.01ID:wsqzeERH
>>440
マクロで大量にグローバルな名前汚すのはちょっとな…
0442デフォルトの名無しさん2016/12/09(金) 19:04:38.52ID:iZKXxh2B
>>441
括弧を不要にして大量のマクロか、括弧必要にしてxyz()みたいな形か、利用者が選べるようにはしてる
まぁそもそも280かそこらのメンバ関数が作られるんでpch使いたくなるけど・・・

xy, xxxとかの書き方をあきらめればswizzle<1, 2, 0>()みたいな単一のメンバ関数テンプレートにまとめられるとは思う
左辺値になるものと右辺値のみのものを両方作れるかどうかは不明
0443デフォルトの名無しさん2016/12/09(金) 19:14:50.35ID:wyGLW805
>>435-436 の方が知らせてくれたネイティブ オブジェクトの件、新旧両方対応してるっぽいね。
VS2017RCでEASTL.natvisを使うことでネイティブ オブジェクトのカスタム ビューが機能することを確認できた。
以下 natvisファイルを 開発環境の \Common7\Packages\Debugger\Visualizersディレクトリに入れればOK。
https://github.com/electronicarts/EASTL/blob/master/doc/EASTL.natvis

余談だが、Visual Studio CodeのC/C++拡張パッケージもnatvisファイルによるデバッガ支援に対応しているらしく、
以下に示したユーザープロファイルのフォルダにnatvisファイルが配置されているのがわかる。
%USERPROFILE%\.vscode\extensions\ms-vscode.cpptools-0.9.2\debugAdapters\vsdbg\bin\Visualizers
0444デフォルトの名無しさん2016/12/09(金) 20:22:28.59ID:Xrkhmoyj
>>433
保障されているともいないとも思ってないよ
最初から配列使っとけばよかったね
http://ideone.com/Sz1fP4
0445デフォルトの名無しさん2016/12/09(金) 20:38:44.65ID:EUMrXHYZ
ゼロオーバーヘッド以外受け入れられない
0446デフォルトの名無しさん2016/12/09(金) 21:05:10.62ID:wsqzeERH
>>444
アクセス指定子が同じであれば連続するから
0447デフォルトの名無しさん2016/12/09(金) 22:24:22.58ID:RdgUgAki
>>415
http://melpon.org/wandbox/permlink/UirL2gCU10W6t5Z3
0448デフォルトの名無しさん2016/12/09(金) 22:50:57.81ID:3Hvgn27V
>>446
ソースは?
0449デフォルトの名無しさん2016/12/09(金) 23:07:53.41ID:iZKXxh2B
>>447
えぐいなこれ・・・w
理解に苦労したけど要するに関数呼び出しでなく、暗黙のキャストで構造体にswizzleを実行させてるのね
415じゃないけど有難く使わせてもらおう
0450デフォルトの名無しさん2016/12/09(金) 23:17:49.70ID:wsqzeERH
>>447
方法論は >>416 と一緒だね
それをBoost.Preprocssorで実装してる。
0451デフォルトの名無しさん2016/12/09(金) 23:21:00.61ID:wsqzeERH
>>448
自分で規格読め
0452デフォルトの名無しさん2016/12/09(金) 23:40:19.73ID:1bTr9oX7
規格読まずにデタラメ言いました
って言えばいいのに…
0453デフォルトの名無しさん2016/12/10(土) 00:53:02.38ID:6N2vubn2
アラインメントの問題とかあるんじゃないの?
32bit/64bit環境の違いも影響するだろうし

ILP64環境でlong a b c;なら連続するんじゃね(すっとぼけ)
0454デフォルトの名無しさん2016/12/10(土) 06:21:03.18ID:RDLcPD4m
>>453
アラインメントの問題なら配列でも同じように配置される。

規格上はデータメンバーの順番は定められてはいるが間のパディングについては定められていない
実際多くのコンパイラでpragma packでパディング入れ方を制御できる。
ただアラインメントの問題も無いのにパディング入れる理由もないしデフォルトでそんな事する処理系も存在しないだろうから考慮しなくていいんじゃね。
0455デフォルトの名無しさん2016/12/10(土) 08:18:46.73ID:0wqqV0ls
ローカル変数のスタック順が定義順だと思い込んでて移植でバグ出したこと思い出した
0456デフォルトの名無しさん2016/12/10(土) 08:30:52.62ID:sVZRaydg
ということは現在でもローカル変数は全てスタックだと信じているのですね
0457デフォルトの名無しさん2016/12/10(土) 09:04:34.24ID:FMtwqCBj
江添はなんて言ってる?
0458デフォルトの名無しさん2016/12/10(土) 09:18:41.66ID:sVZRaydg
>>446
>アクセス指定子が同じであれば連続するから

アクセス指定子?
オツムの進化がC++03で止まっているハゲに騙されたのだろうか
0459デフォルトの名無しさん2016/12/10(土) 10:46:24.06ID:RDLcPD4m
C++の知識を豊富に持っているとしてもこんな奴にはなりたくないな
0460デフォルトの名無しさん2016/12/10(土) 14:15:18.10ID:SiBj5VPE
きっとネットで人格変わってるだけなんだろ
リアルでは普通に違いない
0461デフォルトの名無しさん2016/12/10(土) 14:42:33.83ID:Cln915zj
規格を示さずソースが脳内ならなんとでも言える
0462デフォルトの名無しさん2016/12/10(土) 20:01:22.25ID:RDLcPD4m
ネットで人格が変わるってのが何の免罪符になるというんだ
0463デフォルトの名無しさん2016/12/10(土) 22:18:07.27ID:eJ00H2ua
まあそーだな
だが俺もID:RDLcPD4mみたいにはなりたくないな
0464デフォルトの名無しさん2016/12/10(土) 23:13:30.46ID:RDLcPD4m
>>463
へぇ、具体的にどんな所が?
0465デフォルトの名無しさん2016/12/10(土) 23:46:10.91ID:eJ00H2ua
>>464
リアルでもわざわざ人にくってかかんのか?
お前も同類
0466デフォルトの名無しさん2016/12/10(土) 23:49:19.28ID:RDLcPD4m
>>465
行動が矛盾しすぎだろw
0467デフォルトの名無しさん2016/12/11(日) 01:32:59.58ID:MKBClLrx
江添はなんて言ってる?
0468デフォルトの名無しさん2016/12/11(日) 10:11:52.76ID:V6KbZEV0
アカデミックな対話では、論は論で人格とは独立した存在
論に属人性を持ち込もうとする低劣な輩には参加資格がない
0469デフォルトの名無しさん2016/12/11(日) 10:22:18.26ID:vFkR62Wj
>>468
いや明らかに間違っていることを強弁してる場合性格を疑うが
0470デフォルトの名無しさん2016/12/11(日) 10:25:39.87ID:/H9INus/
>>469
>明らかに間違っていることを強弁
ってどのレスのことよ
0471デフォルトの名無しさん2016/12/11(日) 10:50:57.60ID:28MCt8dd
>>469
自分はアカデミックな対話は出来ませんっていう自己紹介?
0472デフォルトの名無しさん2016/12/11(日) 10:56:25.56ID:ZUXzDC9z
中身のない人格攻撃的なケンカをするならよそのスレでやってくれ。
それはそうと、EASTL 3.05.00 リリース

https://github.com/electronicarts/EASTL/releases/tag/3.05.00
・Implemented eastl:string_view, a non-owning string type that isn't templated on an allocator making it suitable for use at API boundaries.
 http://en.cppreference.com/w/cpp/string/basic_string_view
・Adding support for typed get for tuple (e.g. get(tuple& t)).
・CoreAllocatorAdapter::operator= now copies the allocator name.
・Fixed strict-aliasing issues in the eastl::intrusive_list implementation.
・Adding move semantic guards around test code requiring that language feature.
・Improving eastl::vector implementation to move elements (instead of copying) during a resize.
0473デフォルトの名無しさん2016/12/11(日) 11:37:08.38ID:ZUXzDC9z
>>472 のコピペ内容に出てきた basic_string_view とはなんぞ?と思ったら、
固定バッファに対して basic_stringに似た機能を扱うためのアロケーターなしクラスだったか。
なるほど今までなかったのが不思議なほどだ。
GCCでは試験的にヘッダーファイルでbasic_string_viewが提供されているが、VisualStudioではまだ提供しないようだ。
VisualStudioでbasic_string_viewを試したければ、boostかeastlを使うことになるのかな。
0474デフォルトの名無しさん2016/12/11(日) 12:43:26.39ID:/H9INus/
正式版じゃないけど試したいなら17RC入れとけ
2015でもnugetにあったような気がするけど
0475デフォルトの名無しさん2016/12/11(日) 13:18:35.08ID:vQQtrq1F
basic_string_viewはC++17に追加されるやつだね
EASTLは次期規格にも積極的だな
0476デフォルトの名無しさん2016/12/11(日) 21:28:51.79ID:NV+vmDfg
このスレは意地悪だよね。
0477デフォルトの名無しさん2016/12/11(日) 21:32:13.90ID:NV+vmDfg
相談室だから優しくしてよ。
0478デフォルトの名無しさん2016/12/11(日) 23:09:46.00ID:28MCt8dd
コードと同じで多く語ると間違いがはいりこみやすくなるからね。
だから説明は全くしないチキンが多いのよ。
それに罵倒が入るのは何も具体的な事は語らない安全な位置だから反撃来ないだろうと思ってるんだろうね。
端的に言うと他人を攻撃する事にしか興味の無い奴が居座ってる
0479デフォルトの名無しさん2016/12/11(日) 23:17:03.44ID:6HZEdd7M
へー、そんな奴がいるのか
どちらかというと嘘を平気でつくから指摘を受けるのだと思っていたが
0480デフォルトの名無しさん2016/12/11(日) 23:47:20.99ID:yhEzNFx3
何も具体的な事は語らない安全な位置だから
反撃来ないだろうと思ってるクズは死すべし
間違いが入らないよう全く説明しないけどエスパーしろって?
0481デフォルトの名無しさん2016/12/11(日) 23:53:11.96ID:VXRcpztN
てかこのスレ糞な質問者が大杉
エスパーして頑張って答えた奴に対して労いどころかダメ出しする始末

自演なのかわからんが、質問者と一緒になって回答者煽るのが出るのも、まともな回答者が寄り付かない原因
0482デフォルトの名無しさん2016/12/11(日) 23:57:45.43ID:28MCt8dd
>>481
それも具体的な事は何も語らず安全な位置から他人を攻撃する奴だね。
0483デフォルトの名無しさん2016/12/11(日) 23:58:42.93ID:yhEzNFx3
質問者本人が堂々と煽ってることおおいし
0484デフォルトの名無しさん2016/12/12(月) 04:00:54.66ID:nqvHYcKk
バカはレスしないでくれる?
個人の主張として批判せず、いたずらにある類として扱うのは極めて恣意的かおバカの批判にあらざる攻撃の特徴。
まあ、その軽蔑すべき発想で返した俺も反省はしてもよいが
はっきり言って精神病とバカの特徴でしかない論法でレスするなよ。
俺はバカと精神病きらいだからな。
おまえら、マジで精神病と思われる宣言的絶対主義の形而上学バカの一味は人類の公的な敵だとおもっているからな。
さしあたりお前らが馬鹿にされていることは科学的認識の健全性をそれなりに示すから喜ばしいがな。

それにしても、単なる知識を披露しあっているだけの時は頭良さそうなふりはできるが、
いよいよ自身の認識を問われる事態になるとここにいる連中、そこの浅さを露呈するやつ多すぎ
所詮、2chだな
0485デフォルトの名無しさん2016/12/12(月) 04:23:26.60ID:wAsQV1H6
>>475
何故かEASTLに関してはSTLは化石と言い張る連中が出てこない不思議
奴らも認識を改めたのだろうか
0486デフォルトの名無しさん2016/12/12(月) 07:26:08.62ID:QGPJ2cbM
>>484
何かのコピペ?
0487デフォルトの名無しさん2016/12/12(月) 07:28:00.97ID:BFgije+s
>>485
「EASTLあるよ」
 ↓
「STLなどというものは規格にない」
 ↓
「いきなり関係ないことを言い出してどうした。EASTLの話なのにSTLとかイミフ」
0488デフォルトの名無しさん2016/12/12(月) 07:35:32.89ID:Wpm6TEVI
>>486
コピペなのか?。これぞまさしく2ch住人の鑑ってカキ込みに笑ったよ
激早朝に必死コピペ・長文カキコは2chの鑑じゃないとできないよな
0489デフォルトの名無しさん2016/12/12(月) 07:53:47.40ID:u9yJk1Sj
「バカはレスしないでくれる?」で始まる書き込みは
C/C++のスレッドで何回か見たから定型文なのかもしれないね。
それぞれ独自のアレンジを加えてるのかもしれないけど詳しく見ない。

質問に対しては正しい回答をするのが望ましいけど、
「それは間違ってる」「どうしてそう思った?」みたいな
間違いであることの指摘だけの反応は歯がゆいね。
じゃあ何が正しいんだよ? と思っても「規格を読め」という
万能かつ追加情報量ゼロの答えしか返らないことが多いし。
0490デフォルトの名無しさん2016/12/12(月) 08:08:33.31ID:wAsQV1H6
>>489
間違ってるという指摘だけならまだいいよ。
「どうしてそう思った?」なんてそんな感じの意図を含ませてるだけで間違いの指摘ですらないし
0491デフォルトの名無しさん2016/12/12(月) 08:09:45.74ID:BFgije+s
>>489
>じゃあ何が正しいんだよ? と思っても
そこはフツー、規格を読み直して確認してみるだろ
知ってるなら言えよとは思うけど
0492デフォルトの名無しさん2016/12/12(月) 09:38:58.53ID:wAsQV1H6
間違ってたら一言ごめんなさいでいいんだよ。間違えて取り返しのつかないような事になるわけでもないし、そんな正確性まで誰も匿名掲示板に求めてない。
それを鬼の首取ったかのように責め立てて人格まで否定して、間違いを言いづらい空気を作って。
そんな空気だから間違えるわけにはいかないのか罵倒するやつは自分でも大抵何も説明しない。こうなると行き着く果ては何か解るよね?
まぁ、こういう場を潰したい、もしくは単に他人を攻撃したいだけというのであればそういう行動も理解できるが。
0493デフォルトの名無しさん2016/12/12(月) 10:21:45.81ID:zVjVBBEL
横柄なデタラメ回答者がいなくなれば平和になるんだがなぁ。
善意による回答であろうとも、間違いは間違いなのだから訂正して取り下げるのが回答者のあるべき姿。
「たとえ間違っていようとも、俺の善意を受け入れろ」みたいなのは絶対ダメ。技術板では特に。
0494デフォルトの名無しさん2016/12/12(月) 10:22:57.83ID:+gwThOjs
>>492
> それを鬼の首取ったかのように責め立てて人格まで否定して、間違いを言いづらい空気を作って。
よくわかんないんだけど、たとえばどのレスのこと言ってるの?
0495デフォルトの名無しさん2016/12/12(月) 10:28:51.18ID:wAsQV1H6
>>494
いちばん最近だと
ID:sVZRaydg
とか
0496デフォルトの名無しさん2016/12/12(月) 10:57:55.60ID:+gwThOjs
>>495
こんなの無視か「ちょっと何言ってるかわからない」ぐらいでいいと思うんだけどな。
0497デフォルトの名無しさん2016/12/12(月) 11:20:15.49ID:+gwThOjs
>>492
この主張を ID:sVZRaydg のレス先である ID:wsqzeERH を見ながら考えるに、
ID:sVZRaydg は無視すれば済むいっぽうで ID:wsqzeERH は誤った情報を正しいもの
であるかのように流したという点で、どちらかというと ID:wsqzeERH のほうがマズいだろう
と思った。
0498デフォルトの名無しさん2016/12/12(月) 11:28:40.94ID:wAsQV1H6
>>497
つまり、間違った事を言うぐらいなら黙ってろって事?
0499デフォルトの名無しさん2016/12/12(月) 11:42:34.42ID:wAsQV1H6
それが問題だと言ってるのに。
間違ってる事を見つけて、それを広めたくないなら具体的に誤りをそれ以上の説得力を持って指摘すりゃいいだろ。
0500デフォルトの名無しさん2016/12/12(月) 11:46:51.51ID:+gwThOjs
>>498
別に間違ったことを言ってもいいよ。有益な議論の種になるなら歓迎もする。
異なる意見のどちらも間違いと正しいともいえないことはあるし。たとえば規格に不備があるときとかね。

ただ、異なる意見をぶつけるなら論拠を示してほしいな。少なくとも明示的にそれを要求されたときぐらいは。
そして間違ってると分かったら撤回してほしい。
0501デフォルトの名無しさん2016/12/12(月) 11:54:36.94ID:+gwThOjs
>>499
ID:wsqzeERH は規格に定めのないと思われるところの動作らしきものを主張した。
定めが無いことの論拠を示すのは難しい。規格全体とその解釈を洗わないといけないからね。

そこで逆に定めがあることの出典(これは主張が正しければ簡単なはず)を要求されたわけだけど、
なぜかそれを拒否した。そこがわからない。
0502デフォルトの名無しさん2016/12/12(月) 12:05:21.37ID:wAsQV1H6
>>501
出典を拒否したならそれで正確性が疑われると判断すれば良くない?
0503デフォルトの名無しさん2016/12/12(月) 12:05:56.62ID:iHRm80/h
(この流れいつまで続くんだろ…)
0504デフォルトの名無しさん2016/12/12(月) 12:09:45.51ID:twbdB4od
お前ここは初めてかよ
こんなの続いてるうちに入らないだろ
0505デフォルトの名無しさん2016/12/12(月) 12:20:54.10ID:+gwThOjs
>>502
本人にとってはそれでいいんだろうけど、見てる側としてはせっかく話題に上がった論点が
「正確性が疑われる」とかいう曖昧な状態で終わるのが嫌かな。

実は規格に対応する定めがあるのかもしれないし、
主張した本人が未だに誤りを信じてるかもしれないわけで。
0506デフォルトの名無しさん2016/12/12(月) 12:29:55.88ID:wAsQV1H6
>>505
そういうぐらいなんだからあなたの中では曖昧な状態ではなく誤りと確信してるんでしょ?
その理由を書けばいいんじゃない?
0507デフォルトの名無しさん2016/12/12(月) 12:40:39.49ID:iHRm80/h
>>504
プログラム絡まない不毛な会話が続くのは珍しくない?
0508デフォルトの名無しさん2016/12/12(月) 13:04:44.32ID:pCtNIeWj
質問者は質問の意図をはっきりさせる。
回答者はエスパーせずに不明な点があれば質問者に要件を確認する。

この二つを徹底させる必要がある。
0509デフォルトの名無しさん2016/12/12(月) 13:17:17.99ID:GRRPu0hD
>>508
質問に質問を返すなというバカが現れるが無視する。
も加えないとな
0510デフォルトの名無しさん2016/12/12(月) 14:00:07.95ID:GtH+849B
質問の意図・・・それを聞いてどうするつもりか
質問の主旨・・・何について尋ねているのか

明晰な質問文が作れる人は、自分で答えを導く力をすでに持っている
本当にわかっていない人は、自分が何をわかっていないのかを、わかっていない
無知の知ってやつ
0511デフォルトの名無しさん2016/12/12(月) 17:51:59.67ID:bNwcWuUI
ID:+gwThOjsは健常者
0512デフォルトの名無しさん2016/12/12(月) 17:56:16.45ID:M1+cJD9B
>>492
いいね。結婚してください。
0513デフォルトの名無しさん2016/12/12(月) 18:34:35.43ID:bNwcWuUI
「規格読め。具体的に何処なのか訊かれても私は説明しない。
なお出典拒否を見たらオマエが正確性を疑えばいいだけ」

ちょっとアタマおかしいのではないだろうか
>>505が不憫でならない
0514デフォルトの名無しさん2016/12/12(月) 19:19:02.30ID:mxfi3nOt
>>489
毛の壁氏のコピペだよ
0515デフォルトの名無しさん2016/12/12(月) 19:59:06.58ID:eHvHtzFg
>>513
なんでそれらを同じ人が言ったように纏めるわけ?
0516デフォルトの名無しさん2016/12/12(月) 20:51:00.44ID:ER7G210i
お前ら、
2chは嘘を嘘と見抜けないようじゃなんとかって言われているからな
あと、2chはスラム街であって普通の人が来るところではない
スラム住人に普通の人の行動・マナーを要求するって無理
0517デフォルトの名無しさん2016/12/13(火) 01:47:50.23ID:3XO5JWcw
ちなみに俺(ID:wAsQV1H6)の見解は >>454 に書いてる。
出典はデータメンバーの順序しか示せないけど(それも面倒だからやりたくない)、納得いく間違いという説明があればごめんなさいするよ。
0518デフォルトの名無しさん2016/12/13(火) 02:10:32.03ID:R+yFeKlS
>>517
間違いと言われてるのは>>446でしょ。
>>454の中段にあるとおりパディングについては定められていないので、連続しない可能性がある。

メモリレイアウトが連続すれば配列のようにアクセスしてよい、というわけでもないので、
>>454の最後の「考慮しなくていいんじゃね」が「配列アクセスしてもいいんじゃね」という意味で
言ってるなら、これもマズい。
0519デフォルトの名無しさん2016/12/13(火) 06:15:11.71ID:3XO5JWcw
>>518
うーん。連続するかどうかしか話題になってなかったから
元々の話が
union{
struct {float x,y,z;};
float elem[3];
};
てな感じの定義になっててそれがズレる的な話なのかと思ってたけど、
発端の >>428 から読み返したら違うみたいね。
それでも >>518 の言うマズいが具体的に何がマズいのかは解らないな。メモリレイアウトは配列と同じになるけど配列アクセスするとマズい理由。

428のような書き方はしないけど、struct vec3{float x,y,z;};
的なレイアウトのクラスの配列の先頭ポインタをOpenGLの頂点配列に渡したり普通にするよね。
0520デフォルトの名無しさん2016/12/13(火) 06:41:39.14ID:MMXxHZC0
スタックは深度が増すほどポインタの値は減っていくからな
0521デフォルトの名無しさん2016/12/13(火) 07:09:41.18ID:3Hyjk+HW
>何がマズいのかは解らない
質問者の日本語が読めないのだろうか
『保障されてないんだっけ?』
0522デフォルトの名無しさん2016/12/13(火) 07:27:22.26ID:exhxuOGE
(日本語間違ってるけどな…)
0523デフォルトの名無しさん2016/12/13(火) 07:31:31.56ID:vJwCdf+q
>>519
> メモリレイアウトは配列と同じになるけど配列アクセスするとマズい理由。
動作が保証されないから
> struct vec3{float x,y,z;};
vec3 v;
float *a = &v;
の場合に 8086 などのセグメントアーキテクチャだと v.x と v.y でセグメント切り替えを行う必要があるかもしれないからそのようなコードを生成するけど a[0] と a[1] でその切り替えを行う保証がないとか
(配列として宣言されてればサイズがわかっているのでセグメント切り替えをサボることができるように配置できる)
0524デフォルトの名無しさん2016/12/13(火) 07:37:31.17ID:KT6JI3xh
あの文脈で連続をcontiguousでなく
sequentialの意味で解釈するのはアホ
0525デフォルトの名無しさん2016/12/13(火) 07:52:37.70ID:3XO5JWcw
>>523
その理屈だと昔ながらのCのmemsetとか標準機能で実装できなくない?
0526デフォルトの名無しさん2016/12/13(火) 08:04:16.16ID:KT6JI3xh
C++のメモリモデルはバイト単位だけど
floatポインタのアドレッシングまでは規定されてないからな
0527デフォルトの名無しさん2016/12/13(火) 08:10:29.68ID:vJwCdf+q
>>525
union とかキャストも保証されないから自己責任でよろしく
って言語ですから

現実にそんな変な処理系にぶち当たったことはないしこれからもないと思うから俺は普通に使うけど
0528デフォルトの名無しさん2016/12/13(火) 08:38:35.05ID:17Hk+0wM
村に伝わる言い伝えの、長老が伝え聞いた、伝説の処理系の存在で反論試み奴
0529デフォルトの名無しさん2016/12/13(火) 08:56:31.87ID:tD8W/Rko
struct vec3
{
float elem[3];
float &x, &y, &z;
vec3() : x(elem[0]), y(elem[1]), z(elem[2]) { }
};
これだけのことだろ
0530デフォルトの名無しさん2016/12/13(火) 11:17:02.60ID:R+yFeKlS
>>519
配列外参照が未定義動作なのは知ってるよね?
struct vec3 {float x,y,z;}; の x とか、非配列について配列アクセス(ポインタ演算)できる範囲は
要素数1の配列と同じになるので、 (&x)[1] を読み書きしたり (&x) + 2 したりすると未定義動作になる。
コンパイラはそういう操作が無いことを前提とした「最適化」を行ってよい。
https://cpplover.blogspot.jp/2014/06/old-new-thing.html

いま動いてても何かの拍子に静かに壊れる可能性のあるコードはマズいでしょ。
0531デフォルトの名無しさん2016/12/13(火) 11:40:12.26ID:3XO5JWcw
>>530
それで、char*の場合は配列外参照についても特別扱いって事?
URLの先の記事の例だとintの配列ではなくcharの配列だったら同じように最適化されないと?
0532デフォルトの名無しさん2016/12/13(火) 11:52:43.25ID:R+yFeKlS
>>531
少なくとも現行の規格では、配列アクセス(ポインタ演算)の制限についてchar類についての特例は無いよ。

>>525 つまりmemsetの類をユーザーコードで実装できる保証も無い。これは規格中で曖昧なところでもある。
http://wg21.cmeerw.net/cwg/issue1701
ただ、伝統的なコンパイラは既存のコードを守るためなどの理由で、最適化を控える判断をする可能性は高い
だろうとは思う。
0533デフォルトの名無しさん2016/12/13(火) 12:14:32.65ID:3XO5JWcw
>>532
ん?そのURLの先のには
オブジェクトTはN個のunsigned charのシーケンスとして表現できる。Nはsizeof(T)と等しい
って書いてるから少なくともunsigned charのポインタとしてオブジェクトの範囲内を操作出来るって事じゃないの?
曖昧と言ってるのはそのシーケンスを配列のように扱っていいのかどうか。
つまりunsigned charについては特別扱いされてそうだけど、
帰ったら規格読んでみるかな…
0534デフォルトの名無しさん2016/12/13(火) 12:20:19.43ID:ZDIceSoS
>>521-522
ちょっと笑った
0535デフォルトの名無しさん2016/12/13(火) 12:42:22.36ID:3XO5JWcw
まぁでもわざわざ怪しい所に足を突っ込まなくても同じ領域を別の型で解釈するunionという明確な機能があるんだからそれを使うべきだよな。
発端を読み間違えていたとはいえ >>454 は良くないレスでした。ごめんなさい。
データメンバーを配列としても扱いたいなら手抜きせずunionを使いましょう。

少なくとも俺はそうしてます。
0536デフォルトの名無しさん2016/12/13(火) 13:07:00.96ID:KT6JI3xh
便利だけで他人に勧めるとはこれ如何に
>>527と>>529が目に入っていないのか理解できなかったのか
0537デフォルトの名無しさん2016/12/13(火) 13:20:29.45ID:hs9s/v66
>>535
> データメンバーを配列としても扱いたいなら手抜きせずunionを使いましょう。

ここまでずっと
union {
struct {float x, y, z;};
float f3[3];
} a;
これがピッタリ重なる保証はないよね?(a.xとa.f3[0]…a.zとa.f3[2])
という話でもあったったのでは?
unionはすべての要素のメモリ開始位置が一致する事以外は保障してないのでは?
0538デフォルトの名無しさん2016/12/13(火) 13:54:57.03ID:3XO5JWcw
>>537
その話をしてるつもりはなかったかな。
俺はsizeof(float[3])==sizeof(vec3)であること前提で話してたから。
そこは規格の話ではなく環境の話でそんな環境存在しないから考慮する意味ないよねって事
0539デフォルトの名無しさん2016/12/13(火) 13:56:42.26ID:3XO5JWcw
もちろん無意味にメモリを3倍消費するような実装は目に入ってません
0540デフォルトの名無しさん2016/12/13(火) 18:04:22.99ID:esmzfSZb
「保障されてないんだっけ?」
 ↓
「もちろん無意味にメモリを3倍消費するような実装は目に入ってません」

池沼はひっこんでろ
0541デフォルトの名無しさん2016/12/13(火) 19:42:41.67ID:E4yvkIVk
>>454
gcc はアラインメントなしだよ
0542デフォルトの名無しさん2016/12/13(火) 19:56:23.08ID:vJwCdf+q
正直 ID:3XO5JWcw が何を言いたいのかさっぱりわからん
周回遅れで環境依存云々って言われても困惑するだけだし...
0543デフォルトの名無しさん2016/12/13(火) 19:57:23.59ID:vJwCdf+q
>>541
アライメント「なし」ってなんだ?
0544デフォルトの名無しさん2016/12/13(火) 20:36:46.77ID:3XO5JWcw
>>454 にツッコミが入ったからそれについて話してただけだけど?
0545デフォルトの名無しさん2016/12/13(火) 20:48:53.21ID:3Hyjk+HW
>何を言いたいのかさっぱりわからん

これは「何か考えがある」ことを仮定しているが
「どれだけ追究しても実は答えが無い」という可能性に気付きつつ、それに目を背けてしまっているのではないだろうか
0546デフォルトの名無しさん2016/12/13(火) 20:52:33.22ID:rAk2P0Xd
Visual Studio Code スレに初期化子を理解できてない御仁が湧いたのを思い出したわ。
0547デフォルトの名無しさん2016/12/13(火) 21:04:49.28ID:3Hyjk+HW
>アライメント「なし」ってなんだ?

仮説だが「ボクのレス(オツム?)は中身が無し」に置き換えると>>543も意外にすっきりするのではないか
0548デフォルトの名無しさん2016/12/13(火) 21:08:33.14ID:3XO5JWcw
unionで一致しない可能性を挙げるなら
struct vec3{float x,y,z;};
sizeof(float[3])==sizeof(vec3)
にならない可能性がある合理的な理由、もしくは現時点で実在する処理系をあげてもらわないと。
>>454 で俺はそんな処理系存在しないだろうから考慮する必要ないと述べた、いや、ある!というならその理由を述べてくれってだけの話だよ。

規格で許されてるんだからアラインメントも関係なく間にパディング入れるコンパイラが今後出現するかもしれない、と理由もなくフワッとした感じで主張するなら、
そんな扱いづらいコンパイラを使う日が来ないことを祈るよとしか言えないけど
0549デフォルトの名無しさん2016/12/13(火) 21:17:44.32ID:rAk2P0Xd
アラインメントが怪しい配列バッファの生ポ操作を新しく書く場面ってそうそうないでしょ。
C++11のinitializer_list<T>に置き換える方法を考えたが建設的じゃないかね?
0550デフォルトの名無しさん2016/12/13(火) 21:19:16.56ID:ewxTG/d/
>523で指摘されてたでしょ?
0551デフォルトの名無しさん2016/12/13(火) 21:25:33.01ID:rAk2P0Xd
わざわざC++スレで今さらナマポ操作について議論する価値はあるのかな。
コンパイラ依存をエレガントに解決するC++的記法とかならアリだが。
0552デフォルトの名無しさん2016/12/13(火) 21:37:30.55ID:FfoiWr4S
>>548
> struct vec3{float x,y,z;};
> sizeof(float[3])==sizeof(vec3)
になっててもダメって言われてることすら理解してないのかよ...
0553デフォルトの名無しさん2016/12/13(火) 21:41:05.59ID:3XO5JWcw
>>552
だからその理由を言えよ
0554デフォルトの名無しさん2016/12/13(火) 21:51:33.50ID:3Hyjk+HW
「言われてることすら理解してないのかよ」
 ↓
「その理由を言え」

健常者なら仮に理解できなくても「どのレスなんだ?」という日本語になっただろうが、そうはならなかったようだ
0555デフォルトの名無しさん2016/12/13(火) 22:05:23.69ID:vKGN+G2S
#pragma push(pack,1)
union {
struct {float x, y, z;};
float f3[3];
} a;
#pragma pop

でいいだろ
もう文句言うなよ
あとはC言語スレでやれ
ほれ、帰った!帰った!
0556デフォルトの名無しさん2016/12/13(火) 22:14:46.20ID:FfoiWr4S
>>553
>>550
0557デフォルトの名無しさん2016/12/13(火) 22:19:10.87ID:3XO5JWcw
>>556
union使って

>(配列として宣言されてればサイズがわかっているのでセグメント切り替えをサボることができるように配置できる)

のまさに配列として宣言してるわけだけど
0558デフォルトの名無しさん2016/12/13(火) 22:23:00.91ID:3XO5JWcw
あと、規格に準拠したコードでmemsetのようなものを実装出来ないというようなレスに説得力がないかな。
0559デフォルトの名無しさん2016/12/13(火) 23:16:38.37ID:FfoiWr4S
引っ込みつかなくなってるのか、壊滅的に理解力がないのかよくわからんけど
もしかして同じアドレスを複数の方法でアクセスするアーキテクチャを知らんのか?
それなら 8086 の本でも買って勉強してこい
0560デフォルトの名無しさん2016/12/13(火) 23:24:14.57ID:rAk2P0Xd
アラインメント不整合の例
http://qiita.com/kaityo256/items/fadffae00e517efbc8aa
0561デフォルトの名無しさん2016/12/13(火) 23:38:22.25ID:3XO5JWcw
>>559
知らんけど。
その環境で標準準拠のC++が動くのか?
0562デフォルトの名無しさん2016/12/13(火) 23:41:25.70ID:3Hyjk+HW
フルボッコのID:3XO5JWcwだが>>559については>>557への反論になっていないと言わざるを得ない

と思ったら墓穴を掘るようなアホレスが続いて脱力だ
「その環境で標準準拠のC++が動くのか?」
0563デフォルトの名無しさん2016/12/13(火) 23:44:19.32ID:3XO5JWcw
墓穴もなにも実際そんな環境しらんからな。
0564デフォルトの名無しさん2016/12/13(火) 23:58:07.70ID:R+yFeKlS
>>535
> 同じ領域を別の型で解釈するunionという明確な機能がある

C++のunionにそんな機能は無いよ。
アクティブなメンバ以外を通して読み書きすると未定義動作になる。
(構造体同士のcommon initial sequence部分の読み取りだけ特例でOK)
(Cの規格にはいけそうな文面があるんだけど、複数のDRへの委員会回答が
 さらなる混乱を醸しててカオス状態だから結局ポータブルとは言い難い
 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65892)
0565デフォルトの名無しさん2016/12/14(水) 00:10:53.69ID:Sz6DS640
>>561
動かせない理由がない

>>562
> フルボッコのID:3XO5JWcwだが>>559については>>557への反論になっていないと言わざるを得ない
union 中の構造体と配列で同じアドレスの要素に違う方法でアクセスする話だぞ
理解できないならいちいちしゃしゃり出てくるなよ...
0566デフォルトの名無しさん2016/12/14(水) 00:11:46.47ID:j9bleioz
どんな流れかしらんけど
POD型では。
0567デフォルトの名無しさん2016/12/14(水) 00:13:33.01ID:pL75kfvJ
unionはもともとメモリをケチるための物だからなぁ
0568デフォルトの名無しさん2016/12/14(水) 00:16:58.67ID:MOfhcMLl
>>564
ほんとだ。C99では記述あるけどC++の規格には書かれてないのな。
0569デフォルトの名無しさん2016/12/14(水) 00:25:09.39ID:pL75kfvJ
俺の中では>>564が本当だとしたらもう決定的といいますか
少なくとも規格上はNGって事でしょ
unionはもともとメモリをケチるために同じ領域を使いまわすための物だから
キャスト目的の使い方は本来の使い方ではないってだけで
なんかアレだよね
まるでバッドノウハウじゃないですか
やっぱ、本来の使い方から外れた使い方は良くないんじゃないですかねー
悪用ってやつでしょ
規格上NGってのも痛いでしょ
0570デフォルトの名無しさん2016/12/14(水) 00:26:44.27ID:MOfhcMLl
http://stackoverflow.com/questions/36051084/do-array-elements-count-as-a-common-initial-sequence

丁度ぴったりな質問と解答みつけた。

ID:R+yFeKlS さんだけがまともなレスくれるわ。ありがたい。
0571デフォルトの名無しさん2016/12/14(水) 00:39:25.21ID:4ENgz5lN
ふーん。
最後に書いたメンバ以外の読み出しは未定義なのか
0572デフォルトの名無しさん2016/12/14(水) 00:50:30.59ID:4ENgz5lN
お行儀よく書くにはCで共用体周りを書いてコンパイルしC++にリンクか
0573デフォルトの名無しさん2016/12/14(水) 03:34:55.80ID:4GTows1q
大の昔のgccなんかはunion使っても共有されないで単なるstructとして扱われることもあった
0574デフォルトの名無しさん2016/12/14(水) 04:06:39.46ID:19iGSV5P
Win32で最も有名な共用体は、ULARGE_INTEGER型だろう。異論は認めない。

https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa383742(v=vs.85).aspx
typedef union _ULARGE_INTEGER {
struct {
DWORD LowPart;
DWORD HighPart;
};
struct {
DWORD LowPart;
DWORD HighPart;
} u;
ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;
0575デフォルトの名無しさん2016/12/14(水) 04:12:41.86ID:pL75kfvJ
MSは自社でコンパイラを作っているから問題ないのだ
0576デフォルトの名無しさん2016/12/14(水) 06:10:35.98ID:TuSrwtRX
江添の御節本は持ってるのだが、その後に出した禿の翻訳本は買うべきだろうか?
0577デフォルトの名無しさん2016/12/14(水) 07:04:38.50ID:FjhkxVYf
>>565
その話のなかで>>523の理由には納得できなかった>>557が居て、>>557の日本語が理解できなかったので
(523の理由ではなく)許されるかどうかの話にすり替えたいのですねわかります
0578デフォルトの名無しさん2016/12/14(水) 07:07:03.44ID:ItxoOukr
お前の日本語が理解できん
05795772016/12/14(水) 07:58:27.23ID:FjhkxVYf
>>578
これは失礼
「規格上保証されないとする理由の源泉を>>523とするなら>>557の反論は尤もで妥当。>>523単独では論拠として不完全。
>>557が拘っているのは>>523の後半部分なのでまずそれに対する回答を済ませるべき」
といえば良かったか
0580デフォルトの名無しさん2016/12/14(水) 08:23:33.22ID:ItxoOukr
>>579
>>565 を読んでわからないような奴に説明するすべを持たない
0581デフォルトの名無しさん2016/12/14(水) 08:49:56.21ID:Bi35R/pC
ここは是非理解出来た人を募集して代わりに説明してもらうって事でどうでしょう
0582デフォルトの名無しさん2016/12/14(水) 18:03:49.53ID:vdJGZhx+
STLの
0583デフォルトの名無しさん2016/12/14(水) 18:26:05.54ID:bVVmVNC+
強要隊
0584デフォルトの名無しさん2016/12/14(水) 22:02:38.63ID:D6UN0xSn
メモリイメージ意識したコードで規格に固執する奴はアホ
コンパイラや環境に依存して当然やろ
空想の処理系を語るやつはshine
0585デフォルトの名無しさん2016/12/14(水) 23:05:51.41ID:CnQeYnTC
環境依存の話なら他に色々スレがあるからそっちで
0586デフォルトの名無しさん2016/12/14(水) 23:18:56.34ID:4ENgz5lN
struct {flot x,y,z;};
とかっていわゆるPODだからfloat [3]とunionしてもちゃんとアクセスできるんじゃねーのか
0587デフォルトの名無しさん2016/12/14(水) 23:19:16.54ID:hiLU9Xxd
win7でVisualStudio2017でC++の勉強をしようと思ってるんですが最初はどんなの作れば練習になりますかね?
自分のレベルとしてはC言語の基本だけ知ってるレベルです
わからないところは調べつつやろうと思っています
0588デフォルトの名無しさん2016/12/15(木) 00:03:21.45ID:21oBCq6J
作りたいものか作る必要のあるものやればー
0589デフォルトの名無しさん2016/12/15(木) 01:08:01.89ID:jtCJlu/u
>>586
unionのアクセスについてPODを特別扱いするルールは無い。
0590デフォルトの名無しさん2016/12/15(木) 07:31:58.80ID:J5ztPLlo
socket周りにunionが沢山あるけど、よく破たんしないなと思う。たまたまかね。
0591デフォルトの名無しさん2016/12/15(木) 07:59:00.72ID:21oBCq6J
>>589
特別扱いではなくて、PODであるから必然的にアクセスできるのではないかね。
つーかPODな型同士ならreinterpret_castでいいじゃん
0592デフォルトの名無しさん2016/12/15(木) 08:10:42.84ID:xMFaiiqq
Cでは保証されてるからね。
C++の規格上保証されていないとしても、CのAPIを直接呼べる事を望まれているC++のコンパイラがそれを考慮しないって事は現実的には有り得ない選択だと思う
0593デフォルトの名無しさん2016/12/15(木) 08:16:21.44ID:xMFaiiqq
>>590
それがC++では規格上は保証されていないという話
0594デフォルトの名無しさん2016/12/15(木) 08:20:01.66ID:Rg7daUM6
>>590
アライメントをちゃんと考えて char/int でエンディアンを考慮してアクセスするだけなら破綻する環境はまずない
0595デフォルトの名無しさん2016/12/15(木) 08:24:26.39ID:xMFaiiqq
すまん >>593 のアンカー間違えた
>>591 に宛てたもの
0596デフォルトの名無しさん2016/12/15(木) 09:59:36.89ID:jtCJlu/u
>>592
「Cでは保証されてる」って、何が?

Cでも環境依存のパディングが入る可能性があるのは同じだし型ベースのエイリアシングルールは
あるし、>>586のいうようなアクセスについて保証はないでしょ。
「ちゃんとアクセス」の意味によるのかもしれないけど。
0597デフォルトの名無しさん2016/12/15(木) 10:17:49.88ID:T67tgzmG
>>596
>>592 は >>590に宛てたものだよ
0598デフォルトの名無しさん2016/12/15(木) 10:23:21.22ID:T67tgzmG
一応補足しとくと、Cで保証されてるのはunionの全く別の型からのアクセス
type punningと呼ばれるやつ
0599デフォルトの名無しさん2016/12/15(木) 10:24:50.60ID:jtCJlu/u
>>597
それでもやっぱり「Cでは保証されてる」が何のこと言ってるのかわからない。
0600デフォルトの名無しさん2016/12/15(木) 10:39:52.88ID:jtCJlu/u
ごめんリロードしてなかった。

>>598
未定義動作じゃないってだけで環境依存ではあるんだから、
この流れで「保証されてる」というのもいかがなものかと。
>>564のリンク先の例にもあるように、unionにしとけばすべて期待したとおりになるとは限らないわけで。
0601デフォルトの名無しさん2016/12/15(木) 10:49:41.51ID:T67tgzmG
>>600
そのリンク先で期待通りにならないっていうのはstrict aliasing ruleのせいであってunionと直接関係ないよ
例のコードの関数は引数に渡された二つの互換性のない型がunionのメンバーと解らない状態だからね。
0602デフォルトの名無しさん2016/12/15(木) 11:04:05.47ID:jtCJlu/u
>>601
うーん・・・まぁいいやCの話だし。きっと言外に「(〜な場合は)保証されてる」って限定があったんだろう。
0603デフォルトの名無しさん2016/12/15(木) 11:18:18.89ID:T67tgzmG
>>602
単純な話だよ。リンク先の例の関数はunionのメンバーとしてアクセスしてないでしょ?
0604デフォルトの名無しさん2016/12/15(木) 11:25:29.34ID:k7cNIRIo
PODはmemcpyとかmallocとかバイト単位で領域をさわっていいわけだよね。
だからPODな型どうしならエンディアンやら内部表現の意味やらはおいといて、
ポインタ、参照をreinterpret_castで相互に変換しても
全く存在しないアドレスを指して壊れるみたいなことはないじゃん。
0605デフォルトの名無しさん2016/12/15(木) 11:38:15.00ID:T67tgzmG
>>604
それはちょっと違う
上にも書いたけどstrict aliasing ruleっていうのがあって互換性のない別の型にreinterpret_castして書き換えた後、元の型で参照しても書き換えた結果が反映されないということがあり得る。そのルールではcharなどのバイト型とかについては特別扱い
strict aliasing ruleについては詳しくはググって。
解りやすい翻訳記事が出るから
0606デフォルトの名無しさん2016/12/15(木) 13:08:36.72ID:Mt/OUcfG
>>600
「保証されない」のは未定義の動作と未規定の動作だぞ
処理系定義の動作や文化圏固有の動作は「保証される」事項にあたるわけだが
おまえさんは未定義じゃないなら未規定とでも言いたいのか?
0607デフォルトの名無しさん2016/12/15(木) 18:38:09.08ID:8RRI46Yv
書き換えが反映されない問題なら
volatileにしときゃきっと動くだろ
0608デフォルトの名無しさん2016/12/15(木) 20:55:47.39ID:qjVjn2tr
昔のvolatileは最適化しないという意味があったが今はどうなんだろう
0609デフォルトの名無しさん2016/12/15(木) 21:32:15.56ID:ryYHdhLD
アクセスを省略しないというなら正しいが最適化しないというのは間違い
0610デフォルトの名無しさん2016/12/15(木) 23:30:53.41ID:XnpLdVDT
レジスタだけで完結する演算でもわざわざメモリへアクセスしにいくから高い確率で非効率的なコードになるけどなー
だからstrict aliasing ruleの回避の為にvolatileを使うのは悪手
0611デフォルトの名無しさん2016/12/16(金) 00:48:28.30ID:fGg7JmOu
>>605
探して読んだ。
なるほど。
非互換なaliasはないものとして処理するのか。
で、PODだとmemcpyは使えるので、
非互換な型のポインタが示す領域間でmemcpyしてしまってから読み出せば問題ないと。
0612デフォルトの名無しさん2016/12/16(金) 01:24:59.16ID:+Cerr3R4
>>606
特定環境での動作が保証されるかどうかならそのとおりなんだろうけど、
ポータビリティが保証されるかどうかと考えれば>>600でもおかしくないでしょ。
0613デフォルトの名無しさん2016/12/16(金) 01:31:25.08ID:VoJ0WBIM
>>612
おまえが勝手に決めた移植性の範囲を
見も知らん馬の骨に押しつけてるだけだろ
どんな処理系にも移植できるコードを書けと言うなら
おまえ自身が世界中の全ての処理系で試す責任があるわけだが
0614デフォルトの名無しさん2016/12/16(金) 02:05:15.84ID:+Cerr3R4
えwww理不尽すぎんだろ。責任とかwww
0615デフォルトの名無しさん2016/12/16(金) 02:25:02.25ID:cho0HItf
もし612にその責任とやらがなかった場合
費用は613が支払う責任が出てくるのか
おいしい仕事うらやま
0616デフォルトの名無しさん2016/12/16(金) 02:50:01.00ID:vLNiG0Uc
ここは、メーカーをさしおいて動作保証する有志が大量に湧く香ばしいスレですね。
0617デフォルトの名無しさん2016/12/16(金) 03:43:44.86ID:bfViihU5
お前に都合のいい形で定義した本当の何かについて語るとお前に都合のいい形で話を進められるんじゃ
0618デフォルトの名無しさん2016/12/16(金) 08:42:11.25ID:VoJ0WBIM
取って付けたような仮定でごちゃごちゃ言われても相手しようがない
0619デフォルトの名無しさん2016/12/16(金) 09:14:08.98ID:QVt2AG5I
>>613
メーカー抜きに規格上どんな処理系でも意図した通り動くかの簡単なお仕事です
動かない条件が存在するのにそれを隠して保証されてると言った人が費用を払うのが筋です
0620デフォルトの名無しさん2016/12/16(金) 13:27:00.23ID:6icF8y4L
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65892
がunion使っても正しく動かない場合があると言うのは、
{
lock_guard<mutex> lk(mutex);
}
value++;
と書いて
mutex使ったのにvalueが正しくインクリメントされない場合がある

というのと同じぐらい暴論だと思うぞ。
0621デフォルトの名無しさん2016/12/16(金) 13:39:06.26ID:VoJ0WBIM
>>619
異な事を仰る
PGの仕事は実機で動くコードを作ることで
規格上の正しさが第一条件なわけではない
規格票を読むこと自体が第一条件な人がいるようだが
手段が目的化してる痛いやつだ
0622デフォルトの名無しさん2016/12/16(金) 14:04:50.98ID:vWCWSv0y
できうる限り規格上認められたコードを書くように努力するべきだよ
処理系依存にならざるを得ない部分も有ると思うが
可能な限り減らす努力をするというのは言うまでもないだろう
未定義動作が含まれたコードは非常に不味く
コンパイラはとんでもない最適化をかけてくることがあるからね
unionの件でいえば、アクディブでないメンバの読出しは未定義動作なので
意味のないコードとして一切をバッサリ削除するっていう最適化も
規格上は許されていると思う
未定義動作に関してはコンパイラは何をしても許されることになっているからね

有名なのでは
before(p);
auto i = *p;
after(p);
このコードで、beforeとafterがインライン展開されたとき
beforeやafterでpのnullチェックをしていたとしても
そのチェックをコンパイラは削除しにかかるかもしれない
なぜならauto i = *p;があるのでpは絶対にnullではないという判断
この効能は、デリファレンスの前のコードにも及ぶ、つまりbeforeも最適化の対象
pがnullの時、auto i = *p;は未定義動作になるので
pがnullの場合においてはコンパイラは何をしても自由ってことで
バッサリ削除しにかかるわけだわ、おっそろし
例えばbeforeの中で、if(!p){ output_log(); abort(1); }としていて
プログラマはそのことを知っていたので、auto i = *p;の時にはnullチェックをしなかった
のかもしれないが、一切のコードは削除されて、ログも吐かずにセグフォで落ちるということもありうる

未定義動作というのは最適化において直感的にはわからない非常にまずいことが起こる場合があるので
避けたほうがよいだろう
0623デフォルトの名無しさん2016/12/16(金) 15:09:13.83ID:6icF8y4L
>>622
念のために言うがそれはC++では正しい。しかしC言語では正しくない。Cではunionのメンバーについて異なる型でアクセスしても大丈夫な事が保証されている
socketでunionが多用されている、というのに(socketAPIの)Cでは保証されているから、とレスしたらそれにつっこんできたのが >>600 だからね
0624デフォルトの名無しさん2016/12/16(金) 16:31:31.51ID:7+CqS1oK
規格上未定義の場合、
○ 処理系の説明書では動作が規定されていたので使った
× 処理系の説明書にも動作は未定義とあるのに実験をして動作を確認して使った
0625デフォルトの名無しさん2016/12/16(金) 17:49:52.73ID:9Wz/M+WC
621は潜在的に後者タイプ
0626デフォルトの名無しさん2016/12/16(金) 18:54:22.26ID:CA9Tfamg
>>622
> できうる限り規格上認められたコードを書くように努力するべきだよ
これはできる限りではなくマストだろ
> 処理系依存にならざるを得ない部分も有ると思うが
> 可能な限り減らす努力をするというのは言うまでもないだろう
これはケースバイケース
移植を全く考慮しないプログラムは普通にありうる
0627デフォルトの名無しさん2016/12/16(金) 19:23:06.69ID:zvOL+XWx
> > できうる限り規格上認められたコードを書くように努力するべきだよ
> これはできる限りではなくマストだろ
異な事を仰る
PGの仕事は実機で動くコードを作ることで
規格上の正しさが第一条件なわけではない
規格票を読むこと自体が第一条件な人がいるようだが
手段が目的化してる痛いやつだ
0628デフォルトの名無しさん2016/12/16(金) 19:26:22.91ID:BXmKubid
実機で動けばいい程度の仕事なのか
実機で動くのは当たり前
可搬性があるのもあたりまえ
0629デフォルトの名無しさん2016/12/16(金) 19:45:33.46ID:zvOL+XWx
要求されてもいないことに努力するのが美徳とされるのは日本だけ
世界的にはgold platingといって避けるべきと考えられているんだな
顧客は技術屋の自己満足のためにお金を払ってるわけじゃないから
0630デフォルトの名無しさん2016/12/16(金) 19:59:29.78ID:vLNiG0Uc
実機の挙動を追いかけるのが精いっぱいってこともあると思うんだが。
そういう時は、「おお、クロスコンパイル、ちゃんとビルド通ったね、めでたしめでたし」程度のもんだ。
0631デフォルトの名無しさん2016/12/16(金) 20:02:23.64ID:P4d6yKEb
>>622
>そのチェックをコンパイラは削除しにかかるかもしれない
それはない
0632デフォルトの名無しさん2016/12/16(金) 20:04:27.94ID:vLNiG0Uc
下手にコンパイル通ると動くと思い込んでしまうからいっそのことビルド通らない方がマシだ(暴論)
0633デフォルトの名無しさん2016/12/16(金) 20:22:54.70ID:vWCWSv0y
>>631
実際この手の最適化でLinuxのカーネルにセキュリティーホールが出たことがあるし
http://blog.kmckk.com/archives/1202810.html

「未定義動作はタイムトラベルを引き起こす」
https://cpplover.blogspot.jp/2014/06/old-new-thing.html
にも、
>しかし、非古典的なコンパイラーは、このバグ関数を利用して、タイムトラベルを始めるのだ。
とある
0634デフォルトの名無しさん2016/12/16(金) 21:24:35.92ID:X9dL4QxA
>>632
そんな貴方にrust
0635デフォルトの名無しさん2016/12/16(金) 22:42:01.97ID:NA9YnVud
>>627
コンパイラがバージョンアップするだけで動かなくかもしれないようなコードは
> 実機で動くコード
とは言わんよ
0636デフォルトの名無しさん2016/12/16(金) 23:30:15.36ID:RQniJWoR
それってsockaddrのこと?
0637デフォルトの名無しさん2016/12/17(土) 00:20:42.12ID:TZRPZZKH
>>626
できる限りとマストってニュアンスは違うけど実質同じ意味だよね。
0638デフォルトの名無しさん2016/12/17(土) 00:23:18.21ID:rz2849ZH
should と must の違いはあるんじゃないかな
0639デフォルトの名無しさん2016/12/17(土) 00:39:42.79ID:fuQenMl0
すべき と やらないと許さない くらいの違いがある
0640デフォルトの名無しさん2016/12/17(土) 00:50:12.05ID:TZRPZZKH
できる限りってその人の出来る最大限の事だから。
まぁ、もし能力的に出来ないならやるなという意味も含めてマストと言ってる可能性もあるけど、うっかりバグも含めたらそんなこと出来る人殆ど居ないと思うんだ。
0641デフォルトの名無しさん2016/12/17(土) 02:08:30.13ID:QGFH/8LE
>>633
622で書いた例はおかしいんじゃないか。
beforeでnullチェックがあれば最適化しても消されないだろ。
記事の話はafter にnullチェックがあっても消されれるってだけ。
0642デフォルトの名無しさん2016/12/17(土) 02:28:16.32ID:JNOD62wa
> [1] 標準規格は、明示的に未定義動作によるタイムトラベルを認めている。
> しかし、もしそのような実行が未定義の操作を含む場合、
> この国際標準規格は実装に対し、そのような入力に対し、
> いかなる実行上の制約をも課すことはない
> (未定義操作に先行する操作をも含む)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0643デフォルトの名無しさん2016/12/17(土) 06:57:11.15ID:zNE1YHbQ
beforeでnullチェックしてNULLなら*pに至らないコードであれば消えへんわな。
throwしてるとか。
あるいはpに影響を与える処理がnull処理に続くとか。

nullの時にbeforeの中の処理を迂回してるだけならばっさりいくかもね。
*pの処理をbeforeより先にやっても問題ないようなフロー場合を考えれば消えるが理解出来ると思う
0644デフォルトの名無しさん2016/12/17(土) 08:56:05.81ID:SZHJDyPT
nullだったら未定義動作に突っ込むんだからそんなの有り得ないってことでnullの場合のコードを全部削除するっことはあり得るでしょ。
前か後ろかは全く関係ないよ
0645デフォルトの名無しさん2016/12/17(土) 09:08:20.44ID:SZHJDyPT
おっとすまん。abort見落としてた。

>例えばbeforeの中で、if(!p){ output_log(); abort(1); }としていて

abortが規格通りちゃんとnoreturnで修飾されてるならnullなら未定義にならずにそのまま終了するんだから消えないわな。
abortするコードだけが残る可能性がある。
0646デフォルトの名無しさん2016/12/17(土) 09:14:59.02ID:SZHJDyPT
あと書きミスだろうから話の本筋に関係ないけど標準のabortに引数はない。
0647デフォルトの名無しさん2016/12/17(土) 09:18:30.23ID:qqGfUFWc
inline void before(int *&p) {
static int si = 2016;
if (!p) p = &si;
}
0648デフォルトの名無しさん2016/12/17(土) 09:28:03.97ID:SZHJDyPT
ん?ちょっと待てよ?
翻訳単位が違うなどで中身の解らない関数を呼び出したとき、その中で必ず例外飛ばすとかterminateする可能性は捨てきれないから、noreturnで修飾されてようがいまいが関係ないか。
0649デフォルトの名無しさん2016/12/17(土) 15:25:33.86ID:sjHKoy2h
ああ、そうだな
中身が分かってる場合に限られるだろう
0650デフォルトの名無しさん2016/12/17(土) 16:07:38.42ID:zNE1YHbQ
インラインとか翻訳単位間での最適化がかかる場合だけだっての。
俺としては素直にrestrictをC++にも入れろと思う
0651デフォルトの名無しさん2016/12/18(日) 16:04:27.19ID:ZiJh313B
>前か後ろかは全く関係ないよ
さすがに後ろは遠慮願いたいです
0652デフォルトの名無しさん2016/12/18(日) 17:55:14.50ID:A5RLn4gx
畑中葉子か
0653デフォルトの名無しさん2016/12/18(日) 18:44:38.95ID:3mNBVKev
(*)
0654デフォルトの名無しさん2016/12/18(日) 19:44:57.34ID:O7+9i5Ii
そこはフツー、
)*(
0655デフォルトの名無しさん2016/12/18(日) 20:12:23.61ID:FPWIWuxB
流石はC++のスレッド、というところだな。
気恥ずかしげに『はじめてのC』とか読んでるお子様とは一味違う。
0656デフォルトの名無しさん2016/12/18(日) 20:15:17.44ID:r3yaM0uJ
結構お年の人がいるスレだな
0657デフォルトの名無しさん2016/12/18(日) 21:39:25.38ID:CFuzcgv7
まあ2ちゃん自体が高齢化してるからな
俺ももう定年が視野に入る年で K&R スタイルの引数しか使えないコンパイラ使ってたけど i =- 1 とかは知らんかった
0658デフォルトの名無しさん2016/12/18(日) 23:47:58.18ID:O7+9i5Ii
もう30歳以上は来ないでください
0659デフォルトの名無しさん2016/12/19(月) 07:13:19.83ID:JfSEkcBS
20歳とかおっさんだろ20歳以上が来るなよ
0660デフォルトの名無しさん2016/12/19(月) 07:58:47.55ID:TguvqWsq
コンパイラをC++11以上にするのは、武家のたしなみ。事実上マストな。
0661デフォルトの名無しさん2016/12/19(月) 08:07:11.64ID:TguvqWsq
「C++11とそれより前」は、「Java5とそれより前」と同じくらいの隔たりがある。
Javaと違いC++は仮想VMで動くわけではないので、古いC++コンパイラを使い続ける積極的な理由はない。
C++11よりも前のコンパイラを使って新しいコードを書いている人は偉くもなんともなくて単にPG業界の負け組である。
0662デフォルトの名無しさん2016/12/19(月) 08:13:02.94ID:s4WNerU2
>>658-659
むしろ若いつもりならこんな古い掲示板にたむろせずにお前らがどっか行けよ...
0663デフォルトの名無しさん2016/12/19(月) 08:33:37.08ID:BpYOD4yf
>>661
積極的な理由あるだろ
GCCの2.95縛りとか長かったぞ
0664デフォルトの名無しさん2016/12/19(月) 08:40:59.48ID:qUwjyat8
黙れ小僧
0665デフォルトの名無しさん2016/12/19(月) 08:46:52.03ID:TguvqWsq
C++はJavaと違ってJava4縛りみたいなものはないので、新しいコンパイラが手に入るなら積極的に使うべき。
C++11コンパイラが供給されない見捨てられたハードで仕事している人はお気の毒としか言いようがない。
0666デフォルトの名無しさん2016/12/19(月) 08:49:25.00ID:BpYOD4yf
はははは
あの件を知らないんだな
0667デフォルトの名無しさん2016/12/19(月) 09:13:46.04ID:TguvqWsq
>>666
不幸自慢か。よかろう、続けたまえ。 >>666 よ。
0668デフォルトの名無しさん2016/12/19(月) 09:18:32.10ID:JfSEkcBS
現在サポート継続中のOSでも環境標準のコンパイラ+標準ライブラリーだと対応してないものまだ結構あるでしょ。
例えばubuntu12.04とか
0669デフォルトの名無しさん2016/12/19(月) 10:41:05.41ID:LsCIfPmC
>>666
オーメン
0670デフォルトの名無しさん2016/12/19(月) 10:44:56.78ID:dPpwmd9E
仕事さぼってこんなところにいたのね
0671デフォルトの名無しさん2016/12/19(月) 18:33:47.49ID:UkY+ZLT4
他人の書いた古い糞コードをちょっと修正するのに
わざわざ新しいコンパイラを使おうとは思わないな
0672デフォルトの名無しさん2016/12/19(月) 19:09:05.16ID:nkfgQpHK
コンパイラの最適化でバグが顕在化することもあるからリリースしてるソフトだと環境は極力変えないようにしてる
0673デフォルトの名無しさん2016/12/19(月) 19:15:33.01ID:CiSzNtO4
むしろ色々な環境で試すことにより潜在バグをあぶり出す
0674デフォルトの名無しさん2016/12/19(月) 20:15:07.54ID:kP/9omRt
そんな予算は無い
0675デフォルトの名無しさん2016/12/19(月) 20:30:11.70ID:ssWThwsz
ださっ
0676デフォルトの名無しさん2016/12/19(月) 21:13:03.29ID:VOmGrAJz
C++erにとって、全知全能でなければそれはダサいのだ
0677デフォルトの名無しさん2016/12/19(月) 21:21:21.56ID:875KlIZO
予算というか、単にプログラムを利用したい人に対して
開発する話にすり替えるよくある詭弁
0678デフォルトの名無しさん2016/12/19(月) 22:39:58.41ID:K8raT0NF
>>673
これは良くやる。
0679デフォルトの名無しさん2016/12/19(月) 23:09:24.11ID:TaYHseGN
C++14ならまだしも過去のC++11を持ち出すアホは何なの?
ヒキコモリなの?
0680デフォルトの名無しさん2016/12/19(月) 23:44:45.04ID:32YrbjET
>>668
Linuxサバでもサポート限界まで使うってところも多いだろうからな
それに搭載のstdC++ライブラリがC++11すら対応していないのものなのに
あえて新しいC++14のコンパイラーでいじくるなんてしないからな。
0681デフォルトの名無しさん2016/12/20(火) 00:27:57.04ID:D+KHLjez
取引先の工場ではwin2000が現役
0682デフォルトの名無しさん2016/12/20(火) 00:43:37.90ID:2R+ZSOQx
サポート切れてるOSターゲットに開発は流石にない
0683デフォルトの名無しさん2016/12/20(火) 06:54:54.82ID:IznJBAG+
組み込みではよくある
0684デフォルトの名無しさん2016/12/20(火) 08:45:37.75ID:/4ZK922w
無償サポート
0685デフォルトの名無しさん2016/12/21(水) 11:55:31.48ID:uc71CH8D
カメラの座標を毎秒実行画面に表示しててそれをテキストファイルに書き出したいんだけど、最後の座標しか書き出せてないんだけど、どうプログラムしたら最初から最後の座標が書き出せるの?
0686デフォルトの名無しさん2016/12/21(水) 11:58:27.70ID:E3mPp/qZ
fopenを゙a+b゙モードで呼び出す
0687デフォルトの名無しさん2016/12/21(水) 12:00:04.08ID:E3mPp/qZ
上のはバイナリやった
テキストなら "a+t"
0688デフォルトの名無しさん2016/12/21(水) 12:36:04.09ID:KtI+UjCH
データを1回表示するたびに
ファイルを開く → 書き出す → ファイルを閉じる
ってやってるクチかな。

ファイルを開く → 書く書く書く... → ファイルを閉じる
て感じにするんだ。


またはパイプでteeに送る
$ camerapos | tee output.txt
0689デフォルトの名無しさん2016/12/21(水) 12:44:27.31ID:aubTzGvR
>>685
座標を書き込むたびごとにcloseしてるだろ
void app::display_point(POINT const& pt){
std::fstream fs{filename, std::ios_base::out}; //ここで定義するとデストラクタでcloseされる
fs << pt;
}
↓
std::fstream fs{std::ios_base::out};
void app::display_point(POINT const& pt){
fs << pt;
} //これならcloseされない
0690デフォルトの名無しさん2016/12/21(水) 12:45:36.40ID:aubTzGvR
あ、filenameを忘れてるw
わりいわりい、でもわかるよな
0691デフォルトの名無しさん2016/12/21(水) 12:48:25.28ID:hcCdx4AT
レス助かる
今のプログラムが
outputfile=fopen("text名","w");
fprint(optputfile, "カメラ座標¥n");
fclose(outputfile);
なんだけど、fopenのところに*a+t書き込むってこと?
0692デフォルトの名無しさん2016/12/21(水) 12:55:05.83ID:hQfd8N4I
>>691
wをat+にする
0693デフォルトの名無しさん2016/12/21(水) 12:58:37.40ID:hcCdx4AT
>>692
おおおお!ありがとうございます
0694デフォルトの名無しさん2016/12/21(水) 13:16:35.27ID:u1MDUlHV
プログラム起動する度にどんどんファイルでかくなっていくけど大丈夫か
0695デフォルトの名無しさん2016/12/21(水) 13:32:09.04ID:E3mPp/qZ
そこまで俺らが世話焼く必要は無い希ガス
0696デフォルトの名無しさん2016/12/21(水) 14:00:14.59ID:hcCdx4AT
ファイルは毎回、削除、移動等してるので大丈夫です。ありがとうございました。
0697デフォルトの名無しさん2016/12/21(水) 15:23:41.98ID:nQIVUYH+
fstream を使った回答をガン無視する流れ、嫌いじゃないよ。
0698デフォルトの名無しさん2016/12/21(水) 16:20:38.14ID:aubTzGvR
質問者が使ってるのがfopenてだけじゃん
それ以上に他意があって欲しそうなヒマネラーがつまらん戯れ言をほざきやがる
0699デフォルトの名無しさん2016/12/21(水) 16:41:16.79ID:KtI+UjCH
そういや、ここC++のスレッドじゃないか。
最初の質問と回答、それに質問者からの再質問がCの話になってるよ。
それで互いに通じてるから支障はないんだろうけど。
0700デフォルトの名無しさん2016/12/21(水) 17:36:29.71ID:aubTzGvR
うん、だからfstreamで回答した
個人的にはfstreamは気安く使いたくないものなので
fopenを使っている質問者には内心同調してた
0701デフォルトの名無しさん2016/12/21(水) 18:20:37.55ID:MHGJUGGs
>>699
>Cの話になってるよ
どこが?
fopenみたいなC++の標準ライブラリに有る関数の話しかしてないだろ
0702デフォルトの名無しさん2016/12/21(水) 18:50:02.12ID:PZYB8k4u
>>699
std::fopenだからセーフ
0703デフォルトの名無しさん2016/12/21(水) 19:06:50.08ID:u1MDUlHV
なんでストリーム系は評判悪いんですか
0704デフォルトの名無しさん2016/12/21(水) 19:10:12.26ID:hQfd8N4I
フォーマッティングがウザい
0705デフォルトの名無しさん2016/12/21(水) 19:41:35.47ID:ZtnFV01Y
coutってなんでprintfより遅いの?
0706デフォルトの名無しさん2016/12/21(水) 23:42:58.89ID:Padeiior
安全性上げてるから
0707デフォルトの名無しさん2016/12/21(水) 23:49:07.58ID:/5DtifXw
std::sync_with_stdio(false);にすると結構速いよ

http://d.hatena.ne.jp/s-yata/20100726/1280138663
http://tatanaideyo.hatenablog.com/entry/2014/10/24/214714
07084352016/12/21(水) 23:53:59.58ID:5x6EB9D5
>>707
これVisual Studioでも速くなる?
昔試して変わらなかった記憶が
0709デフォルトの名無しさん2016/12/22(木) 00:00:22.95ID:uQsPz27E
>>708
リンク先のコメントに書いてあるね

>なお,Dinkumware による実装においては,そのソースコードのコメントにあるとおり,std::sync_with_stdio() の呼び出しは意味がないようです.
0710デフォルトの名無しさん2016/12/22(木) 00:06:55.05ID:nspPuHe1
>>709
センキュ

前のレスの名前欄435は無視してくれ、別スレのだ
0711デフォルトの名無しさん2016/12/22(木) 00:12:02.06ID:uQsPz27E
まぁ、記事自体5年以上前だし今の実装がそのままかどうか解らんから最新の環境の中をチラ見してみるのも一興じゃないかな
0712デフォルトの名無しさん2016/12/22(木) 01:11:23.48ID:kb3vxaUU
C++のライブラリって内部でC言語関数呼んでたりするから
遅くなっても速くなることはない気がするんだけど
0713デフォルトの名無しさん2016/12/22(木) 08:33:08.27ID:/kaZRMcK
ソート
0714デフォルトの名無しさん2016/12/22(木) 09:22:57.56ID:oqG6b75c
iostream系は超絶複雑杉るから流行らずに消えてゆく運命にある
0715デフォルトの名無しさん2016/12/22(木) 10:26:29.07ID:RBqM6sio
printf系はあれはあれで意外と可読性が良いからな
フォーマット文字列と引数の対応を間違ったらアレっていう問題はあるが
0716デフォルトの名無しさん2016/12/22(木) 10:32:56.90ID:RBqM6sio
あと、初心者がやりがちなミスとして
外部から入力された文字列をそのままprintfに渡しちゃうっていうやつ
文字列に%dとかが入ってるとヤバイ
その辺は気をつけなきゃダメだけど
iostreamより可読性自体は良いんだよねぇ
0717デフォルトの名無しさん2016/12/22(木) 13:16:20.95ID:RhVrJNPB
どちらかと言うとiostream系はオーバーロードのためにあるような気がする
0718デフォルトの名無しさん2016/12/22(木) 13:35:46.24ID:duhm3nbB
ランダムに生んだ点をx座標の小さい順にvectorに入れていきたいんだけど
ソートじゃなくてね,入れるときに並べときたい
それでこんな感じでしたらエラー出てしまった なんでかな?

vector<Point> points;
for(int i=0;i<100;i++){
Point new(rand()%i,0);
if(points.size()!=0){
int k=0;
for(auto it=points.begin();it!=points.end();it++){
Point tmp = (Point)(*it);
if(new.x < tmp.x) points.insert(points.begin()+k, new);
else if(i+1==points.size()) points.push_back(new);
else k++;
}
}
else points.push_back(new);
}
0719片山博文MZ ◆T6xkBnTXz7B0 2016/12/22(木) 13:52:19.95ID:rnqjScPf
>>718
newはキーワード。別名にせよ。
0720デフォルトの名無しさん2016/12/22(木) 13:56:28.13ID:duhm3nbB
>>719
すみません 適当な名前にしてみたところ出来ませんでした。

Expression:vector iterator not incrementable

だそうですが,どうしてでしょうか?
0721デフォルトの名無しさん2016/12/22(木) 14:29:58.93ID:oqG6b75c
>>718
バイナリソートか
vectorならヒープソート使った方が良い希ガス
0722片山博文MZ ◆T6xkBnTXz7B0 2016/12/22(木) 14:35:06.68ID:rnqjScPf
>>720
ideoneに上げろ。
0723デフォルトの名無しさん2016/12/22(木) 14:49:04.38ID:/ytrOsGa
死ぬほど効率悪いな
0724デフォルトの名無しさん2016/12/22(木) 15:08:00.97ID:duhm3nbB
>>721
エラーが出ずにこの順に追加できるなら何でもいいです

>>722
少しやってみます.

>>723
どう改良すればよいですか?
0725デフォルトの名無しさん2016/12/22(木) 15:16:58.19ID:duhm3nbB
>>722
これで上げ方あってますでしょうか?
上げる用に多少変えましたが,こんな感じです.

http://ideone.com/AoWC3A
0726デフォルトの名無しさん2016/12/22(木) 15:28:35.64ID:V2qxRM4o
rand()%0にならないほうがいい
0727デフォルトの名無しさん2016/12/22(木) 15:38:54.62ID:duhm3nbB
>>726
ご指摘ありがとうございます,その通りでした.
修正してみましたが,まだ上手くいきませんでした.
vectorがおかしいみたいです
0728デフォルトの名無しさん2016/12/22(木) 15:45:54.11ID:V2qxRM4o
insertするときにkの値がvectorのサイズより大きくなってるよ
0729デフォルトの名無しさん2016/12/22(木) 15:47:33.76ID:k8IxKIg+
>>727
基本的にオリジナルのコードを尊重

#include <iostream>
#include <vector>
#include <stdio.h>
#include <cstdlib>
using namespace std;
struct Point{
int x, y;
};
int main() {
vector<Point> points;
for (int i = 0; i < 100; i++) {
Point pt = { rand() % (i + 1), 0 };
if (points.size() < 1) {
points.push_back(pt);
continue;
}
for (auto it = points.begin(); it != points.end(); ++it) {
if (pt.x < it->x) {points.insert(it, pt); break;}
else if (it + 1 == points.end()) {points.push_back(pt); break;}
}
}
for (int i = 0; i < points.size(); i++) {
cout << points[i].x << endl;
}
return 0;
}
0730デフォルトの名無しさん2016/12/22(木) 15:52:39.03ID:duhm3nbB
>>728 >>729
できました.
insertしたあとにbreakしないといけなかったんですね.
無事に解決しました,ありがとうございました.
0731デフォルトの名無しさん2016/12/22(木) 15:53:09.33ID:V2qxRM4o
pushしたあとbreakすればいいんじゃね
0732デフォルトの名無しさん2016/12/22(木) 16:05:21.54ID:oqG6b75c
http://ideone.com/zKEbJr
y座標はなにに使うんだ??
0733デフォルトの名無しさん2016/12/22(木) 16:26:05.92ID:oqG6b75c
http://ideone.com/iJulZX
順列乱さないで追加ならこんな感じなりかのう
0734デフォルトの名無しさん2016/12/22(木) 17:11:12.46ID:oJ9BUBiV
なんかすごい盛り上がってるね
どうしたの?
0735デフォルトの名無しさん2016/12/22(木) 17:25:12.22ID:oqG6b75c
http://ideone.com/LYqoaT
lower_boundも昔の扱いだと値が一致しない場合、end返すんだっけな?
自分、昔自作したinsert_posっての使ってやってみるとこんな感じ…
quick_sortの位置返し版みたいなやつ
0736デフォルトの名無しさん2016/12/22(木) 17:32:34.32ID:E3eibBgy
>>735
beginのときもあるんじゃない?
0737デフォルトの名無しさん2016/12/22(木) 17:42:59.92ID:oqG6b75c
なんかね、値が一致しない場合、ココら辺りぁゃιぃんだよね
次の反復子返すライブラリとend返すやつとまたはbeginなのか?
0738デフォルトの名無しさん2016/12/22(木) 17:47:13.98ID:E3eibBgy
>>737
つねに[begin, end)の中に該当物がある、と覚えておけばいいんじゃないか
0739デフォルトの名無しさん2016/12/22(木) 17:57:02.94ID:WpoSlvHb
rendじゃないのか
0740デフォルトの名無しさん2016/12/22(木) 17:59:55.76ID:91Kua5tc
>>736
無いだろう
0741デフォルトの名無しさん2016/12/22(木) 18:09:01.81ID:E3eibBgy
>>737
間違えた
[lower, upper)の中
ね
0742デフォルトの名無しさん2016/12/22(木) 18:47:02.19ID:sqn1ckjA
製作したexeが予定では
win10 win7の
32ビット環境・wow64環境・64ビット環境で使えるようにする予定だったのですが
32ビット環境以外では動作がぼこぼこでどういうところを注意すれば良いかアドバイス頂けないでしょうか...
sizeof演算子のようなバイト数で変わりそうなものは利用してないです
0743デフォルトの名無しさん2016/12/22(木) 21:03:10.94ID:YR5bk+a5
Wow64でだめなら自分のコードじゃなくて糞ライブラリだろきっと
0744デフォルトの名無しさん2016/12/23(金) 09:35:24.61ID:ynZqqi62
むしろビット数で変わりそうなものをきっちり使えよ。
size_tとかな。
LLP64だからポインタをlongに入れるとかお行儀悪いことをしたら死ぬ
0745デフォルトの名無しさん2016/12/23(金) 12:27:57.34ID:xkktLNTS
wow64で単体で動く分には問題になったことないな。
64bitプロセスとかドライバとやりとりするときくらいかな。
何がぼこぼこなんだ。そもそもぼこぼこってのがどういう意味?
0746デフォルトの名無しさん2016/12/23(金) 13:49:39.13ID:2uBTaJD7
>>744
データのメモリレイアウト変わったら互換性が脅かされるだろドアホ
0747片山博文MZ ◆T6xkBnTXz7B0 2016/12/23(金) 13:51:51.50ID:3xdKhrkh
<cstdint>使え。で終わり。
0748デフォルトの名無しさん2016/12/23(金) 14:02:35.26ID:2uBTaJD7
int32_tが無い可能性について断わらんと刺されるぞおまえ
0749デフォルトの名無しさん2016/12/23(金) 14:34:14.93ID:gcrFo8Yk
完全に互換性のあるコードを書こうと思うところからが既に間違いだろ
0750デフォルトの名無しさん2016/12/23(金) 18:57:05.52ID:XiISUE9C
鉞もったおっさんが茂みからこちらを伺っている
0751デフォルトの名無しさん2016/12/23(金) 19:21:12.14ID:B95XUOMz
動作がぼこぼこでってのは大まかに書きすぎたわ
会社の製品だから内部について詳しく書けないが概要を話すと
オブジェクトとして32bitと64bit用のdll読み込んで実行するexeを作成中だった
簡単に言えばそのdllのテストをするexe

32bit環境と64bit環境で違いはないと思っていたんだが
WaitForSingleObject使ったところでスレッドの処理順序が逆になったりとか微妙なさが生まれてる
逆ってのは

スレッドA B(Bがサブ)が存在しているときに
Aが待機してBが処理を投げるってのをすると
A待機→Bがイベント生成→B終了→A続行ってやりたかったのが
A待機→Bがイベント生成→A続行→B終了みたいな順序になってしまったっぽい
解析はまだしてないから確定ではないが月曜に備えて学んでおきたいんだ
0752デフォルトの名無しさん2016/12/23(金) 19:29:54.56ID:RIl3d4il
うぇ?ソースが逝かれてんじゃないのか?
0753デフォルトの名無しさん2016/12/23(金) 19:30:49.21ID:B95XUOMz
>>752
と言うとビルドの時に壊れたってことだろうか?
0754デフォルトの名無しさん2016/12/23(金) 19:52:00.19ID:BpfBtVzR
>>753
もともとコードに問題があって不定な動作になってたのが、環境によって違う結果になったとか。
0755デフォルトの名無しさん2016/12/23(金) 19:56:02.26ID:B95XUOMz
>>754
元々のコードについては何ら問題はないはず
一応32bitの環境では意図通り動作してくれてるからさ
ただdllの中身の話と、あと32とwow64・64の違いの話で何かしら注意することがあるなら
もっと知りたいと思って恥を忍んできてる
sizeof演算子だったりsize_tだったりは使用してないから影響ないだろうと浅はかに考えていてこうなっている
0756デフォルトの名無しさん2016/12/23(金) 20:01:29.50ID:tydkaaKw
>>751
単にマルチスレッドを理解してないだけじゃ...
> A待機→Bがイベント生成→B終了→A続行ってやりたかったのが
そもそも今時のPCだとB終了とA続行がほんとに同時に動くこともあるし
0757デフォルトの名無しさん2016/12/23(金) 20:32:03.67ID:h0dHaDo6
とりあえずここでも読んだら?
https://msdn.microsoft.com/ja-jp/library/bb427430(v=vs.85).aspx
自分が引っかかったのは、LPARAMの型が32bitと64bitで変わっていたことぐらいかな。
0758デフォルトの名無しさん2016/12/23(金) 20:41:37.05ID:2E3hGVLc
>>755
A待機→Bがイベント生成→B終了→A続行って動作を保証するには
Bの終了確認→A続行って作り込んでなきゃいけないが
そんなことせずにOS任せにしてたらそう動いてたというだけの話だろ
それが問題かどうかは知らないが
0759デフォルトの名無しさん2016/12/23(金) 22:07:47.02ID:hTM2VAPk
GUIでも64bitの時だけバグが発生するコントロールとかあったはず
0760デフォルトの名無しさん2016/12/23(金) 22:43:21.33ID:B95XUOMz
>>758
WaitforSingleobgectでそれは保証されてると俺は考えていた
それとは別にだろうか

>>756
>>757
>>759
少し読んでみるわ
速度が早すぎるとほぼ同時実行なんだな
何かで越えてしまったのだろうか
0761デフォルトの名無しさん2016/12/24(土) 00:12:51.73ID:pRsMHrqN
>A待機→Bがイベント生成→B終了→A続行ってやりたかった

もうこの時点でUNKO確定
>>758の助言もなんのその
0762デフォルトの名無しさん2016/12/24(土) 00:34:42.73ID:AuIvJJ/c
>>760
察するにBの終了コードでも欲しかったんだろうけど、
イベント待ちをするのではなく、
WaitForSingleObject(Bのスレッドハンドル,...)
のようにして、Bの終了待ちにしないとだめです。
0763デフォルトの名無しさん2016/12/24(土) 00:43:38.00ID:pRsMHrqN
関係ないものの待ち合わせをしておいておかしいと気づかないアフォには無理
特に
『元々のコードについては何ら問題はないはず
一応32bitの環境では意図通り動作してくれてるからさ』
ここまで知能が低いと生きているのも辛いだろう
0764デフォルトの名無しさん2016/12/24(土) 00:59:51.41ID:13QAQt3w
っていう自分では何の助言もしないゴミクズのレスはスルー推奨な
0765デフォルトの名無しさん2016/12/24(土) 01:23:17.09ID:c2QXRfZm
>>760
AがCreateEvent
Bにハンドルを渡してBの処理開始
AがWaitFor で待機
Bが終了するタイミングでSetEvent
AのWaitForの待機が終わる

普通はこれでおかしくならないと思うけど。
0766デフォルトの名無しさん2016/12/24(土) 02:03:27.96ID:Nwl7kpj0
いつまでWINAPI使ってるんだ
0767デフォルトの名無しさん2016/12/24(土) 05:48:56.42ID:pRsMHrqN
その普通では満足できない危篤な質問者に>>762が折角ひとつの答えを示したというのに自分の普通を押し付ける>>765
スレッドの終了を待つ必要がある例を示した>>762のレスなどなんのその
0768デフォルトの名無しさん2016/12/24(土) 07:28:55.50ID:hL5gqOrj
http://ideone.com/eLuYYZ
よし、どうにか20行以内に纏まったぞ
0769デフォルトの名無しさん2016/12/24(土) 08:35:36.98ID:8lcOa/+v
>>765
内部でやってるのこれなんだよね

>>762と>>765の違い何かあるのだろうか
>>767を見る限りでは何かあるような感じなのだが....
0770デフォルトの名無しさん2016/12/24(土) 08:39:38.34ID:dPbQS77J
>>765
> Bが終了するタイミングでSetEvent
こう書く人は

# Thread-A    Thread-B
---------------------------
1 WaitForSingleObject
2           SetEvent
3           ExitThread
4 GetEixtCodeThread

のようなコードを書いてそうでちょっと怖い
0771デフォルトの名無しさん2016/12/24(土) 08:58:48.31ID:c2QXRfZm
>>770
スレッドの終了コードを取りたいとはもともと言ってないのだから
スレッドの終了を待つ必要はないんじゃないのか?
スレッドの終了を待ちたいのならスレッドハンドルで待機する必要があるけど。
0772デフォルトの名無しさん2016/12/24(土) 09:26:03.14ID:jiDVWPIU
スレッドの終了を待つ必要がないなら、>>751 の
>A待機→Bがイベント生成→B終了→A続行ってやりたかったのが
>A待機→Bがイベント生成→A続行→B終了みたいな順序になってしまったっぽい
は、どちらの順序でも問題がないはず。
0773デフォルトの名無しさん2016/12/24(土) 10:00:21.96ID:hL5gqOrj
beginthreadexを待ち無し(create suspended)でやっちゃっているオチとかないよな
0774デフォルトの名無しさん2016/12/24(土) 10:11:57.24ID:dPbQS77J
>>771
終了コードの取得は単なる例
言いたいのは
> Bが終了するタイミングでSetEvent
なんて書いちゃダメって話
終了と SetEvent は同時にはできない
なので SetEvent とスレッドの終了の間には必ず隙間が生じる
その隙間に他のスレッドが動作しておかしくなる
って言うのはマルチスレッドに慣れてない人がよく陥るミスの一つ
0775デフォルトの名無しさん2016/12/24(土) 10:18:42.02ID:pRsMHrqN
今日は健常者が二人もいるな
それに引き替え>>769の日本語も読めない>>773は一体…
『内部でやってるのこれなんだよね』

ここはひとつ、スレッドの終了コードにする予定だった値を代わりに独自の変数に入れてからSetEventする方式をすすめるべきではないだろうか
0776デフォルトの名無しさん2016/12/24(土) 10:34:27.86ID:hL5gqOrj
>>775
スレッド作成時のことを言っているんだが
状況もすんなり理解出来ないほど堅物なの?
0777デフォルトの名無しさん2016/12/24(土) 10:40:23.81ID:13QAQt3w
>>776
触るなよ
0778デフォルトの名無しさん2016/12/24(土) 11:15:46.54ID:dPbQS77J
この流れでいきなりスレッド作成時云々とか言い出す奴 w
0779デフォルトの名無しさん2016/12/24(土) 11:25:36.19ID:hL5gqOrj
おれのエスパーがざわついただけだから
おまいらなんの解決策も提示できていない癖に口だけは達者だな
0780デフォルトの名無しさん2016/12/24(土) 11:46:30.68ID:A+UuIzca
ID:hL5gqOrj以外は解決策提示してるけど
どんだけ嘘つきなの
0781デフォルトの名無しさん2016/12/25(日) 10:32:25.63ID:0PY0aCVg
class B{ virtual void func(const B& o)=0;}
class D1 : public B{void func(const B& o);};
class D2 : public B{void func(const B& o);};
...
class Dn : public B{void func(const B& o);}:

funcはDiとDjの組み合わせで変化する関数ですが
各Diクラスのfuncを実装する場合
DiクラスでD0~Dnに対するfunc_jを定義
Diクラスのfuncの実装でdynamic_castを使い?func_jに誘導?

なんか筋が悪い気がしますが、他にやり方ありますか?
0782デフォルトの名無しさん2016/12/25(日) 10:55:52.46ID:gzohGyN7
>>781
dynamicしなくてもDj::funcで呼び出せるやろ
0783デフォルトの名無しさん2016/12/25(日) 10:59:07.88ID:0PY0aCVg
すると基底クラスに全てのDiに対するvirtual func_iが必要な気がしますね
0784デフォルトの名無しさん2016/12/25(日) 11:00:28.97ID:gzohGyN7
>>781
ていうか継承した関数を後継でも使用する場合はprotectedにしておかないとそのままでは呼び出せんぞ
0785デフォルトの名無しさん2016/12/25(日) 11:28:39.39ID:kHsO0S5C
visitorかな
0786デフォルトの名無しさん2016/12/25(日) 11:29:58.40ID:Lu3Vvdec
C言語を勉強せずにC++を勉強しても理解できるものでしょうか?
0787デフォルトの名無しさん2016/12/25(日) 11:44:37.67ID:kHsO0S5C
>>781
http://ideon.com/46KJPS
0788デフォルトの名無しさん2016/12/25(日) 11:45:13.17ID:kHsO0S5C
間違えた
http://ideone.com/46KJPS
0789デフォルトの名無しさん2016/12/25(日) 11:58:11.55ID:crG++i4M
>>787
https://www.youtube.com/watch?v=g2ig-iQU9mo
0790デフォルトの名無しさん2016/12/25(日) 12:12:43.43ID:dmtrl+ZZ
>>781
> funcはDiとDjの組み合わせで変化する関数ですが
どう変化するのかを書かないとなんとも
0791デフォルトの名無しさん2016/12/25(日) 12:31:52.27ID:hxH29S3q
>>781
「ダブルディスパッチ」でググると幸せになるかも
0792デフォルトの名無しさん2016/12/25(日) 12:38:31.50ID:6QEq7FnE
>>786
C++は全く思想が異なる言語がC言語の振りをしている。
という指摘が一番合っているかと。少し前のMSDNでも
テンプレート使ってprintf実装するなんて話があったぐらい。
0793デフォルトの名無しさん2016/12/25(日) 13:33:20.29ID:S3W4YDfq
>>746
もはや流れと違ってるからツッコむのもアホらしいが、
windowsなら32bitと64bitでDLLのバイナリ互換がないから
データのメモリレイアウトが変わったところで何ら問題がない。
ファイルやパイプを介して結合するなら、エンディアン含めて
環境に依存しないシリアライズを考えるだけ。
データのメモリレイアウトが変わって困るようなプログラムが糞だろw
0794デフォルトの名無しさん2016/12/25(日) 13:59:08.36ID:d1z2kMp7
>>791
むしろ不幸になるような気がする
0795デフォルトの名無しさん2016/12/25(日) 14:26:29.61ID:D6Y6Gc11
>>786
うん、できる。
俺でもできたんだから
みんな大丈夫なはず。
0796デフォルトの名無しさん2016/12/25(日) 15:08:55.85ID:SibbJTGE
>>786
むしろ理解しやすいかも
0797デフォルトの名無しさん2016/12/25(日) 15:13:01.88ID:crG++i4M
C++はCよりコンパイル時の型チェックが厳しいから、初心者にはC++の方が便利だと思う。
実行時に意図しない動作されるよりは、コンパイルエラーになった方がはるかに楽だから。
0798デフォルトの名無しさん2016/12/25(日) 17:13:02.45ID:Lu3Vvdec
ありがとうございます。
では、このまま勧めて勉強していきたいと思います。
0799デフォルトの名無しさん2016/12/25(日) 18:17:49.05ID:S3W4YDfq
>>798
他人の話かよ
0800デフォルトの名無しさん2016/12/25(日) 19:09:35.10ID:Lu3Vvdec
>>799
グループ内での話です。
すいません。
0801デフォルトの名無しさん2016/12/25(日) 19:42:55.04ID:S3W4YDfq
えーっと、ツッコまれた意味わかってんのかな…
0802デフォルトの名無しさん2016/12/26(月) 05:51:22.17ID:HXwuwdhI
「進めて」を「勧めて」に誤変換しただけだろ
0803デフォルトの名無しさん2016/12/26(月) 06:36:04.57ID:lGaHGaRq
グループ学習なら「勧めて」でも辻褄は合ってる、かも。
0804デフォルトの名無しさん2016/12/26(月) 14:44:41.19ID:bkz3PoYD
こんな感じでソートしてるんですが滅茶苦茶遅いです…
要素たった二つなのに激遅です… なんででしょうか??

class A{ int a; };
class B : public A{ int t; };
struct g {
bool operator() (const B* &p1, const B* &p2) const {
return(p1->a > p2->a);
}
};
std::list<B*> b_list;
B *p1 = new B(); p1->a = 0;
B *p2 = new B(); p2->a = 1;
b_list.push_back(p1);
b_list.push_back(p2);
b_list.sort(g ());
0805デフォルトの名無しさん2016/12/26(月) 15:47:38.29ID:B60orki6
>>804
コンパイルが通らない。エラーログを見落としていて、最後にビルド成功した古い実行バイナリの挙動を見ているだけなのでは?
0806デフォルトの名無しさん2016/12/26(月) 16:24:18.78ID:bkz3PoYD
>>805
いやちょっと今環境が無いのと急いで書いたので
ここではコンパイル通らないコードが含まれてるかもしれないんですが
実際には通ってるんです…
ちょっとわかりにくくてすみません。
0807デフォルトの名無しさん2016/12/26(月) 16:58:02.40ID:1PwuyQJn
一見遅そうには見えない
0808デフォルトの名無しさん2016/12/26(月) 17:12:30.18ID:0UQS5t27
環境依存かと
Wandbox等で確認してみては
0809デフォルトの名無しさん2016/12/26(月) 17:15:43.99ID:B60orki6
>>806
Windows10では最近のアップデートで、アクセス違反が発生した時にエラーダイアログが出ずに裏でエラーレポート作成アプリが走るようになっている。
アプリがクラッシュしててOSによるダンプデータ収集に時間かかっているのでは?
0810デフォルトの名無しさん2016/12/26(月) 17:16:12.27ID:bkz3PoYD
>>807
>>808
そういえば昔、Pentiumマシンで実行した時は遅くなかったような気が…
ありがとうございます。もうちょっと調査してみます!
0811デフォルトの名無しさん2016/12/26(月) 17:17:16.70ID:bkz3PoYD
>>809
なるほどです。その辺もしらべてみます!
0812デフォルトの名無しさん2016/12/26(月) 21:12:17.54ID:wb4zf1kz
listってチェーンリンカーだから遅いのかね
0813デフォルトの名無しさん2016/12/26(月) 22:20:10.81ID:K9pbdry/
>要素たった二つなのに激遅です
 ↓
>listってチェーンリンカーだから遅いのかね

リテラシーが足りないのではないだろうか
0814デフォルトの名無しさん2016/12/26(月) 23:52:43.74ID:wb4zf1kz
listの感想を述べたまでだしなぜ2つの違う物事を無理矢理結び付けようとするのかね?リテラシーに欠けるね
0815デフォルトの名無しさん2016/12/27(火) 02:32:57.36ID:SQsOUYP2
プロレスやめろ
0816デフォルトの名無しさん2016/12/27(火) 08:36:45.20ID:CVPZfFKk
いきなり自分の感想をこのスレに書くとかリテラシー以前の話かと
08178042016/12/27(火) 09:30:09.78ID:REz3izgi
大変ご迷惑をおかけしました!
newとdelete演算子を定義し直してメモリ状態をチェックするようにしてたのですが
それが原因でした!!自分のプログラムのせいでした!
実際には要素二つをループの中でずっとソートしてたので
ソート中にSTL(sortメソッド)が内部でnewとdeleteを繰り返してたのが原因だったようです。
0818デフォルトの名無しさん2016/12/27(火) 09:49:38.32ID:mf9uACo2
>>817
純粋な疑問なんだけどさ、なんでメモリ状態の確認に既存のツール使わないの?
0819デフォルトの名無しさん2016/12/27(火) 09:55:30.83ID:ooIzE4iM
>>816
おまえ今感想書いているじゃねぇかよハゲ
0820デフォルトの名無しさん2016/12/27(火) 10:17:24.26ID:sjoi84j7
64bit32bitWow64で質問してた人です
解析していったら読み込んでるdllの方に不具合が見つかりました
ご意見ありがとうございました
0821デフォルトの名無しさん2016/12/27(火) 12:43:01.75ID:CVPZfFKk
>>819
どう見たら感想に見えるんだよ...
それこそリテラシー無さすぎやろ w
0822デフォルトの名無しさん2016/12/27(火) 14:10:07.58ID:3ZgUrie8
プロレスやめろ
0823デフォルトの名無しさん2016/12/27(火) 17:18:42.02ID:B94R3vH/
ゼイリブか
0824デフォルトの名無しさん2016/12/27(火) 19:56:42.70ID:vDOdsba4
>>821
会話の流れ無視していきなりlistの感想述べるバカに構わないで
0825デフォルトの名無しさん2016/12/27(火) 20:44:49.67ID:ooIzE4iM
>>824
ID変えて自演してんじゃねーよハゲ
0826デフォルトの名無しさん2016/12/27(火) 21:19:53.66ID:bExJ5BFF
なんでも自演に見えるとかほとんど病気だな
0827デフォルトの名無しさん2016/12/27(火) 21:41:32.30ID:taDSxYLE
別に自演してるつもりはないし >>813=>>824=俺 は>>821ではない

>>826
統合失調症になると何でも自演に見えることがあるらしい
でも不治の病だとか
0828デフォルトの名無しさん2016/12/27(火) 22:22:25.93ID:70y60g+7
http://i.imgur.com/8urPI1X.png
たとえば、C2143のエラーに対して「こういうミスによるエラーの可能性が多い」みたいな感じの文章を
追加で表示(出力?)するようにしたいのですが、エラーメッセージを編集することは可能でしょうか?
0829デフォルトの名無しさん2016/12/28(水) 01:12:00.11ID:ETTH3dv3
>>818
どんな環境でもログに残せるようにしてました。
0830デフォルトの名無しさん2016/12/28(水) 04:00:48.47ID:yWrP/m5t
>>829
考え方が俺と逆だなぁ
0831デフォルトの名無しさん2016/12/28(水) 11:03:34.04ID:J8k3KBrD
どんな環境でも動かせるようにしてたら強力なメモリエラーチェックツールのある環境でテストしたらいいよね。なんでわざわざ貧弱なものを再発明してまで特定の環境上で動かしたがるのか解らない
0832デフォルトの名無しさん2016/12/28(水) 12:12:38.46ID:1k+b+5LA
単体テストで完璧に押さえておくべきことを
結合テスト以後に持ち越してるのかなあ
0833デフォルトの名無しさん2016/12/28(水) 16:48:27.51ID:mX+MonYx
C++で依存型はどうやるの?
0834デフォルトの名無しさん2016/12/28(水) 18:05:01.05ID:Pde3P7vx
ソフトウェア開発企業の方法論をさも普遍的であるかのように振りかざされても…
0835デフォルトの名無しさん2016/12/28(水) 19:01:21.75ID:N788bEQH
まったくだ。
0836デフォルトの名無しさん2016/12/29(木) 14:33:44.12ID:Tbw9F1U5
>>833
まず君の「依存型をやる」の定義を述べたまへ
0837デフォルトの名無しさん2016/12/29(木) 15:00:27.91ID:B8IUc9rj
kill dependent type.
0838デフォルトの名無しさん2016/12/29(木) 15:39:46.00ID:QycqsppM
C++の建設的な話題はないの?
0839デフォルトの名無しさん2016/12/29(木) 16:34:38.37ID:B8IUc9rj
C++から使える正規表現ライブラリで一番速いのってどれなんだろう?
最近4年以内測定結果ないかな?
0840デフォルトの名無しさん2016/12/29(木) 16:47:17.04ID:bUdbWaJH
>>839
stlじゃ不満?
0841デフォルトの名無しさん2016/12/29(木) 18:29:34.32ID:B8IUc9rj
>>840
regexがC++標準機能になって数年が経ち、非stdな正規表現ライブラリの存在意義について現状把握したくなった次第
0842デフォルトの名無しさん2016/12/29(木) 19:25:53.51ID:AiXb9Xql
正規表現使ったら競プロでTLEした。std::regex死ね
0843デフォルトの名無しさん2016/12/29(木) 19:39:41.23ID:4SBHJX0Y
裏インターネット#1085
0844デフォルトの名無しさん2016/12/29(木) 20:27:08.08ID:mmdDlTxQ
正規表現ライブラリは鬼車/鬼雲、RE2、PCRE-JITが混戦状態じゃないのかな
ライブラリ以外ではGNU egrepが最速なのは相変わらずだと思うけど
0845デフォルトの名無しさん2016/12/29(木) 20:37:24.10ID:B8IUc9rj
>>844
なるほど。egrepってことは、事実上PCRE。
windows環境に関して言えば、pcre2を使ったサンプル実行ファイルである pcre2grep は、 msys の grep -E よりさらに速いので色々謎。
0846デフォルトの名無しさん2016/12/29(木) 20:46:06.10ID:mmdDlTxQ
>>845
egrepはPCREじゃない自前の方のつもりで書いた
0847デフォルトの名無しさん2016/12/30(金) 06:49:45.51ID:0ZFj7vnK
ソースコード整形プログラム AStyle を使ってる人、どのくらいいるかわからないが最新版が来たようなので、一応貼っとくわ。

Artistic Style(AStyle) 2.06
https://sourceforge.net/projects/astyle/
2016-12-27
0848デフォルトの名無しさん2016/12/30(金) 07:26:12.73ID:0ZFj7vnK
今となっては、boostの正規表現ライブラリ boost::regexのstd::regexに対する優位性は、文字クラスに"unicode"を使えることぐらいかねぇ。
0849デフォルトの名無しさん2016/12/30(金) 07:54:52.18ID:l5WpNL3H
この文字はUnicodeだ、みたいな識別があるのですか
0850デフォルトの名無しさん2016/12/30(金) 08:40:14.55ID:n0+bjvYh
UCS-2相当の物をUnicodeと言ってるなら死語(UCS-2も)になって10年経つんだからそろそろ頭の中更新してほしいよね
0851デフォルトの名無しさん2016/12/30(金) 20:39:13.07ID:F4cb6AGO
Unicode規格によるとUCS-2が死語になったのはISO/IEC 10646:2011からとあるのだが
10年前に何があったのか
0852デフォルトの名無しさん2016/12/31(土) 19:44:49.13ID:1zLOHjMk
正規表現って覚えておいた方が良いものかな?
0853デフォルトの名無しさん2016/12/31(土) 19:55:54.01ID:RP5GqFRc
>>852
テキストの一部からデータ取り出したりが楽になるから覚えていて損はない
そもそもそんなに難しいものでもないし
0854デフォルトの名無しさん2016/12/31(土) 19:58:53.31ID:bmD+g+A2
>>852
プログラム内で使うよりも、テキストエディタの機能や、コマンドラインのツールで使うことが多いかな。
ツールとして覚えておいて損はないと思う。
0855デフォルトの名無しさん2016/12/31(土) 20:05:26.98ID:1zLOHjMk
>>853
>>854
全然学んでないから知識がないから学んでみるよ
データ整理が楽になるのかな
0856片山博文MZ ◆T6xkBnTXz7B0 2016/12/31(土) 20:12:12.83ID:JCMJkH4b
例えば正規表現で
「(。|、)$」→「」と置き換えすれば、行末の句読点を取り除くことができる。
「(\d+|[0123456789]+)」→「【\1】」と置き換えすれば、数字の並びを【】で囲むことができる。
0857デフォルトの名無しさん2016/12/31(土) 23:10:24.57ID:1zLOHjMk
>>856
string型に入ってる奴にやるんだよね?
勉強の序列低いが早めにすべきなのかな
業務にいきそうだ

ちなみに正規表現を違う箇所に応用できたりする?
0858デフォルトの名無しさん2016/12/31(土) 23:21:26.60ID:Kmz/fYBF
MDN, Ruby, Python とか、正規表現はどこにでも載っている
0859デフォルトの名無しさん2016/12/31(土) 23:53:29.69ID:dx9vbJE4
>>857
正規表現の入門にはここを勧めてる
http://qiita.com/jnchito/items/893c887fbf19e17d3ff9
検索して始めに出てくるサルにも〜は分かりにくかったが
こちらはステップが整理されてて二日ほどでかなり理解できるようになった
0860デフォルトの名無しさん2017/01/01(日) 13:06:23.86ID:/PcE0jFZ
>入門にはここを勧めてる
匿名掲示板でいきなり自分語りし始める奴w
0861デフォルトの名無しさん2017/01/01(日) 13:36:30.73ID:YlDkqvBj
>>859
オッ 有難い
0862デフォルトの名無しさん2017/01/01(日) 14:43:43.14ID:t97nghu2
>>860
有用な情報が含まれてるなら、自分語りでも何でもいいよ。単なる茶々入れよりよほどいい。
0863デフォルトの名無しさん2017/01/01(日) 14:54:44.07ID:Z1rYB3lC
正規表現使うと、入力の正当性チェックもできるよ
日付とかメールアドレスとか、桁数含めた数値チェックとか
0864デフォルトの名無しさん2017/01/01(日) 15:51:28.82ID:iPavsRR3
プログラミング必修化というが、正規表現をリテラシーとして教えた方がいい
文系でも事務に使えるし
0865デフォルトの名無しさん2017/01/01(日) 19:22:56.00ID:3ABdABSG
関数テンプレートのテンプレート引数がベースクラスを継承しているかのチェックをしようと
is_base_of を使った部分特殊化の方法を試したのですが、そもそも関数テンプレートは
部分特殊化できないことを知り困っています。
具体的なコードは以下ですが、こういう場合どうすればいいでしょうか?

http://ideone.com/5eUtRr

適合しないものは弾くような仕組みにしないとコンパイルエラーがドパーと出てきて大変なので・・・
0866デフォルトの名無しさん2017/01/01(日) 19:35:56.90ID:HLv5dR03
正規表現になぜ「正規」=retular という語句が冠せられているかぐらいは、その手の教科書を読まないとね
いいのありませんか?
0867デフォルトの名無しさん2017/01/01(日) 19:36:17.54ID:HLv5dR03
regular
0868デフォルトの名無しさん2017/01/01(日) 19:52:26.65ID:d6FH7xPK
>>865
その程度ならSFINAEで何とかなりそうだが部分特殊化したいならクラステンプレートを作って処理を任せるしかない
template<typename T, typename U>
struct unko_impl {
static int f(T , U ) {…}
};

template<…> struct unko_impl<…, …> {
特殊化
};

template<typename T, typename U>
int unko(T &t, U &&u) {
return unko_impl<T, U>::f( forward<T>(t), forward<U>(u) );
}
0869デフォルトの名無しさん2017/01/01(日) 20:37:00.14ID:H4wHe4cD
非正規表現
0870デフォルトの名無しさん2017/01/01(日) 21:31:53.32ID:jsYYlNsD
>>866
計算理論の基礎
0871デフォルトの名無しさん2017/01/02(月) 02:41:11.52ID:cNm7joN7
>>868
ありがとうございます。SFINAEで何とかなるというのは、以下のoperatorについて
SFINAEを使うという意味でしょうか?例をいただけると助かります

template <class T>
ostream& operator << (ostream& os, const Base<T>& base)
0872デフォルトの名無しさん2017/01/02(月) 09:59:06.00ID:gBF+qdso
あけおめこ!
0873デフォルトの名無しさん2017/01/02(月) 15:21:19.01ID:cNm7joN7
すいません>>871は無視してください
自分で考えてみます
0874デフォルトの名無しさん2017/01/02(月) 16:56:07.98ID:b/RASLC2
>>870
amazon リンクで頼む
0875デフォルトの名無しさん2017/01/04(水) 00:07:09.31ID:wOLmnoYC
VC++の正規表現って全角数字が\dにヒットするけどこれって仕様通りなの?
0876デフォルトの名無しさん2017/01/04(水) 00:24:46.75ID:H7YeB4ee
>>875
おそらく仕様通り
http://www.cplusplus.com/reference/regex/regex_traits/imbue/
デフォルトはグローバルに設定されてるlocaleに従う
0877デフォルトの名無しさん2017/01/04(水) 03:30:01.56ID:rabvmYP6
江添はなんて言ってる?
0878デフォルトの名無しさん2017/01/04(水) 09:30:33.56ID:oS0JsegY
質問ではない
0879デフォルトの名無しさん2017/01/04(水) 09:53:11.57ID:4nJc+6+v
ちょいちょい江添言うなこいつ
ちゃんと聞いて来いよwwww
0880デフォルトの名無しさん2017/01/04(水) 09:57:08.10ID:zzeNA6vA
江添は一般コメント受け付けてるんだから直接聞けばいいのにな
くだらん個別質問すぎて相手されんのだろうけど
0881デフォルトの名無しさん2017/01/04(水) 16:54:18.44ID:Gyk6VmEd
「江添はなんて言ってる?」は一種の言葉遊びじゃないかな。
リズムネタとか合いの手みたいな感じ。
もちろん「江添さんの文書に載ってるんじゃね?」という
気持ちでの書き込みもあるだろうけど。

こんな場で、ある種の最高権威として引き合いに出されたり
いじられたりしてるのをご当人は知ってるのかな、どう思ってるのかな?
(という流れに乗せて合いの手を入れます)
0882デフォルトの名無しさん2017/01/04(水) 19:39:15.10ID:zzeNA6vA
最高権威は禿だよ
江添は禿をこき下ろしてるけど
江添に禿と同じことをする器はない
0883デフォルトの名無しさん2017/01/04(水) 20:02:57.32ID:hbEVCuwD
んなこたあない
0884デフォルトの名無しさん2017/01/04(水) 20:11:11.31ID:xue+qv3N
おっと江添の悪口はそこまでだ
0885デフォルトの名無しさん2017/01/04(水) 20:36:05.10ID:EEzN430Y
江添はAskを引退したと噂で聞いた
0886デフォルトの名無しさん2017/01/04(水) 21:02:29.75ID:mtnpTOaF
意味不明なことばかり聞くからAskはとっくに止めてるぞ
0887デフォルトの名無しさん2017/01/04(水) 23:00:03.85ID:6PKdRVzk
日本で、C++をやる以上、ドワンゴ江添を避けて通れないw
0888デフォルトの名無しさん2017/01/04(水) 23:54:30.99ID:EEzN430Y
ドワンゴ江添 ← 芸人っぽい
0889デフォルトの名無しさん2017/01/05(木) 20:30:05.54ID:t1F+0NcL
まあ有名人には違いないな
エピステーメーとか長尾とか
ああいう面々の1人
0890デフォルトの名無しさん2017/01/05(木) 21:31:43.21ID:AnMF2hlN
>>887
それ、日本じゃ c++ は今後絶対に流行らんっていってるようなもんだぞ。
0891デフォルトの名無しさん2017/01/05(木) 22:33:09.50ID:t1F+0NcL
知らんようではモグリとか言われかねないな
0892デフォルトの名無しさん2017/01/06(金) 08:43:46.20ID:S2R5Pk4v
知らんし別に困ってない
0893デフォルトの名無しさん2017/01/06(金) 09:30:18.02ID:xjtPVBC9
江添が巨乳だったらxamarinみたいにスレが荒れてるんだろうな
0894デフォルトの名無しさん2017/01/06(金) 10:02:18.40ID:/isfUrR6
たまにゲームのC++のソースを見る機会あるんですが、スマートポインタを使ってるソースを見たことがありません。
そんなに使えない子なんですかね?
0895デフォルトの名無しさん2017/01/06(金) 10:29:14.23ID:WtZv9CUa
その開発者がスマートポインタを使えない子なのかも知れない
0896デフォルトの名無しさん2017/01/06(金) 10:53:25.37ID:kp6frqnD
unique_ptrは普通に使える。
unique_ptr以外からのdeleteを禁止できるようにしてほしいくらい。
0897デフォルトの名無しさん2017/01/06(金) 10:54:24.87ID:F2kTLbsX
ゲームだとリソースの管理責任はっきりしてないといけないので
あまりスマポ使わないということはあるよ
0898デフォルトの名無しさん2017/01/06(金) 11:03:53.62ID:CA8nRNGd
ゲームは長時間(数日)稼働する前提じゃないから、メモリーリーク覚悟のうえで作ってると考えるのが妥当。
メモリーリークご法度なネトゲサーバーは当然ながらスマートポインタ使う。
0899デフォルトの名無しさん2017/01/06(金) 11:23:02.62ID:MoQlItJ9
>>897
スマートポインタを使うと管理責任がはっきりしなくなるかのようだけど、そんなことはありませんね。
0900デフォルトの名無しさん2017/01/06(金) 11:24:56.24ID:sDqigDOy
>>898
そうでもないぞー、定期メンテナンス入るしな
もっとも最近はC++で書くこと自体が減ってるようだけど
0901デフォルトの名無しさん2017/01/06(金) 11:47:14.92ID:PtltXM4L
最近は何で書かれてるんです?
0902デフォルトの名無しさん2017/01/06(金) 11:53:30.14ID:F2kTLbsX
>>899
そうじゃなくてスマポが必須になる場面は少ない
>>896の言うように自分はunique_ptrはよく使うけど
0903デフォルトの名無しさん2017/01/06(金) 11:55:44.68ID:sDqigDOy
>>901
javaとかphpとか…最近サーバーやってないから詳しくはシラネ
ネトゲじゃなくてソシャゲになるのかな
0904デフォルトの名無しさん2017/01/06(金) 12:02:59.42ID:MoQlItJ9
>>902
unique_ptrはスマートポインタではないかのようだけど、そんなことはありませんね。
0905デフォルトの名無しさん2017/01/06(金) 12:36:47.82ID:SQ/n1Ais
>>904
言うと思ったw
0906デフォルトの名無しさん2017/01/06(金) 12:46:07.95ID:ImmF6TXv
ゲーム作りたい人達はソフトウェア工学的なことに関してはあまり興味がないような気がする
0907デフォルトの名無しさん2017/01/06(金) 12:47:58.70ID:EZTJvYq1
開発者が使えない(知らない)だけだよ
組み込み系は03から脱却できてないから
0908デフォルトの名無しさん2017/01/06(金) 12:52:40.87ID:xeAB6nW4
ゲーム制作者のデザインパターンの本は実践的でおもしろかった
0909デフォルトの名無しさん2017/01/06(金) 12:58:04.82ID:eo4zpTs/
>>906
むしろ技術的に高度な分野なんだけどね
ただ、ゲームを作るときは、
こんなことできないかなーとアイディアを先行させるのが大事で、
それが必ずしも真面目くさった学問から始まるとは限らないのが
傍目には興味がないように見えてしまう
いざというとき力を発揮できる人とボンクラの差は無慈悲にでるけど
0910デフォルトの名無しさん2017/01/06(金) 17:37:11.91ID:bbamnLhE
>>908
本の名前を教えてください
0911デフォルトの名無しさん2017/01/06(金) 17:45:59.04ID:eo4zpTs/
>>907
普通に14使ってますが何か?
0912デフォルトの名無しさん2017/01/06(金) 20:28:46.43ID:S2R5Pk4v
>>907
別に組み込みだから開発環境がプアって訳じゃないぞ
普通に11とか14使ってるし
0913デフォルトの名無しさん2017/01/06(金) 20:34:45.33ID:EZTJvYq1
プアな環境多いよ
gccのバージョン4.3とか使ってたりするし
ゲーム業界は移植が当たり前だから無難に03でやるのが通例になってる

時代と共に変わってきてるけど
0914デフォルトの名無しさん2017/01/06(金) 20:36:49.98ID:EZTJvYq1
11,14対応してるミドルウェアとかエンジンとか少ないしな
criなんて未だにc言語だし
0915デフォルトの名無しさん2017/01/06(金) 20:39:09.74ID:S2R5Pk4v
組み込みの話じゃないのかよ w
0916デフォルトの名無しさん2017/01/06(金) 21:31:50.93ID:eo4zpTs/
最新規格が待望の待ち焦がれた機能って点がC++とCの違いだね
0917デフォルトの名無しさん2017/01/06(金) 21:33:28.30ID:ueXke68e
C11とか誰が使ってんの?って感じだよね
0918デフォルトの名無しさん2017/01/06(金) 21:58:54.59ID:xeAB6nW4
>>910
Game Programming Patterns ソフトウェア開発の問題解決メニュー

以前はKindle Unlimitedにラインナップされてたけど、今はもう外されてるみたいだな
0919デフォルトの名無しさん2017/01/07(土) 22:51:47.80ID:OA9F1BWN
私の使っているコンパイラはどうして
falseをnullptrに暗黙的に変換できるんですか?
ポインタにfalseを突っ込むのは明らかにミスであるから
コンパイルエラーにしてほしいのですが
0920デフォルトの名無しさん2017/01/07(土) 23:11:08.10ID:yMwU2C2K
>>919
C++11までは値が0になる整数定数式はすべてヌルポインタ定数とみなすと規定されていたから。
C++14からは値が0になる整数リテラルに範囲が狭められたのでfalseはポインタに変換できず、エラーになるよ。
http://wg21.cmeerw.net/cwg/issue903
https://github.com/cplusplus/draft/commit/878a6dc4bd50b6eee45dc51fc1e38a9b829679ac

つまりコンパイラの対応規格をアップグレードできれば望みの動作になるはず。
http://melpon.org/wandbox/permlink/rFbiBTMw7B5m9rc6
開発環境のコンパイラがダメでもgccやclangでコンパイルを通すチェックを入れるのがいいかもね。
0921デフォルトの名無しさん2017/01/07(土) 23:26:56.17ID:OA9F1BWN
ありがと

いくら規格上認められているからと言って
warningぐらい出せと思いますがね
0922デフォルトの名無しさん2017/01/07(土) 23:41:08.24ID:LoQGBcTO
規格で決められていることが全てなのに、せめて警告出せってのは身勝手ではないか?
気持ちはわかるが…
0923デフォルトの名無しさん2017/01/08(日) 00:36:35.60ID:2mrsTkIW
>規格で決められていることが全てなのに
↑こいつバカ
0924デフォルトの名無しさん2017/01/08(日) 00:55:24.93ID:Fh8T+Er/
規格としてダメだったからアプデで対応したんちゃうのかね
0925デフォルトの名無しさん2017/01/08(日) 01:00:15.48ID:bwuU6ymI
>>919
>falseをnullptrに暗黙的に変換できるんですか?
見間違いだろう
言語仕様上不可能

>>920
>falseはポインタに変換できず
ポインターリテラルを勝手にポインターにお題改変しないで下さい
09269202017/01/08(日) 01:06:05.60ID:XEVpRZ5t
>>925
あーごめんごめん。
>919の"nullptr"が文字通りリテラルを指してるとしたら変換って話が成り立たないから
「ヌルポインタ」の意味に勝手に読み替えて話してたわー。
0927デフォルトの名無しさん2017/01/08(日) 01:33:25.80ID:qYFGvy5R
>>923
なぜ?
0928デフォルトの名無しさん2017/01/08(日) 01:58:55.42ID:+qBxgbmJ
なぜも何も
規格上OKなものはコンパイルが通るし
規格上NGなものはコンパイルエラーになるし
この時点で、規格上OKなものに警告を出さないとなると
警告っていったい何よ、何に対して出すんよ

警告ってのは規格上は認められているけど
危なげなコードに対して出されるものなんじゃないの?
規格で決められたことが全てで、規格上OKなものには
警告を出さないとなると、警告なんて一切なくなるよ
0929デフォルトの名無しさん2017/01/08(日) 02:10:10.49ID:81pnxdlM
何言ってるのかよくわからんが、
コンパイラに依存しない厳格な警告が欲しいならコンパイラに頼まずに
cppcheckみたいな静的解析ツールを使ってくれとしか言いようがない。
0930デフォルトの名無しさん2017/01/08(日) 02:13:19.99ID:+qBxgbmJ
>>923の1個上のレスを読めば何を言っているかわかるようになるよ
0931デフォルトの名無しさん2017/01/08(日) 02:24:45.48ID:81pnxdlM
>>930
コンパイラのバージョンや使っているオプション引数もロクに書かずにダラダラ書き込んでも、誰も解決できない。
愚痴をこぼしたいだけなのであれば、C++相談室というスレの目的に合わないのでよそへ行ってもらえるかな。
0932デフォルトの名無しさん2017/01/08(日) 05:08:33.01ID:v4eQ+MBa
>>918
ありがとう
0933デフォルトの名無しさん2017/01/08(日) 05:36:19.83ID:qYFGvy5R
>>928
いや、そこじゃないでしょ
そんな当たり前なことを主張してどうする

その「危なげ」ってのが主観でしかないのに、全ての意見を拾えって言わんばかりの話に、そんな御無体なって話をしているのでは?
0934デフォルトの名無しさん2017/01/08(日) 07:52:53.52ID:WcAAQ69G
次期規格で消える方向で議論されてるようなものは危なげだとコンセンサスがあるものだろwwwwww
0935デフォルトの名無しさん2017/01/08(日) 08:20:18.72ID:Y+kUVO9L
結果だけ見ればな
0936デフォルトの名無しさん2017/01/08(日) 09:13:37.39ID:bwuU6ymI
>>933
>全ての意見を拾えって言わんばかりの話に、そんな御無体なって話をしているのでは?
そうではないぞ
規格上許された範囲の動作について希望を述べることが身勝手と主張する>>922についての話であって
「おれはこうして欲しいんだよな」を
「全ての意見を拾え」にすり替えられても…
0937デフォルトの名無しさん2017/01/08(日) 10:41:20.69ID:Pah/Azv5
江添は何て言ってる?
0938デフォルトの名無しさん2017/01/08(日) 11:15:00.62ID:MCnIJfyv
それいい加減寒いからやめといたほうがいいよ
0939デフォルトの名無しさん2017/01/08(日) 12:52:07.24ID:C9GVPqMv
>>928
> 規格上NGなものはコンパイルエラーになるし
はあ?
ならないケースはいくらでもあるけど?
0940デフォルトの名無しさん2017/01/08(日) 13:13:05.71ID:uBM7r9DB
>>939
具体的には?
0941デフォルトの名無しさん2017/01/08(日) 13:37:15.58ID:C9GVPqMv
>>940
i = i++;
0942デフォルトの名無しさん2017/01/08(日) 13:40:42.31ID:ji5cYzUP
>>928
コンパイラのベンダーに聞け。
「自分の膝を打つ自由を残しています」と言われたら、そのコンパイラを窓から投げ捨てるなり対応規格を上げるなり自由にすればいい。
0943デフォルトの名無しさん2017/01/08(日) 13:58:55.03ID:79WX7WfA
>>941
規格上NGでは無いだろ
0944デフォルトの名無しさん2017/01/08(日) 14:11:21.05ID:sZURLTxu
>>941
儀式魔術の呪文みたいだ
0945デフォルトの名無しさん2017/01/08(日) 14:18:37.69ID:aDyEaxK4
シーケンスポイントがうんちゃら
0946デフォルトの名無しさん2017/01/08(日) 14:23:42.33ID:C9GVPqMv
>>943
NGだろ
0947デフォルトの名無しさん2017/01/08(日) 14:39:03.61ID:sZURLTxu
エラーは出なかった
#include <stdio.h>
int main()
{
 int i = 1; i = i++; printf("%d\n",i); return 0;
}

E:\home>cl int.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.

int.c
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.

/out:int.exe
int.obj

E:\home>int
2

E:\home>gcc --version
gcc (x86_64-posix-sjlj, built by strawberryperl.com project) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

E:\home>gcc -o int int.c

E:\home>int
1
0948デフォルトの名無しさん2017/01/08(日) 14:41:18.42ID:XEVpRZ5t
>>943
「規格」がC++14を指していて"NG"が未定義動作を含むなら「規格上NG」で正しい。
0949デフォルトの名無しさん2017/01/08(日) 15:45:11.89ID:C9GVPqMv
あと規格に合ってなくてもエラーや警告を出す義務は規格には規定されてないよ
0950デフォルトの名無しさん2017/01/08(日) 16:17:49.78ID:79WX7WfA
未定義動作を含むコードは正当なc++のコードだからコンパイラ的にはNGではない
warningはあくまでコンパイラ側の親切心で出ているだけで規格上警告出せとか無いだろ
depricated属性にしたってヒントでしかない
0951デフォルトの名無しさん2017/01/08(日) 16:33:58.94ID:79WX7WfA
未定義とか実装定義とかってコンパイラで検出するの面倒だとか、その記述の動作を規格上定義しようとしたらコンパイラの自由度が制限されてしまうとかそう言う理由で存在するものだろう。
未定義だからコンパイラは検出して警告すべきって、そんなに簡単に検出できるならはじめから規格上ill-formedにしておくよ。
0952デフォルトの名無しさん2017/01/08(日) 16:37:30.69ID:hjRij54l
未定義をNGとするかOKとするかは宗教論争にしかならない気がする
0953デフォルトの名無しさん2017/01/08(日) 16:38:19.89ID:sZURLTxu
GCCは検出できた

gcc -Wall -o int int.cpp
int.cpp: In function 'int main()':
int.cpp:5:9: warning: operation on 'i' may be undefined [-Wsequence-point]
 i = i++;
   ^
0954デフォルトの名無しさん2017/01/08(日) 16:52:27.54ID:C9GVPqMv
>>950
> 未定義動作を含むコードは正当なc++のコード
はあ?
0955デフォルトの名無しさん2017/01/08(日) 16:53:57.66ID:79WX7WfA
実際well-formedだろうに
0956デフォルトの名無しさん2017/01/08(日) 17:13:22.89ID:wDUr6p7G
わざと怪しいコードを書く理由って何だよ
素人じゃないんだから自分からソフトの方に合わせろよ
0957デフォルトの名無しさん2017/01/08(日) 17:18:22.65ID:sZURLTxu
悪魔を呼び出せるコード、一度は書いてみたいw
0958デフォルトの名無しさん2017/01/08(日) 17:32:16.09ID:hjRij54l
事故を重ねても重ねても走り続けようとするんですね
0959デフォルトの名無しさん2017/01/08(日) 17:35:15.89ID:79WX7WfA
悪魔召喚プログラム
0960デフォルトの名無しさん2017/01/08(日) 17:54:38.54ID:MJfiP+Ss
std::map() と std::priority_queue の両方に自前のクラス C を格納しようと思います.
ここで map と priority_queue のそれぞれについて,別の operator< を使うにはどうすればいいのでしょうか?
0961片山博文MZ ◆T6xkBnTXz7B0 2017/01/08(日) 18:06:38.39ID:XUPIQMwT
>>960
関数または関数オブジェクトのクラスをテンプレート引数に指定する。
0962デフォルトの名無しさん2017/01/08(日) 21:25:34.97ID:MMBROJQ9
int ** i = new int*;
delete i;とすると
実行時に
invaild next size(fast)
とエラーが出てしまいます。
どのように変えたらエラーが出なくて済むのでしょうか?
0963デフォルトの名無しさん2017/01/08(日) 21:32:53.46ID:XEVpRZ5t
>>962
そのコードじゃ問題を再現できない。
http://melpon.org/wandbox/permlink/JjDWGWkVz7oNi2RR
どっかでメモリ破壊してるんだろうけど、ソース見て見つけられないんならvalgrindとか使うといいかもね。
https://www.google.com/search?q=%22invaild+next+size%28fast%29%22
0964デフォルトの名無しさん2017/01/08(日) 21:41:55.40ID:gWwBFCM3
自分の環境で
int main() {
int ** i = new int*;
delete i;
}
の4行でも再現することを確認もせずに質問するアホにマジレス
0965デフォルトの名無しさん2017/01/08(日) 21:57:48.03ID:c5pY166L
ポインタのポインタか

知らずに言うけど、先に、delete *i; してから、
delete i; すれば?
0966デフォルトの名無しさん2017/01/08(日) 22:07:47.12ID:c5pY166L
>>941
未定義は、変数にゴミが入っているのと同じ。
値が正しいとしても、たまたまだから、値に意味がない

MISRA-Cでは、100以上のルールに違反していないか、ツールを使ってチェックする。
トヨタでは、5%しかルールを守っていなかった。
外注と素人のプログラマーばかりだった

こういう会社は、医療機器・産業機械などを作ってはいけない。
アプリのバグで、すぐに人が死ぬから
0967デフォルトの名無しさん2017/01/08(日) 22:28:17.50ID:sZURLTxu
ルールを守ったからって人が死なないわけじゃないから
0968デフォルトの名無しさん2017/01/09(月) 00:21:27.46ID:1sdVa/mI
Done is better than perfect.

※命に関わる場合を除く
0969デフォルトの名無しさん2017/01/09(月) 11:39:08.89ID:IZbe/h67
>>964
再現てエラーが出るってことか?
おまえんとこの環境って何だ?

俺んとこ↓ではエラー出ないぞ。
Microsoft(R) C/C++ Optimizing Compiler Version 19.10.24629 for x86
g++ (i686-posix-dwarf-rev1, Built by MinGW-W64 project) 6.1.0

そもそも出るわけないので、こちとら安心してるが。
0970デフォルトの名無しさん2017/01/09(月) 11:58:31.52ID:sqCCzTui
2017年になっても相変わらずMIRSA信者うざいな
FORTRAN77でも使ってりゃ良いのに
0971デフォルトの名無しさん2017/01/09(月) 12:09:05.97ID:s0WlKSpH
MI
0972デフォルトの名無しさん2017/01/09(月) 12:09:35.65ID:IZbe/h67
確かにウザいとこあるよな
個人的な美意識くさい押しつけが鼻につくあたり
0973デフォルトの名無しさん2017/01/09(月) 12:09:51.28ID:s0WlKSpH
やりなおし
MISRA チェッカーが手軽に手に入るのならば,ご利益があるんじゃない,ほしいよね
0974デフォルトの名無しさん2017/01/09(月) 12:32:02.36ID:JTQclrck
こんなにコンパイラが安定しない時点で何か疑問を抱いたりしないもんなのかね。
そもそも仕様に無理があるとかさ。
0975デフォルトの名無しさん2017/01/09(月) 12:41:47.54ID:s0WlKSpH
>>974
え?コンパイラが不安定?MSVCとかですか?
0976デフォルトの名無しさん2017/01/09(月) 12:43:41.22ID:IZbe/h67
コンパイラが安定しないってどういうこと?
未定義や未規定はコンパイラのせいじゃないぜ
禁止事項が守れないPGがMTBFの短い不良パーツであるとき
不具合に関係しやすいってだけで
0977デフォルトの名無しさん2017/01/09(月) 12:55:50.61ID:Ml4ZG/LK
>>964
これが問題になるのってどんな環境?
0978デフォルトの名無しさん2017/01/09(月) 13:43:00.36ID:tlAVTCLv
最近思うんだけど
こういったスレって、元レスの文章がちゃんと読めてなくて
勘違いした人しかレスを付けないから、必ずと言っていいほど
流れがおかしな方向へ行くよな

ちゃんと文章が読めた人は何も思わないから反論もないし何も書き込まないっていうね
殆どの人はちゃんと読めているんだけど、100人に一人ぐらい読めてない人が居て
その人だけが書き込むから、スレ全体の書き込みにはアホっぽいのばかり残っていくっていう
0979デフォルトの名無しさん2017/01/09(月) 13:44:34.19ID:s0WlKSpH
>>964 の何が問題なんだい?
0980デフォルトの名無しさん2017/01/09(月) 13:45:17.98ID:s0WlKSpH
>>978
いきなりどうしたの?
0981デフォルトの名無しさん2017/01/09(月) 13:48:30.46ID:tlAVTCLv
例えば今の話であれば
>>964 は、書き込んだ本人は「再現しない」ことが前提で話をしている
その上で質問者に、自分の環境で再現するかどうか確認してから質問しろ
って言ってるのに、なぜか変な流れになっている
ほとんどの人はちゃんと読めているんだけど100人に一人ぐらい
勘違いする人がいて、その人だけが「何言ってんだ?」って反論のレスを返すから
結果そちらが目立って、変な流れになる
0982デフォルトの名無しさん2017/01/09(月) 13:51:43.92ID:XpNCyuGH
>>981
それは書き方悪いから誤解されても仕方ない。
俺も何言ってんのかわかんなかったよ
0983デフォルトの名無しさん2017/01/09(月) 14:11:00.93ID:YmMsaSRh
>>981は健常者
0984デフォルトの名無しさん2017/01/09(月) 14:21:53.24ID:lAQ0GX8y
964は、誰に対してのレスだと思う?
0985デフォルトの名無しさん2017/01/09(月) 14:21:59.71ID:Ml4ZG/LK
>>962 = >>974っぽくて、>>964の後にも不安定だとか言ってるから
>>964で問題が再現できちゃうのかとおもたんだよ・・・
09869642017/01/09(月) 14:25:08.19ID:YmMsaSRh
「アホにマジレス」と言っているのに??
0987デフォルトの名無しさん2017/01/09(月) 14:27:53.50ID:Jef9VfGG
俺は何言ってるのか解らなかったからこそスルーしてた
誰かを揶揄しようとして結果何を言いたいのか解りにくくなってんだよね。
もっと解りやすい書き方いくらでもあるだろうに、程度問題だが大勢の人が誤解なく理解してたらもっと早く誤解してる人への指摘はあったろうに。

>>983
健常者判定機さん今日もお勤めご苦労さまです
0988デフォルトの名無しさん2017/01/09(月) 14:50:10.93ID:p96WJVyd
次スレ
C++相談室 part129
http://echo.2ch.net/test/read.cgi/tech/1483940967/
0989デフォルトの名無しさん2017/01/09(月) 15:06:23.67ID:lAQ0GX8y
>>962 の質問内容って、
このように書いたところエラーが出てしまう、という内容で、
再現しないということは全く言ってなくて、
どうやってこのエラーを出なくしたら良いか?だと思う

>>964 は、
「簡単なコードで再現が確認できるのだから、再現できないことはないでしょう」
と言っているのではないか?
0990デフォルトの名無しさん2017/01/09(月) 15:10:29.86ID:s0WlKSpH
>>962 のコード自体が MSVC の invaild next size(fast) 警告の原因にはなっていない,という指摘が
>>964 だったんだね.たしかにちょっと早合点してしまったね

二重ポインタ ** はあまり使わないな,どっちかというとポインタの参照 *& の方が好きだ
0991デフォルトの名無しさん2017/01/09(月) 16:39:58.23ID:sqCCzTui
「4行でも再現する」キリッ
なんてアホなレスした>>964が悪い
0992デフォルトの名無しさん2017/01/09(月) 17:12:10.91ID:s0WlKSpH
>>961
的確なアドバイスありがとうございます.
http://echo.2ch.net/test/read.cgi/tech/1434079972/19
0993デフォルトの名無しさん2017/01/09(月) 17:12:15.07ID:L89h9vCc
伸びてると思ったら>>964が原因か
再現したんなら>>964が答えたらいいのに
で、>>962はどこ行った?
0994デフォルトの名無しさん2017/01/09(月) 18:27:43.10ID:YKENqwhN
うめ
0995デフォルトの名無しさん2017/01/09(月) 18:31:43.64ID:MgtRKFl0
馬
0996デフォルトの名無しさん2017/01/09(月) 18:43:28.99ID:tlAVTCLv
あえて俺が書き直すなら

自分の環境で
int main() {
int ** i = new int*;
delete i;
}
の4行で再現するかどうか、確認もせずに質問するアホにマジレス

かなぁ
0997デフォルトの名無しさん2017/01/09(月) 18:50:24.02ID:lAQ0GX8y
質問したアホに問題があるのか
マジレスした奴に問題があるのか
その辺が曖昧
0998デフォルトの名無しさん2017/01/09(月) 18:51:46.59ID:tlAVTCLv
再現することを確認もせずに〜
って言い回しは一見「再現する」と言っているようで、そうではない
原文から
「再現することを確認もせずに質問するアホにマジレス」
って抜き出してみればこれは何の問題もない
0999デフォルトの名無しさん2017/01/09(月) 18:56:20.67ID:hlZkGY3C
おしまい
1000デフォルトの名無しさん2017/01/09(月) 19:00:49.44ID:XpNCyuGH
そういう意図なら再現しないことも確認せずにって書かない?
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 43日 18時間 57分 0秒
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/

▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。