◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

C++相談室 part133 ->画像>4枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1511509970/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん (ワッチョイ 1fcf-H1rY)2017/11/24(金) 16:52:50.43ID:WoNXR2ax0
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part132
http://2chb.net/r/tech/1507561894/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://2chb.net/r/tech/1509780815/

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

2デフォルトの名無しさん (ワッチョイ 5fcf-H1rY)2017/11/24(金) 16:53:45.38ID:WoNXR2ax0
STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

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

---- テンプレ ここまで ----

3デフォルトの名無しさん (ワッチョイ 8746-TjkM)2017/11/24(金) 17:23:34.21ID:tVS6N6Kc0
>関数内で作ったベクターやマップは関数を抜けたらメモリ解放されると考えてよかです?

だって今回の話はmove関係ないし
質問とは関係ない余計なことを言って知識をひけらかしたかっただけの人でしょ
今回の話であれば
「自動変数であればスコープを抜けるときにデストラクタが走って解放される」
というだけの話
それ以上の話はまた別の話

>うん、信じていい
>XXから抜けるときにムーブコンストラクタでtmpへ移動され
>createmapから抜けるときに解放される
>このときoperator deleteが呼び出されるが
>operator deleteがどのようなタイミングで解放しているかには依存すべきでない
>我々が関心を持つべきはoperator deleteが呼び出されるタイミングで実装の詳細ではない

↑依存すべきでは無い、と言っておいて、関心を持つべき、と言ってみたり
実装の詳細に関心を持つべきでない、と言っておいて、vectorの実装詳細を語ったり
言ってることやってることが支離滅裂で、意味不明だろう

ついでにバージョンによってRVOどうのこうのも、質問には関係が無い余談だし
そもそもバージョンの話するんなら昔のC++はmoveセマンティクス無いし
しかし、どうであれ、どのみち質問には関係が無い

4デフォルトの名無しさん (ワッチョイ 5fb3-9Jqp)2017/11/24(金) 19:29:11.47ID:FCfoZStM0
何故建てたし

5デフォルトの名無しさん (アウアウカー Sadb-ZI9b)2017/11/24(金) 20:40:51.17ID:X0HwtQDQa
保守

6デフォルトの名無しさん (ワッチョイ 5f34-y0n2)2017/11/24(金) 20:43:34.75ID:06etO6GG0
>>2
いつまでこの糞テンプレ張り続けるんだおい

7デフォルトの名無しさん (ワッチョイ 0778-4Z1+)2017/11/24(金) 22:22:42.08ID:l1+FhW7v0
v(^・^)vはどこ行った?

8デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)2017/11/24(金) 22:59:15.71ID:9/UAKu4i0
前スレ995
http://2chb.net/r/tech/1507561894/995

おまえは何を言っているんだ?
= delete;が03でNGになるのは当たり前だろ

9デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)2017/11/24(金) 23:01:10.76ID:9/UAKu4i0
>>3
おまえも何を言っているんだ?
operator deleteが呼び出されるタイミングを
vectorの詳細とでも言っているなら病院へ行ったほうがいい

10デフォルトの名無しさん (ワッチョイ 8746-TjkM)2017/11/24(金) 23:25:11.19ID:tVS6N6Kc0
前スレのおバカさんか

>このときoperator deleteが呼び出されるが
>operator deleteがどのようなタイミングで解放しているかには依存すべきでない
>我々が関心を持つべきはoperator deleteが呼び出されるタイミングで実装の詳細ではない

↑これの説明してみ?
好意的に解釈することもできるが、どのみち意味不明すぎる

11はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)2017/11/24(金) 23:43:36.87ID:lG8HVUMw0
>>8
そっちこそ何言ってるんだ?
今は RVO の話だろ?

12デフォルトの名無しさん (ワッチョイ 8746-TjkM)2017/11/24(金) 23:59:00.33ID:tVS6N6Kc0
まぁ、>>10の意味不明な文章の解釈などどっちでも良いんだが
質問者はvectorな自動変数の寿命に関して、RAIIが正しく行われるか
不安だから聞いているだけなのに、moveがどうとかドヤッた挙句
RVOが働いたらmoveされないんじゃね?ってのはお粗末すぎる

return vec;で、RVOが働くか、ムーブコンストラクタになるか、コピーコンストラクタになるか、は
コンパイラの銘柄とバージョンと最適化のオプションによるだろうし
もしかしたら、コンパイラの気分で変わるかもしれないし
なんだったら、関数がインライン展開されたらまた前提が変わってくるだろうよ

なんで、こんなことは考えるだけ無意味であるし
というか、考えなくてよいように作ってあるし
むしろ、考えてはダメというか、依存させてはいけないという意味で
余計なこと(悪いこと)は考えないほうが良いし

結局、質問者には
vectorな自動変数はスコープを抜けると寿命が尽きてデストラクタが呼ばれて解放される
というC++の根底のDNAである、RAIIのルールだけ言えばよいわけで

13デフォルトの名無しさん (ワッチョイ 8746-TjkM)2017/11/25(土) 00:07:29.16ID:gBFdbUKG0
vectorな自動変数 という表現はちょっとアレだったかもしれん
まぁ、vector型として宣言された自動変数 のこと・・

14デフォルトの名無しさん (オッペケ Srfb-gBtc)2017/11/25(土) 00:10:16.37ID:5IwBrrUdr
「コンパイラの銘柄とバージョンと最適化のオプションによる」

少なくとも991の置いたC++17の前提ではムーブコンストラクターやコピーコンストラクターは有り得ないのだが、
ひょっとして前提をすり替えられたのだろうか

15デフォルトの名無しさん (ワッチョイ 8746-TjkM)2017/11/25(土) 00:27:25.13ID:gBFdbUKG0
それは>>991が言ってるだけで
質問者はC++17とは言ってない
質問者に対して、もしC++17の場合は必ずRVOになるので~~という説明をしたとして
これもあまり意味が無いというか、関係が無い
質問者はvectorがRAIIを徹底していのるか心配になったから聞いているだけ
その意味ではRVOだろうがムーブだろうがコピーだろうが、関係が無い

16デフォルトの名無しさん (ワッチョイ 5fe7-8Ex9)2017/11/25(土) 00:33:53.19ID:Sg1k8TV00
991がC++17のことを言っているのはちょっと脱線しただけであって、
話の前提でもないし質問の意図に沿ったものでもないよな

17デフォルトの名無しさん (ワッチョイ 5fb3-CDhT)2017/11/25(土) 09:33:20.80ID:+Jz8ZPqE0
なけなしの知識でドヤってるだけやろ w

18デフォルトの名無しさん (ブーイモ MM7f-N4rA)2017/11/25(土) 21:47:56.71ID:fPJ/ssThM
const参照を返す関数があるのだけど、autoで効率よく戻り値を受け取るには
const auto&とか書かなきゃいけないの?
それともdecltype(auto)とかするの?

19デフォルトの名無しさん (ワッチョイ 5fbd-hcjg)2017/11/25(土) 23:24:46.27ID:afKc1pIZ0
↑嘔吐するから漏れには関係ない

それよか想定上はconstメソッドなのだが実際のところ実装がどうされるかわからない抽象仮想関数にconstをつけて良いものかどうか
いつも悩む

20デフォルトの名無しさん (ワッチョイ 7fa5-5mWG)2017/11/25(土) 23:33:46.79ID:mxSpQEHX0
autoで受けて余計なコピーを発生させちゃう困ったちゃん

21デフォルトの名無しさん (ワッチョイ c74b-gliV)2017/11/26(日) 03:45:55.11ID:I/ckFlEt0
>>19
良い。

22デフォルトの名無しさん (ワッチョイ dfeb-+V5r)2017/11/26(日) 03:58:55.87ID:DFCtUaBX0
>>20
考えたこともなかった困ったちゃん参上!
正直スマンかった以後気をつけるわ

23デフォルトの名無しさん (ワッチョイ 5fcc-tupB)2017/11/26(日) 04:29:20.65ID:g3197Gxk0
最近勉強始めたばかりで100までの範囲の数字を入力したらそれが1~10,11~20,・・・91~100のどの範囲にあるか判定したいけどif文10個用意する方法より綺麗にするにはどうしたらいい?

24片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd7f-PBlX)2017/11/26(日) 04:32:18.07ID:KjdhQPtsd
-1

25片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd7f-PBlX)2017/11/26(日) 04:33:56.38ID:KjdhQPtsd
switch ((x - 1) / 10)

26デフォルトの名無しさん (ワッチョイ 5fcf-H1rY)2017/11/26(日) 04:42:41.92ID:Dn1yAmWU0
>>23
pair<int, int>の配列を用意してループする

https://ideone.com/0pYJWk

27デフォルトの名無しさん (ワッチョイ 07b3-5mWG)2017/11/26(日) 09:12:00.52ID:8WHK08hV0
>>23
(x-1)/10

28デフォルトの名無しさん (ブーイモ MMcf-V9cG)2017/11/26(日) 10:40:50.63ID:q1KSvIhfM
>>23
sys/param.h
howmany

29デフォルトの名無しさん (ブーイモ MM7f-N4rA)2017/11/26(日) 11:43:40.48ID:OJziPoG6M
>>19>>20
結局どうしたらいいの...

30デフォルトの名無しさん (オッペケ Srfb-gBtc)2017/11/26(日) 11:56:21.91ID:OeykFUMSr
>>29
auto &&unko = f();

31デフォルトの名無しさん (アウアウカー Sadb-Fzm/)2017/11/26(日) 17:24:53.04ID:+CosUOwya
Win32とかだとフラグ管理でビット演算利用してるけど、今どきのc++17だとどのようにするのがベスト?

32デフォルトの名無しさん (ワッチョイ 07eb-5mWG)2017/11/26(日) 17:30:11.12ID:DaGrByo80
C++入門書でよく勉強したはずなのにautoとかconstexprとか知らんもんが一杯…

33デフォルトの名無しさん (ワッチョイ 077f-lrN+)2017/11/26(日) 17:31:42.72ID:CoQMqJ/C0
何年に発売した入門書なんだ

34デフォルトの名無しさん (ワッチョイ 272d-eGxq)2017/11/26(日) 17:33:33.90ID:mkIW06Zo0
変わらず std::bitset 使い続けてる ベストかは自信ないけど不便もないので

35デフォルトの名無しさん (ワッチョイ 07eb-5mWG)2017/11/26(日) 17:38:44.74ID:DaGrByo80
>>32
やさしいC++第3版
大体9年前に買ったのを寝かしといて最近になって勉強し始めたが、そんなに仕様変更ないと思ってたが間違いだったようだ

36デフォルトの名無しさん (ワッチョイ 07eb-5mWG)2017/11/26(日) 17:39:04.93ID:DaGrByo80
>>33だった

37デフォルトの名無しさん (ワッチョイ 0778-4Z1+)2017/11/26(日) 17:42:35.83ID:LgT/GDJu0
CはそれほどでもないけどC++は11以降どんどん変わるようになったね

38デフォルトの名無しさん (ワッチョイ 5fcf-H1rY)2017/11/26(日) 17:46:59.07ID:n7ZC4ZKm0
Effective Modern C++を俺は使ってる
でもC++17が出たらまた新刊出るね
これC++11/14対応版だしすぐに古くなる

39デフォルトの名無しさん (ワッチョイ 07eb-5mWG)2017/11/26(日) 17:52:39.37ID:DaGrByo80
Effective Modern C++17出たら買ってみるわ

40デフォルトの名無しさん (ワッチョイ bf3f-ThNz)2017/11/26(日) 17:56:44.90ID:kRx46ugP0
もうC++を本で勉強するのは無理なのではないだろうか

41デフォルトの名無しさん (ワッチョイ bf4b-g2WY)2017/11/26(日) 18:04:02.71ID:rgo+yBBa0
C++を始めようと思うんですがおすすめの参考書知りたいです。Cの知識はありませんがPythonでプログラミングは経験したのでプログラミング初学者ではないです。

42 ◆QZaw55cn4c (ワッチョイ 5f60-2JzH)2017/11/26(日) 18:09:15.89ID:rNgJnhxq0
>>41
accelarated c++
c++11 以前の古い本だが、C を経由せずに C++ をある程度マスターできることを評価したい

43デフォルトの名無しさん (スップ Sdff-2b6l)2017/11/26(日) 18:09:43.82ID:wYDDxvKDd
今は規格から追ってった方がいいと思う
規格書そのものの通読は大変だろうから、cpprefjpとか眺めてわからなくなったら規格に当たってコード書いて試してが一番早いよ
プログラミング完全初心者はそうも行かないだろうけどPython知ってるなら大丈夫だろ

44デフォルトの名無しさん (ワッチョイ bf4b-g2WY)2017/11/26(日) 18:12:38.67ID:rgo+yBBa0
>>42
英語の本ではなく日本語の本で何かありませんかね?
英弱なもので^^;

45デフォルトの名無しさん (ワッチョイ bf4b-g2WY)2017/11/26(日) 18:14:59.44ID:rgo+yBBa0
>>44訂正
日本語版もありますね
すいません(^^;;

46デフォルトの名無しさん (ブーイモ MM7f-N4rA)2017/11/26(日) 19:17:54.77ID:C7WBrdWqM
>>39
残念ながら、続編はもうないんだ…

47デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/26(日) 20:18:30.38ID:po9rLop30
C++ の定本は、ロベールだけど、ものすごい分厚い

これは、ちょっと古めの本だけど、
ドワンゴ江添などの新しい規格の本は、古い規格を知っていないと読めない

猫でもわかるC++プログラミング 第2版
数言語知っているなら、簡略なこの手の本で、お茶を濁す

とにかく、C++は言語の最高峰だから、
スッキリJava で、オブジェクト指向をマスターしていないと、取得できない。
理解できるまでに数年以上掛かる

まずこの本で、オブジェクト指向を学ぶ
スッキリわかる Java入門 第2版、2014

その後、この2冊をこの順に読む
たのしいRuby 第5版、2016
みんなのPython 第4版、2017

48 ◆QZaw55cn4c (ワッチョイ 5f60-2JzH)2017/11/26(日) 20:45:07.56ID:rNgJnhxq0
>>47
>とにかく、C++は言語の最高峰だから、
いや、関数型の諸言語の方が、わけわからなくてすごい、と思うときもあるのでした。最古参の lisp とか…

49デフォルトの名無しさん (ブーイモ MM4b-N4rA)2017/11/26(日) 20:52:23.29ID:I1XRhGjPM
>>30
thx!

50デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/26(日) 20:54:50.87ID:po9rLop30
関数型は、コンセプトが難しいだけだが、
Elixir みたいに分かりやすい言語もある

一方、C++ はポインタとか、実装が難しい。
実装に直面させられるから

Rust では、実装の詳細をどう回避しようとしてるのか、よくわかる

51はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)2017/11/26(日) 21:10:38.95ID:lLN9GSgU0
>>48
うーん、 Scheme スレ住人の私からすると、 LISP はS式表現の考え方で引っかかってる人の方が多い印象があるな。
関数型たって、副作用にややこしい手順が必要なのは Haskell くらいで、 LISP に「関数型」であるが故の難しさはそんなにない。

52デフォルトの名無しさん (アウアウカー Sadb-Fzm/)2017/11/26(日) 21:13:13.79ID:T8jkbpd5a
>>47
なんでc++の勉強するのになんでrubyやpythonの本を読まなきゃいけないんだよ?

53はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)2017/11/26(日) 21:17:17.78ID:lLN9GSgU0
>>52
必須ではないにせよ様々なパラダイムについて見識を持つのは無駄にはならないと思う。
ただ、入門者が色々手を出すと混乱する可能性も大きいんじゃないか。

54デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/26(日) 21:38:23.19ID:po9rLop30
C++ は、エベレストみたいなもの。
まず、色々な山で練習しろってこと

スクエニなんて、社員が何千人もいるのに、C++ を募集してるだろ。
社員の平均勤続年数は、7年だけど誰もできない

最近では、言語の募集をしても、全然できない。
言語を知っていても、何もできない

コンピューターリテラシー、つまり環境・OS を含めて、
すべてを知ってる人でないと、無理

C++ では、Ruby などの関数型とか、勉強できない。
ビジネスロジックの話ができない。
メモリとか、余計なものが付きまとってくるから

C++ で勉強していると、ものすごい時間が掛かって、非効率

55デフォルトの名無しさん (アウアウカー Sadb-Fzm/)2017/11/26(日) 21:40:21.18ID:T8jkbpd5a
>>53
pythonスレでもrubyの宣伝しててうるさいからつい。

無駄にはならないけどc++への理解は遠ざかるんじゃないかな?

56デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)2017/11/26(日) 21:46:20.31ID:SBifPocB0
>>54
足切り点がちょっと高めで、落ちるやつは容赦なく落ちるというだけ
いつぞや足切り点を低くしようというCOBOLとかいう試みがあったが
結果は周知のとおり

落ちたやつにはエベレストに見えるのかw

57 ◆QZaw55cn4c (ワッチョイ 5f60-2JzH)2017/11/26(日) 21:57:16.96ID:rNgJnhxq0
>>54
うーん Ruby/Python/Java で実装した例を読むと、即座に C++ に直す、というか、どうしてもそうしたくなってしまうんだよ
薄い本なのにぜんぜんはかどらない

58はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)2017/11/26(日) 22:01:25.91ID:lLN9GSgU0
Ruby/Python/Java の薄い!?

59デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/26(日) 22:05:23.77ID:po9rLop30
OS 周りの事は、Python よりも、Ruby の方が楽。
Vagrant, Chef で、仮想OS もできるし

Python は、AI とか数値計算用。
次世代は、Elixir, Rust の2択

社員数何千人の大企業が、C++ を募集すること自体が、そもそもおかしいだろ。
何千人もいて、できる奴が、1人も見つからないなんて

そもそも、そんなに簡単だったら、皆、こんなに挫折しないって。
こんなに本屋に、難しい本が並ばないから

何十年も、C で手続き型をやってる老害どもが皆、
C++ のオブジェクト指向で、討ち死にしてる

60 ◆QZaw55cn4c (ワッチョイ 5f60-2JzH)2017/11/26(日) 22:07:18.82ID:rNgJnhxq0
>>58
いやいや 言語自体の話ではなくて、応用例の話で
いまはまっているのは https://www.amazon.co.jp/dp/4627847610 で、こういうのを読むと c/c++ で書いてみたくなるという…

61デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/26(日) 22:13:20.12ID:po9rLop30
Go は老害が作っているから、結局、手続き型から言語から、抜け出せなかった。
C から、C++ へ移行できない、老害と同じ

一方、Elixir, Rust とかを見れば、どの概念を抽象化したのか、よくわかる

62デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/26(日) 22:21:12.28ID:po9rLop30
C++, Rust を比較すれば良い。
どの概念を抽象化したのか、よくわかる

ニコ生も今、Rust で作り直してる最中

63デフォルトの名無しさん (アウアウウー Sacb-DWFp)2017/11/26(日) 22:26:56.58ID:tkabk1y3a
C++を勉強したいという人にrubyやpython,javaの本をすすめるなんて
遠回りな事言うんだなと思ったら>>59だもんな・・・

64デフォルトの名無しさん (ワッチョイ 5fe7-8Ex9)2017/11/26(日) 22:33:03.00ID:A1ZwwN/70
難しい難しいと言って「ポインタとか」という例が出てくるところで察し

65デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/26(日) 22:33:41.66ID:po9rLop30
素人がエベレストを目指しても、ダメ。
レベル5 の冒険者が、レベル50 のモンスターを倒せない。
小学生が大学数学を解けない

実際に大企業では、プログラマーが何十人来ても、即日サヨナラが続いてる

漏れは、C++ のプロジェクトに採用された事があるけど、
派遣から来ても、ほとんどが即日サヨナラ

何十年も、C をやってる老害でも、C++ は全くできないし

66デフォルトの名無しさん (ワッチョイ 47b3-lrN+)2017/11/26(日) 22:37:49.56ID:okic0QgR0
できるとかできないとかどのくらいのレベルのことを言っているのか気になる

67 ◆QZaw55cn4c (ワッチョイ 5f60-2JzH)2017/11/26(日) 22:39:44.04ID:rNgJnhxq0
>>65
どのくらいの C++ スキルが必要とされるの?

68デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)2017/11/26(日) 22:48:32.43ID:SBifPocB0
>>66
> 小学生が大学数学を解けない
ちゃんとこう言ってるじゃないかw

69 ◆QZaw55cn4c (ワッチョイ 5f60-2JzH)2017/11/26(日) 23:13:47.64ID:rNgJnhxq0
>>26
うーん、auto、よくわからんなあ…

70デフォルトの名無しさん (ワッチョイ 47b3-lrN+)2017/11/26(日) 23:35:44.48ID:okic0QgR0
>>68
例えが分かりにくいのでC++で例えてほしい

71デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/26(日) 23:39:50.10ID:po9rLop30
最近の大企業では、言語の募集をしても、全然できない人が来る。
言語を知っていても、何もできない

だから、コンピューターリテラシー、
つまり環境・OS・アルゴリズムなど、すべてを含めて必須

OS のコマンドを知らないとか、アルゴリズムを知らないとか、
仮想OS を構築できないとか、Vagrant, Chef, Docker を知らないとか、
LLVM, MFC を知らないとか

C++ なんて、ほぼすべてが必須だろ。
だから求人票には、コンピューターリテラシー必須って書いてある

言語の知識ぐらいでは、何もできないから、派遣から来ても、即日サヨナラとなる

Emacs を使えない人は、お断りっていう会社もあるほどw
プロなら、自分が使うツールにも、こだわりがあるはずだから

72デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)2017/11/26(日) 23:49:41.52ID:SBifPocB0
>>70
チンパンジーに因数分解みたいな話に例えもへったくれもねえだろ

73デフォルトの名無しさん (ワッチョイ 5fcf-H1rY)2017/11/27(月) 00:33:44.81ID:1bUH4ri10
>>69
この場合はstd::inializer_listになるよ

74デフォルトの名無しさん (ワッチョイ 5fcf-H1rY)2017/11/27(月) 00:34:52.25ID:1bUH4ri10
◯std::initilizer_list

だからstd::beginとかstd::endが使える

75デフォルトの名無しさん (アウアウウー Sacb-Fzm/)2017/11/27(月) 01:16:09.67ID:4bHQN/8na
>>71
趣味でやってるから企業の事などさっぱりだがそれはc++以外だと不要なのか?

76デフォルトの名無しさん (ブーイモ MMeb-V9cG)2017/11/27(月) 01:26:50.56ID:fAclYYwOM
>>75
>>63>>64

77デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/27(月) 01:52:56.54ID:x+zk8UEy0
最近の大企業では、言語の募集をしても、全然できない人が来る。
言語を知っていても、何もできない

だから、コンピューターリテラシー、
つまり環境・OS・アルゴリズムなど、すべてを含めて必須

だから募集要件が、コンピューターリテラシーがある人になる

確かに、何の言語でも、そうなる

78はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)2017/11/27(月) 02:14:06.37ID:GAML79c/0
>>60
あ、すまん、それは薄い本 (同人誌のことをいうスラング) に反応してしもうたというジョークなので気にしないで。

79デフォルトの名無しさん (スップ Sdff-SHUC)2017/11/27(月) 02:36:02.00ID:T7rLcZV0d
>>77
C言語できますって言って2進数知らない人とか来るもんね

80デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/27(月) 03:58:40.54ID:x+zk8UEy0
まあ簡潔に言えば、C++ を学びたい場合、直接C++ を学ぼうとしても無理。
文法だけを学んでも、全く何もできない

周辺知識(コンピューターリテラシー)から埋めていかないと、どうにもならない

高山列車が直接、真上に進めないのと同じ。
切り返ししながら、徐々に上がっていく感じ

何十年も、手続き型言語のC をやってる老害が、
オブジェクト指向に移行できないのも、そう

平山尚のセガ本もあるけど、文法を学んでも、オブジェクト指向が理解できない。
やっぱり「スッキリJava」から始める必要がある

81デフォルトの名無しさん (ワッチョイ 5f34-y0n2)2017/11/27(月) 04:39:24.98ID:/nBMg24u0
Javaみたいなオペレータもテンプレートも使えない糞言語薦めるな

82デフォルトの名無しさん (ワッチョイ 5f34-y0n2)2017/11/27(月) 04:41:34.85ID:/nBMg24u0
ヒエラルキーのトップC++にはなにもかも無駄な知識
Javaもrubyもpythonも

83デフォルトの名無しさん (ワッチョイ 0793-C/lT)2017/11/27(月) 06:30:05.16ID:O6svWDNK0
C++を使うのにオブジェクト指向に対する理解が必要、という意見にはある程度賛成できる。
しかしながら、そのために先にJavaの本を読め、てのはどうなんだろ。
C++の入門書でオブジェクト指向の解説までカバーした本、てのは存在しないのかな。

C++の本を書くような人はオブジェクト指向の説明をするのは沽券に関わると思っているのか、
あるいは「C++の専門家」にはオブジェクト指向を教える能力がないのか。

84デフォルトの名無しさん (ワッチョイ 47b3-h3cN)2017/11/27(月) 06:41:19.35ID:/wh5qHzF0
オブジェクト指向言語じゃないので。

85デフォルトの名無しさん (ワッチョイ 47b3-h3cN)2017/11/27(月) 06:42:27.76ID:/wh5qHzF0
C++の学び方はパタヘネを読むところから始まる。

86デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/27(月) 08:33:19.56ID:x+zk8UEy0
オブジェクト指向をわかりやすく説明した本は、世界中にない。
だから「スッキリJava」が出た 2011年は、オブジェクト指向にとって、エポックの年

この本以降、C++ を学ぶのに「スッキリJava」から始めるという道筋ができた。
この道筋で学べるのは、日本だけ

他国では、もっと苦労してるはず。
まあ、漏れの勝手な意見だけど

87デフォルトの名無しさん (ワッチョイ 678a-nf8U)2017/11/27(月) 08:42:09.94ID:T6hD1Djz0
いや意見というより妄想

88デフォルトの名無しさん (ワッチョイ 278a-I1Jk)2017/11/27(月) 08:46:30.99ID:U9yOEuDb0
Javaみたいなゴミ薦めるな。ソフィーの世界の方がマシ

89デフォルトの名無しさん (ワッチョイ 07b3-5mWG)2017/11/27(月) 09:19:29.64ID:tczRDnba0
いろんな言語のおいしいとこだけ使って個々の言語に深入りしないのが得策
おいしいところを繋ぎ合わせる能力のほうが大事

90デフォルトの名無しさん (ワッチョイ ff9f-hvxY)2017/11/27(月) 09:19:54.22ID:aghVPiEK0
better Cとして使うのはいかんのか?

91デフォルトの名無しさん (ワッチョイ bfa1-Mq0t)2017/11/27(月) 10:06:43.21ID:AedLfSQl0
イカンことはないと思うが、C の環境に行った時に困るぞ。
まあ最近の C には大体取り込まれてるみたいだけど。

92デフォルトの名無しさん (ワッチョイ 8746-TjkM)2017/11/27(月) 12:03:50.36ID:pjE3KxE70
例の約一名入ってることがおかしくて
まず初心者というか入門で、C++の文法などを覚えたいという話なのに
コンピュータリテラシーが無いと現場では使えない、とか
今それ関係ないし

93デフォルトの名無しさん (アウアウカー Sadb-Fzm/)2017/11/27(月) 12:14:01.72ID:889bi2PQa
他の言語の本は無しとしてオススメの本ある?
c++11以前だったら独習C++が良かった。

94デフォルトの名無しさん (オイコラミネオ MM0b-d/GA)2017/11/27(月) 12:45:48.74ID:O7ueEetiM
c++ プライマー第5版くらいしかないと思う。
c++の基本的な文法から解説してあってc++11対応。他の言語を学んでいるなら読めると思う。

95デフォルトの名無しさん (ワッチョイ 07eb-5mWG)2017/11/27(月) 12:49:42.23ID:vi7VqSly0
遠回しに他の言語の本読めって言っとるようなもんだ

96はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)2017/11/27(月) 12:51:23.55ID:GAML79c/0
C++11 が成立するより前だと「詳説 C++ 第2版」が良かったと思う。
http://amzn.asia/4C6Q7x9

97デフォルトの名無しさん (オイコラミネオ MM0b-d/GA)2017/11/27(月) 13:10:56.02ID:O7ueEetiM
>>95
説明が悪かったけど、プログラミングの全くの初心者が読むにはちょっと難しいかもってこと。

98デフォルトの名無しさん (ワッチョイ 07eb-5mWG)2017/11/27(月) 13:23:45.26ID:vi7VqSly0
>>97
ああそういうことね

99デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/27(月) 20:00:43.82ID:pbeBNwkp0
>>83
> 入門書でオブジェクト指向の解説
ここがそもそも間違っている。
オブジェクト指向は肥大化(10k行以上)するソフトウェアを整理して記述するための方法論であって、
肥大化してない(1k以下)ものすら書けない初心者(入門書を読む層)には不要だからだ。
だから、ない。要らないから、無いんだよ。
少し考えれば分かるはずだが、世界中の誰も出来ないと思うかい?そんなわけないだろ。

ただし、日本のシステムでは必要なんだよ。
日本では大量の馬鹿(新入社員)でもプロジェクトの足しにする方向だから、
せいぜい100行しか組めないド新人にもオブジェクト指向を強いる。それが日本のJavaだ。
既に稼働中の大規模システムに組み込むコードは、
それが新人が書いたものであっても、正しくオブジェクト指向してないと困るから。
言い換えれば、大量の馬鹿が少しずつ組み上げることに日本は特化している。
これは平均的ド素人の最低レベルが保証される社会だから出来る方式でもある。

逆に海外はおそらくそんな馬鹿が大規模システムに組み込むコードを書く前提にしてない。
熟練し、正しくオブジェクト指向できる奴だけでメンテする前提であり、馬鹿は死ね、だ。
これはITドカタの給与の平均値からも分かる。だいたい海外は日本の2倍だ。
だから初心者にオブジェクト指向を教える意味がないんだよ。

オブジェクト指向自体は別段難しいものではなく、また、手続き型(Cスタイル)と(実は)地続きだから、
十分に熟練すれば自然と理解できるし、「手続き型だ」と言い張ったところでどうしても中身は似てくる。

Java鹿は、オブジェクト指向と手続き型が別物だと勘違いしている。
ド新人に「オブジェクト指向(キリッ」と洗脳し、その意味すら理解できない馬鹿が教える側に回って、悪循環してる。
普通に考えれば、C++の仕様でstructとclassがほぼ同じことからも、
また、未だにインスタンスメソッドとクラスメソッドの区別が文法以外にほぼ無いことからもこれは分かる。
(instance.method()とstaticMethod(instance)の実行時の違いがほぼ無い、
或いは、結局はレシーバをどう記述するかだけの話だ、と言った方が分かりやすいか。
Goに至ってはこの点、どっちでもいいです、という仕様にしてしまっているし)

100デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/27(月) 20:02:10.31ID:pbeBNwkp0
Cで大規模なシステムを組むと、どうしてもstruct*を多用することになる。
これ自体がオブジェクト指向そのものだ。
ただしCにはこれをサポートするための文法が無く、全部自分でやらないといけない。
だからちと辛いし、class構文欲しい、というのは自然な流れだ。

おそらくLinusがC++erを毛嫌いしているのはこの辺で、(彼が嫌っているのはC++ではなくC++erね、念のため)
Cにはサポート構文がないだけであって、
自前でやる気なら正しくオブジェクト指向できるし、
それが昨今の「継承イラネ、全面委譲で」なら実は大して手間は変わらない。
この場合、「C文法で組め」と言われても、「ああ、これならまあ」程度でしかない。
これについてグダグダ言う奴は理解できてない馬鹿だからイラネ、ってのは当たってる。

そもそも、入門者の言う「オグジェクト指向が難しい」の理由は、
「オブジェクト指向で組めない」ではなく、
「オブジェクト指向の利点が分からない」「なぜこんな記述方式にする必要があるのか?」だろ。
元々大規模のコードを整理するための手法なんだから、
大規模なコードが書けない新人には理解できないのは当たり前。
それを理解しろ、という日本方式に無理があるんだよ。

あと、Javaの問題は、かなり制限された言語だから、
他言語だとすごく単純に記述できることを
デザインパターン(キリッをこねくり回して意味不明な構造にしないといけないことが多いこと。
だからC++入門者にJavaを勧めるというのはやっぱりキチガイだよ。
そしてこの意味で老害が一番多いのはJavaだと思うよ。
と言うか、ちょっと逝っちまっていることを言う奴はたいていJava鹿だ。>>86もそうだろ。
例のスタティックおじさんの話もJavaだし。(あれは双方の言い分も分かるが)

101デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/27(月) 20:03:35.06ID:pbeBNwkp0
C++の問題は、「何でも出来る最強言語」を目指しているのか、本当に何でもありすぎる点だ。
だから新人が戸惑ってしまうのも分かるし、無駄に覚えることも多すぎる。
例えば、継承した場合に隠蔽できるが、あれなんてマジで要らないだろ。
(virtualでないメソッドをoverride(とは言わないが)して隠蔽、って奴ね)
この辺、バランスが取れているのはC#だ。そもそもそこが狙いのようだし。

Cに関しては、老害ではなく、「老」が多い。これは古い言語だから。
ただしC++への移行はいつでも出来たし、既に書いたがオブジェクト指向とは地続きだから、
文法的にオブジェクト指向してないだけで中身はオブジェクト指向そのもの、ってのはよくある話だ。
そしてCは元々関数ポインタを扱えた。これはものすごく大きい。

Javaが糞なのは、全く関数ポインタを扱えず、
その結果デザインパターン(キリッする糞言語になっている点だ。
ただしあの頃はまだ「関数ポインタの有用性」がさほど理解されておらず、致し方なかった面もある。
C#もこの辺、記述方式が二転三転しているし、C++もやっとラムダを取り入れたばかりだ。
K&Rも「関数ポインタも使えるよ」としか書いて無い。あれはもっと力説されて然るべきだった。
でも、今新しい言語を作るとして、関数ポインタが使えないのはマジで糞だろ。
そしてこの点、文法的にではなく、
「社内ルールで」関数ポインタの使用を制限する「老害」が多いのは圧倒的にJavaに決まっている。
Cは元々使えたし、C++は(読みやすくはないが)ファンクタを使えたので、有用性は「老」でも理解している。
Javaにはそもそも関数ポインタの使い方を理解している「老」がいない。
Java8で文法的には取り入れられたものの、おそらく大半の職場では相当期間制限されるはず。

102デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/27(月) 20:05:06.84ID:pbeBNwkp0
海外の連中の話だと、「プログラミング自体」を学ぶのに一番早いのはPythonだと言われてる。
(俺はPythonを使ったことがないから分からんが)
例えば、入門者のよくある質問、
「元データがこういう配列で、このうち○○を含むものだけを抜き出したい」等、
どうプログラミングするか、という所から学ぶケースだ。
この辺の本当の初心者に対しては、
C++の、よし、ここはスマポだ、とか、
Javaの、そこはオブジェクト指向で云々、とかは邪魔なんだよ。
本当にフォーカスすべき案件に集中できない。
この意味ではC++は最初の言語には向いていない。
だからド初心者用の入門書の良書は少なく(需要がない)、逆にeffective系が多いのだと思う。
ただしPython自体も古くてゴミな部分もあるから、(ラムダに制限がある)
基礎を組めるようになったら早く卒業し、
C/C++やJavaScript等の「無制限な」言語で色々やったほうが上達するとは思うが。
この意味ではJavaやPythonは制限されすぎていて駄目で、
C#は適切に制限されているから、現実解としてはかなりありで、
C/C++やJavaScriptは自由すぎて(上達はするが)大規模システムを組むには怖く、
だからこそJavaが現代版COBOLとしてのさばっている、という構図だが。
だから、C++erが大規模システムの為に安全なJava言語を選ぶ、というのはありなのだが、
Javaしか出来ないJava鹿が知ったような口を利くからおかしなことになる。
Javaがどれほど制限されているのか理解していればそんなことは言えない筈なんだがな。

この辺、新しく出てきたGoは色々整理されているはずだと期待したんだが、
かなり糞だったので逆に驚いた。あれではC+GCでしかない。
今更Generic出来ないとかマジで糞過ぎる。
逆に言えば、今でもC文法そのままでよく、GCだけ欲しい人にはGoは向いているが。

103はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)2017/11/27(月) 20:24:50.03ID:GAML79c/0
>>102
Go はさっぱりあかん言語だというのには同意するが、
現実にはその程度で良かったという話なんだよ……

104デフォルトの名無しさん (ワッチョイ 67c3-+V5r)2017/11/27(月) 20:46:19.07ID:FoS8Dw4c0
全くの初心者なら、まずはC言語の勉強をしてから>>94のc++ プライマー第5版などを読むのがいいかもしれないね
俺の知っているC言語の本で一番分かりやすかったのは、アスキーラーニングシステムの「入門C言語 新装版」と「実習C言語 新装版」だけど、さすがに古いかな?
同じ著者の本で2008年に出ている「Cプログラミング講座」というのもあるけど、これは読んだことがないな
というか、こっちもすでに絶版になっているっぽいな...

105デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)2017/11/27(月) 21:02:33.36ID:u8FYnIqP0
発狂しやがったw

106デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/27(月) 21:58:25.69ID:x+zk8UEy0
ゲームプログラマになる前に覚えておきたい技術、平山 尚、2008

この本は賞を取ってるけど、セガの平山は、
1冊で、C++ の文法と、ゲームプログラミングの2つを、
同時に習得できる本を目指したけど、無理だった

結局、C++の文法だけで、2007年のロベールの分厚さが必要。
人間の読める限界を超えている。
それでも、日本にはロベールがあるだけマシ。
外人は、やさしい本が無いから、もっと苦労してる

結局、1冊でJava の文法と、オブジェクト指向の2つを説明したのが、
2011年の「スッキリJava」

ここまで、待たなければならなかった。
外人は、スッキリも無いから、もっと苦労してる

外人の場合、専門書しかないから、偏差値70未満は、単純に振るい落とされるだけ。
日本のように、学ぶことはできない

107デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/27(月) 22:04:03.51ID:pbeBNwkp0
>>103
あれは言っちゃあ悪いがC++のオブジェクト指向が暴走した反動だよ。
C++が無駄に複雑化しなければ全くのゴミだったはず。
それ以前にC++はGC嫌いが宗教じみてる。
無駄にスマポで頑張るのではなく、VC++/CLIのgcnewを導入した方がましだったと思うよ。

Goは全く新しい機能がなくてびっくりした。
ただ、C++が複雑化しすぎてWeb系(というかバックグラウンドがない初心者)に厳しいのは事実。
そしてゆとり版C++=Goってのも分からなくもない展開だ。
ただ、持ち上げている連中の非力感は否めない。
あれは関数型()と同様に大騒ぎしてポシャる可能性もあると思う。

108 ◆QZaw55cn4c (ワッチョイ 5f60-2JzH)2017/11/27(月) 22:37:12.11ID:b0u4s5jJ0
>>93
独習c++ いいね、ハーバード・シルトは要点を押さえてさえている、独習Java がダメダメだったのとは一線を隔しているね
演習問題に std::string を再実装する、という山場があるが、それを乗り越えると c++ の初級者になれると思う

109デフォルトの名無しさん (アウアウカー Sadb-NhOl)2017/11/27(月) 22:38:46.80ID:c8zZNJxQa
>>70
明確な強い理由がない限り言語なんて大概何でもいいだろ

どこの現場でも出来る奴ってのは、モジュール設計のセンスとネーミングセンスのある奴じゃなかろうか

110 ◆QZaw55cn4c (ワッチョイ 5f60-2JzH)2017/11/27(月) 22:55:46.68ID:b0u4s5jJ0
>>99
Java のいいところは、一文字一文字丁寧に読んでいければだれでもわかるように書けるところにあるのでは?
それは一つの到達点だと思う
BigInteger.ONE とか、ちょっと嫌だな、と思う書き方はあるが、仕方がない
(gmp なら 普通に 1 と書けば文脈を読んで BigInteger(1) というコンストラクタが働くのだが、昔の Java はそもそもオートボクシングがなかったくらいだし)

C/C++ ならスタックにデータを置けても規模が大きくなると、new/delete する方向になるのを見込んで、Java が最初からクラスをスタックに置かないことに徹したのも、
定石どおりでいい感じ、Java は尖がったところがないので好感をもっている

昔はアルゴリズムの教科書といえば pascal で記述されたものだが、最近は Java で記述されているものもよくみかける
私は Java を非難したくはないな…

111デフォルトの名無しさん (ワッチョイ bfe7-5mWG)2017/11/27(月) 23:07:39.99ID:ot/xhhe10
unique_ptrとshared_ptrのことちゃんと解説してる日本語本ってないだろ(C++1xのマニア向け本除く)
レガシーコードのメンテするんでもない限り生ポインタで一生懸命あーだこーだしてる古い本なんて役に立たないしむしろ有害だよ
規格書読んだほうがまし

112デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)2017/11/27(月) 23:08:39.40ID:u8FYnIqP0
>>107
じゃあ、おまえの主張どおりC++にGCを実装するなら
どんな実装になっていたんだ?
俺はベアメタルのROM屋だが
今でさえ例外だのRTTIだのでさえ殺意を覚えているんだが

113デフォルトの名無しさん (ワッチョイ 7f81-fNTp)2017/11/27(月) 23:26:49.34ID:gwom9yQZ0
マニア向けも何もunique_ptrもshared_ptrも1x以降に実装されたんだから当たり前やろ

114デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/27(月) 23:28:11.32ID:x+zk8UEy0
unique_ptr, shared_ptr などは、たぶん、Boost の本に載ってるかな?

C++ は、Rust, Elixir へ移行している

C++ では、多重継承も難しいから、Java, C# では単一継承だけになった

115デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/27(月) 23:32:43.41ID:pbeBNwkp0
>>112
だから書いたろ。gcnewだよ。
https://msdn.microsoft.com/ja-jp/library/te3ecsc8.aspx
動きとしては、C#やJavaのnewと同じ。
ただしnewだと予約語で被るのでgcnewになってる。

C++はランタイムが無いから、std::GCを作って、
gcnewを1回でも呼んでいるようならそれをリンクしてやればいいだけ。
まあ今からでもできる拡張だからやってくれ、とも思うが。
ただ、GCは絶対に入れない宗教なんだろC++は。

116デフォルトの名無しさん (ワッチョイ 7f81-fNTp)2017/11/27(月) 23:34:27.97ID:gwom9yQZ0
いくらなんでもGCはいらんやろ

117デフォルトの名無しさん (ワッチョイ 077f-lrN+)2017/11/27(月) 23:37:10.60ID:Tgpr/JpE0
リソースを全部GCで管理してくれるならいいんだけど
自分で解放しないといけないリソースもあってなんだそりゃっていつも思う

118デフォルトの名無しさん (ワッチョイ 5f34-y0n2)2017/11/27(月) 23:38:00.85ID:/nBMg24u0
GCなんて負の遺産だろ
崇高なC++にそんなもん混ぜんな

119デフォルトの名無しさん (ワッチョイ 7f81-fNTp)2017/11/27(月) 23:39:22.69ID:gwom9yQZ0
>>117
ほんこれ
んで結局usingだのwithだのって、ええ…って感じ

120デフォルトの名無しさん (ワッチョイ 474f-2aMW)2017/11/28(火) 00:15:26.24ID:MNvbCMHv0
>>111
c++プライマー第5版で解説してる。

121デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/28(火) 00:27:26.85ID:S7QzL+/B0
>>110
Java自体はオブジェクト指向の完成形になるはずだったのは認める。
問題は、Javaに関数ポインタがなく、それが致命的だったことだよ。

というかあの頃のC++/C#/Javaの連中は誰も関数ポインタの有効性に気づいてない。
だからC++でも匿名関数をサポートしてなかった。
関数ポインタ=オブジェクト指向(多態)を手動でやるときに必要=クラス構文でサポートしたからイラネ
という判断だったのだろう。C#のdelegateもまずクラス(thisの受け皿)ありき、だからね。
あとはcallback出来ればいいや、位か。
関数型のように関数ポインタを常用する事になるとは思ってもいなかったはず。

ところがLisp-Erlang-Haskellの連中は匿名関数の有効性に気づいていて、
おそらくJavaScriptでそこに日が当たってしまった。
そして匿名関数のサポートがないのは間違いだったと気づき、C++/C#/Javaの全てはこれを導入した。
(後は関数がfirstClassObjectになるかどうかだが、
今のC++の雰囲気なら、じきに何らかのサポートを入れると思う)

ここで問題なのは、C++/C#は以前から関数ポインタを(見やすくはないが)使えたから、
ユーザも使えるし、コードも必要ならそう記述してあること。
一方、Javaはユーザ側にその知識がないし、
関数ポインタが無い為に継承等で無理に実装してあるコードが既に大量にあること。

Javaユーザが勉強熱心だとはお世辞にも思わないし、何周も他言語ユーザから遅れてしまっている。
そして大量に居るJava鹿の為、すぐにJava8を導入できるとも思えない。

ただしC#は進化し続けた=ユーザーに勉強を強い(時間を奪い)、
また環境にも負荷をかけ続けた(いちいち新しいコンパイラ等を整備する必要がある)為、
結果的にエコシステムの構築が遅れ、
下位互換でしかないJavaに対してかなり出遅れている感じは否めない。
ここら辺は結果論でしかないが、分からん物だね。
単純にいい言語が繁栄するわけでもないし。

122デフォルトの名無しさん (ワッチョイ 7fa5-5mWG)2017/11/28(火) 00:41:52.09ID:+e31yHtn0
ワッチョイ便利だね。

123デフォルトの名無しさん (ワッチョイ 0775-forR)2017/11/28(火) 01:00:11.14ID:g1MyZtTV0
煽りカスさん乙

124デフォルトの名無しさん (アウアウカー Sadb-Fzm/)2017/11/28(火) 01:05:09.69ID:4Z4gLCZka
匿名関数はラムダやろ?

125デフォルトの名無しさん (ワッチョイ 8746-TjkM)2017/11/28(火) 01:10:37.08ID:pJ0hWez80
古典的な同期プログラムなど、いまどき何で書いても同じ
問題になるのは
非同期処理やら
例外安全(処理の巻き戻し)やら
マルチスレッドでデッドロックしない云々やら
いわゆるトランザクションのようなものをどう実現するかやら
そのへん

超高級言語で、いわゆるスクリプトなどなど
高級なくせに上記のサポートが何もないのが真の糞言語で
無駄に重たいだけで、「今まで何やってたの?」状態
動的型なんか何も意味無かったし、本当に何やってたんだろうな

126はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)2017/11/28(火) 02:18:11.95ID:1OfFiaid0
Go はランタイムごと新しく作ったからな。

127デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)2017/11/28(火) 05:29:42.55ID:VD3vPh0F0
>>115
おまえアンカーミスったか?
俺の問いに対して一言も答えていないんだが

128デフォルトの名無しさん (ワッチョイ c780-U9VW)2017/11/28(火) 06:46:20.76ID:RUZbaLWb0
new自体ほぼ使わないのにgcnewを導入しろとかアホか

129デフォルトの名無しさん (ワッチョイ 0793-C/lT)2017/11/28(火) 07:49:07.52ID:tl7kMs1v0
一連の投稿(同一ワッチョイによる)を一通り読んだけど、
マトモに議論(賛成にしろ反論にしろ)できるほど理解できなかったわ。
自分の読解力というか、多くのプログラミング言語を比較評価できるだけの
知識の欠如が原因で、投稿者を批判するわけじゃないんだが。

ただ一応は読んだ、という証拠を示す意味で一言。
>>102 にある「Javaしか出来ないJava鹿」って言い回しは気に入った。
意識して書いたか分からないけど、ウマくかかってる。

130デフォルトの名無しさん (ワッチョイ 278a-I1Jk)2017/11/28(火) 08:26:28.34ID:Qe8OZN310
他の言語のスレに行ってJAVAを薦める「Javaデモ」はいらん。
デモもピケもお断り

131デフォルトの名無しさん (ワッチョイ 47b3-h3cN)2017/11/28(火) 11:27:26.73ID:QyLugM0S0
Javaはいいぞう~。

132デフォルトの名無しさん (ワッチョイ 07eb-5mWG)2017/11/28(火) 12:26:15.71ID:+ODnZXKO0
Java原人がいるようだね

133デフォルトの名無しさん (ワッチョイ 47b3-h3cN)2017/11/28(火) 20:00:44.77ID:w5+ReiF20
煽っても無駄ですよ!

134デフォルトの名無しさん (ワッチョイ dfeb-+V5r)2017/11/28(火) 20:32:34.90ID:yKt6vWJv0
D言語はなぜ流行らなかったのか・・・・・・

135デフォルトの名無しさん (ワッチョイ 0778-4Z1+)2017/11/28(火) 20:33:55.36ID:HaaNvQJm0
俺、D言語の方が好きなんだ

136デフォルトの名無しさん (ワッチョイ 5fbd-hcjg)2017/11/28(火) 20:43:15.23ID:Zbhkl8PP0
規格の更新速度が遅すぎた

137デフォルトの名無しさん (スプッッ Sdff-T4vC)2017/11/28(火) 20:56:09.01ID:VZsT4wzqd
pairを戻り値とする関数内でmake_pairを返そうとしてる

pair<string, string>( vector<string> vec)
{
return make_pair<string,string>(vec[0],vec[1])
}

要素数が2より小さいときにペアが作れないから他のものを返したいのだけど
こういう場合は何を返せば良いのだろうか?
受けてる先では

map<string,string>にinsertをしてる

138デフォルトの名無しさん (スプッッ Sdff-T4vC)2017/11/28(火) 20:59:58.28ID:VZsT4wzqd
>>137
見直して意味わからんかったので直しました

pair<string, string> XXX( vector<string> vec)
{
return make_pair<string,string>(vec[0],vec[1])
}

int main()
{
map<string,string> map:
map.insert(XXX(vector))
}

139デフォルトの名無しさん (ワッチョイ 272d-eGxq)2017/11/28(火) 21:14:23.08ID:/W89QHRM0
>>137
C++17の std::optional を使うところかな

戻り値をstd::optional<std::pair<string, string>>にして
意味論的に不正な場合は std::nullopt を返す

C++17以前なら boost::optional もあり

140デフォルトの名無しさん (ワッチョイ c780-U9VW)2017/11/28(火) 21:16:00.33ID:RUZbaLWb0
>>137
しらんがな。返したいもの返せよ

141デフォルトの名無しさん (ワッチョイ 07b3-/3HV)2017/11/28(火) 21:17:15.47ID:nsdKAlOZ0
tupleじゃあかんの?常に2以下なんかね

142デフォルトの名無しさん (ワッチョイ 07b3-8Ex9)2017/11/28(火) 21:27:48.71ID:elkBwSAY0
あぁスマンmapに入れるのか
でも1つしか無かった場合もmapに入れたいのかエラーにしたいのか??

あとmake_pairは関数だからテンプレート引数は省略できるよ

143デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/28(火) 21:59:35.14ID:S7QzL+/B0
>>127
キチガイ死ね
韓国人死ね

>>128
それはCへの回帰だぞ。お前は多分理解して無いと思うが。

144デフォルトの名無しさん (ブーイモ MMcf-N4rA)2017/11/28(火) 22:39:29.70ID:lP6TeLLOM
>>137
nullobjectパターンかね
mapで絶対検索されないキーを突っ込んでおくとか

145デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)2017/11/28(火) 22:45:01.20ID:VD3vPh0F0
>>137
何を返しても嘘になるので、返してはダメ
if (vec.size() < 2) throw logic_error{"runt vector"};

146デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)2017/11/28(火) 22:46:39.17ID:VD3vPh0F0
もしくはassert(vec.size() >= 2);

147デフォルトの名無しさん (ワッチョイ 0778-4Z1+)2017/11/28(火) 22:54:08.70ID:HaaNvQJm0
name=valueみたいなのを分割してmapに入れる感じ?
俺も例外投げて止めてしまった方がいいねと思うね

148デフォルトの名無しさん (ワッチョイ 47b3-h3cN)2017/11/28(火) 23:41:38.36ID:w5+ReiF20
だが待ってほしい。
例外を投げるということは誰かに責任を押し付けることではないだろうか。

149デフォルトの名無しさん (ワッチョイ 7f81-nM14)2017/11/28(火) 23:44:58.64ID:KluQKWh40
上位処理「ハンコ押してください」

150デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/28(火) 23:53:44.75ID:S7QzL+/B0
>>129
C++より簡単でお気軽な言語が大量にある今、C++で全くの初心者用の環境を要求すること自体が間違い。
それはトレーラやユンボでド初心者を教習するのに近い。
そうではなく、まず普免を取ってからこれらの特殊車両だろ。
お前は「俺はトレーラー乗りになりたいから、最初からトレーラーでやってくれ」とゴネている教習生なんだよ。

C++のオブジェクト指向でいい本が「世界中に」ない=C++やるような奴にはそんなもの需要がない

でしかない。お前はそれすら理解出来ない馬鹿なのに、

> C++の本を書くような人はオブジェクト指向の説明をするのは沽券に関わると思っているのか、
> あるいは「C++の専門家」にはオブジェクト指向を教える能力がないのか。

ってのは自意識過剰すぎる。世界はお前を中心に回っているわけではない。
C++を使う必要がある局面でC++を使う人たちには、今更オブジェクト指向なんて教える必要がないんだよ。
それは自明だから。
そして本を書いている奴らも別段崇高な精神を持って布教しようとしているわけでもない。
いや、そういう奴もいるかもしれないが、当然「売れるから書く」という下俗な奴も世界には必ず居るはずであり、
そういう奴らすらいない=売れない=需要がない=みんな既に知っているから、でしかない。
だいたい、オブジェクト指向ってのはプログラミング手法であり、
言語とは別の軸なのだから、「『C++の専門家には』オブジェクト指向を」ってのも論理的におかしい。

151デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/28(火) 23:54:34.49ID:S7QzL+/B0
そもそもオブジェクト指向がさも特別で崇高な存在だ、なんてのはJava教団がそうしたがっているだけで、
実際のところは、Cで大規模コードを扱うと、最初はstruct*、次に関数ポインタの嵐になり、
これらをどうにかしてコンパイラに自動的にやらせよう、として生まれたのがC++のオブジェクト指向だ。
だから既に言ったがC→オブジェクト指向は完全に地続きなんだよ。
これは出自からしても当然で、
Cの典型的な問題点を新たな言語サポートにより解決することを目指したものがC++だから。
逆に言えば、C++98で搭載されている機能はほぼ全てCの問題点の克服であり、
Cを使いこなしていた連中にとっては当たり前に「その気持ちは分かる」ものでしかない。(なお同意するかは別)
そしてオブジェクト指向もこの中に入っている。
だから当初からオブジェクト指向の有効性をわざわざC++で語る意味はなかったし、
他お手軽系言語が乱立している現在、さらに輪をかけてその必要性がなくなっている。

152デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/28(火) 23:55:33.62ID:S7QzL+/B0
それでも初心者が「オブジェクト指向自体を学びたい」ときにはどうすればいいかと言えば、
俺個人は「まず3k行程度なら平気で書けるようになってからでいい。そうすればおのずと分かる」という立場だ。
しかしそれでもHellowWorld直後のド初心者に教えようってのならJava教団みたいに洗脳していくしかない。
どう見ても実行に直接関係ない記述の嵐であり、ド初心者にとっては「無駄じゃね?」としか見えないだろうし。

だからこの意味ではJava教に入信しろ、というのもありではあるのだが、
問題はJava教団はJava教の不備は絶対に認めないというか、気づいてないことだ。
関数ポインタさえあれば非常に単純に実装できることを、無理に継承を導入したおかしな構造で対応し、
しかもそれをデザインパターン(キリッと公式化しようとしている所が滑稽だ。
しかし、Java教信者は関数ポインタの存在を知らないから、この教義がおかしいとも気づけない。
また、Javaのオブジェクト指向は今既に邪道で、オブジェクト指向するのが目的化してきてる。
例えばprivateにすること、イテレータを実装することが目的になってるだろ。
だから実際に前スレ896みたいな事も平気でやる。本当に全く意味が無い。
(これについてはLinusはC++erも同様だと言っているが)
だからJava教でオブジェクト指向を学ぶのは、邪教というか、
邪オブジェクト指向を学ばされる可能性がかなり高いのでオススメしない。

153デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/28(火) 23:56:37.90ID:S7QzL+/B0
結局、オブジェクト指向は「学ぶ」物ではなく、本来は「悟る」物なんだよ。
そしてそれは涅槃の境地で解脱しろ、みたいな崇高なものではまったくなく、
「この交差点、信号無いと危なくね?」位の、普通に運転してりゃ分かるだろ、程度の物でしかない。
だからわざわざ解説するほどのことでもないんだが、結果的に、
「オブジェクト指向しろ」と言われる割には解説本がなく、初心者にとってはなんだかよく分からん状況になっている。
そしてお前みたいな馬鹿は「幼稚園で『どこに信号を立てるべきか』きっちり教えるべきだ!
俺は教わっていないから分からない!教えられる先生もいないのか!」
と主張するわけだが、完全にモンペ通り越してキチガイだろ。
オブジェクト指向は幼稚園で教えるべき内容ではないし、教えなくとも自然と理解できる物だし、C++は幼稚園ではないし。

そして脱線すると、「結局オブジェクト指向はよく分からんね」というゆとりが逃げ出した結果が関数型祭りだ。
いや結果的にはC++/C#/Javaの全てがラムダを導入したのだから、一定の成功を得た、と評すべきかもしれんが。
しかしErlangみたいに「オブジェクト指向での限界を突破する」為の明確な方策がなく、
単に馬鹿な連中がより簡単な関数型に逃げ出しただけであり、そこで何か新しい境地が拓けるものではなかった。
そしてGoも俺はこれに似た匂いを感じてる。C++出来ないゆとりが集まっただけじゃんこれ、みたいな。
ただし、確かにC++は無駄に複雑化しているのも事実だが。

> Java鹿
それ、読み方は「Ja馬鹿」ね。ただ表記上分かりやすいので「Java鹿」にしてるが。

154デフォルトの名無しさん (ワッチョイ c776-4mbd)2017/11/28(火) 23:57:04.62ID:7WoPw74F0
HellowWorld

155デフォルトの名無しさん (ワッチョイ 5f34-y0n2)2017/11/28(火) 23:59:42.90ID:layR/96s0
また長文ウンチ君かよ

156デフォルトの名無しさん (ワッチョイ 07eb-5mWG)2017/11/28(火) 23:59:58.99ID:+ODnZXKO0
ワッチョイって神だわ

157デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/29(水) 00:05:12.43ID:LrQLLGRZ0
まあ俺はゆとりは死ねとしか思って無いからな。
つか、この程度の文も読めないのなら、お前ら仕様書や本も読めないだろ。
向いて無いからプログラマ辞めろよ。

158デフォルトの名無しさん (ワッチョイ 7fa5-5mWG)2017/11/29(水) 00:13:55.97ID:jItlzFQF0
>>148
そこはまぁその関数の仕様として、呼び出す側が確実にcatchする責任があるわけだな。
それを忘れると例外が呼び出し階層を突き抜けていっちゃう。
そういう事態を防ぐために考えられたのが検査例外だけど、これはこれで使いづらい面があるんで
Java以外にはあまり採用されなかった。
そんなことを考えてみると>>137程度の目的で例外などという暴力的な仕組みを使うのがそもそも
適切なのかどうか。Goの選択もそういうことなんだろう。

159デフォルトの名無しさん (ワッチョイ 47b3-lrN+)2017/11/29(水) 00:19:11.17ID:gRQoJ5CS0
http://nekko1119.hatenablog.com/entry/20120625/1340602468

main関数の最後にあるstringへのキャストでエラーがでるのですがなぜですか。
エラー C2440 '型キャスト': 'Any' から 'std::string' に変換できません。

コンパイラはvc++2017です。

160デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/29(水) 00:22:57.10ID:LrQLLGRZ0
>>158
> Goの選択もそういうことなんだろう。
Goのって「自分でthrowしないといけない例外」だろあれ。
あれなら普通の例外のほうがよかったんじゃ…と思ったけどね俺は。

161デフォルトの名無しさん (ワッチョイ 7f81-fNTp)2017/11/29(水) 00:29:49.23ID:+gz4D8Lj0
>>159
(string)をany_cast<std::string>にすれば通りそうだが

162デフォルトの名無しさん (ワッチョイ 47b3-lrN+)2017/11/29(水) 00:36:37.38ID:gRQoJ5CS0
>>161
通す方法ではなくてなぜ通らないのかが聞きたいのですが

template<Type>
operator Type()
で暗黙の型変換のオーバーロードを定義しており、
int型やHoge型に対して代入する際にそれが使われているのに
std::stringに対してだけうまくいかない理由はなぜかが知りたいです。

163デフォルトの名無しさん (ワッチョイ 7f81-fNTp)2017/11/29(水) 00:44:30.01ID:+gz4D8Lj0
>>162
intのとこもHogeのとこもキャストは使われてないように見えるが…
でもまぁ確かに呼ばれてほしい気もするね
static_castでもだめ?

164デフォルトの名無しさん (ワッチョイ 47b3-lrN+)2017/11/29(水) 00:45:54.72ID:gRQoJ5CS0
すいません。勘違いしてる部分がありました。

std;;stringだけじゃなくて他の型でもダメみたいですね。
質問取り下げます。もう一度自分で考えてみます。

>>161
失礼しました。

165デフォルトの名無しさん (ワッチョイ 5fe7-8Ex9)2017/11/29(水) 00:51:28.18ID:AJHdDibY0
>>162
gcc 7.1.0とclang 6.0.0では通った
ただしstd::type_infoと書くべきところをただtype_infoと書いてる個所があるので、それは直したけど。
それより下のコンパイラバージョンだとエラーになった。(ambiguous conversion)

そして
(string)val
の代わりに
(const string&)val
と書いたらclang 4.0.1でも通った。

166デフォルトの名無しさん (ワッチョイ 47b3-lrN+)2017/11/29(水) 01:02:17.23ID:gRQoJ5CS0
(int)valはいけますけど
(Hoge)val, (std;;string)valはダメのようですね。

で、ご指摘のとおり
(Hoge&)val, (std::string&)valは通りました。

前者と後者の違いは分からないですが。

167デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/29(水) 01:27:40.52ID:/RfTzpPk0
& の意味が分からないなら、プログラミングできない

(int)val
普通、こういうキャストの書き方は、しない

static_cast など数種類あるキャストの書き方の中から、
キャストの種類を指定してキャストする

君は、入門書を読んでいないだろ

168デフォルトの名無しさん (ワッチョイ c780-U9VW)2017/11/29(水) 02:04:04.04ID:qCLwkY6K0
>>143
newの代わりにmalloc使ってるとか思ってるアホ?
今時new使うやつは以下のどれか
* Javaから来たC++初心者
* 化石コンパイラ使わさせられてる可哀想なやつ
* 自身が化石な可哀想なやつ
* パフォーマンスのために用意されてない構造の実装が必要なライブラリ設計者

お前は1番目と3番目の複合型だろうね。

169デフォルトの名無しさん (ワッチョイ 47b3-lrN+)2017/11/29(水) 02:17:56.38ID:gRQoJ5CS0
template<class Type> Any::operator Type() const

上をやめて、下の2つを定義したらmain関数の記述そのままでうまくいきました。

template<class Type> Any::operator Type&() const
template<class Type> Any::operator const Type&() const

理由は分からないです。分かる方がいたら教えてください。

170デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/29(水) 03:01:43.02ID:/RfTzpPk0
& の意味が分からないなら、プログラミングなんて出来ない。
初歩の初歩なのに

まず、入門書を読むこと

171デフォルトの名無しさん (ワッチョイ a723-SHUC)2017/11/29(水) 03:06:58.25ID:l2Be3tXA0
質問の意味わからんでレスしてる奴うざいわ

172デフォルトの名無しさん (スプッッ Sdff-T4vC)2017/11/29(水) 04:38:58.34ID:llo+D0tpd
>>144
>>139
>>145
基本的には2以下は存在しないから例外処理組み込もうと思ったけどnullobjectってのがあるのね
おそらく俺の理想的にはこいつが適してそうだからこいつを調べてみるよ

>>145の言うとおりに絶対に呼ばれないキーをいれておくのも検討違いな気はしてる

173デフォルトの名無しさん (スプッッ Sdff-T4vC)2017/11/29(水) 04:50:10.36ID:llo+D0tpd
>>147
まさにそれをしようとしてる
そこのロジック的には空文字入れる予定だから必ず2以上になるのだけど
関数分割していて関数としては何が返ってくるか不明なため
問題が起きたときのコードを記載しようとしてる
vectorのsizeが0や1の時にアクセス違反になってしまうからどうやれば回避できるのかなぁと悩んでる

例としてはこんなん
=value
key=value
key=
==value

174デフォルトの名無しさん (スップ Sd7f-cUxe)2017/11/29(水) 07:52:20.02ID:o9GGe8w4d
>>171
確かにそうだね
それにclangの最新だと通ることから、それなりにややこしい話かと思う

175デフォルトの名無しさん (ドコグロ MMdb-CDhT)2017/11/29(水) 08:27:09.91ID:WoWbjmOBM
>>173
> key=value
これは正常ケースだよね

> key=
仕様によるけどvalueに空文字入れときゃいいんじゃね?

> =value
> ==value
エラーでしょ?
例外発生させるなり、ログ採ってnullptr返すなりしなよ
そんなものを無理矢理 map に突っ込もうとするのがおかしいと思うぞ

176デフォルトの名無しさん (ワッチョイ 0778-4Z1+)2017/11/29(水) 08:58:03.16ID:p7HSt6hG0
>vectorのsizeが0や1の時にアクセス違反になってしまうからどうやれば回避できるのかなぁと悩んでる
vectorの要素数が不確定の場合はatで取り出せばいいよ、なんかあったらout_of_rangeが飛んでくるから

177デフォルトの名無しさん (スプッッ Sdff-T4vC)2017/11/29(水) 09:33:07.40ID:llo+D0tpd
>>175
空文字入れるのはできてる
ただベクターの生成は別関数が行うから引数に渡されるベクターにいくつ値が入っているか不明
だからマップ作成側で個数を意識する対策する必要あるよね?って話
ベクターの生成に関しては実際問題ない

>>176
try catchするしかないのかな
nullopt返そうとしたけど実装無理だったわ...

178デフォルトの名無しさん (ワッチョイ 8746-TjkM)2017/11/29(水) 10:42:28.73ID:IulhJnoW0
例外投げるかなにかしとけばよいって
ロジック的に要素数2未満はあり得ないし想定してないんでしょ?
余計なことする必要ないって、以降の処理が余計ややこしくなるだけだから
エラー処理が適切

179はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)2017/11/29(水) 10:50:41.36ID:nr0c2ixN0
あってはいけないことなら assert で止めてしまえよ

180デフォルトの名無しさん (ワッチョイ 8746-TjkM)2017/11/29(水) 10:58:33.93ID:IulhJnoW0
assertは良いがリリースビルドで消えてなくなるから
それがあってるかどうかだな
よほど条件に自信があればassert

181デフォルトの名無しさん (ワッチョイ bf9f-8Ex9)2017/11/29(水) 11:00:19.45ID:VlCz8ge40
複雑なことをせずに設計しなおせばいいんじゃね?

182デフォルトの名無しさん (ワンミングク MM3f-U9VW)2017/11/29(水) 11:28:13.62ID:CqyTJd2aM
>>178
おいおい、例外をエラー処理以外に何に使うってんだよ

183デフォルトの名無しさん (ワッチョイ 47b3-h3cN)2017/11/29(水) 11:33:09.98ID:51eC79nG0
メッセージの通知に!

184デフォルトの名無しさん (ワッチョイ 8746-TjkM)2017/11/29(水) 12:07:51.67ID:IulhJnoW0
>>182
だから、エラー処理が適切だから
例外投げてエラー処理でもしとけば?と書いてあるはずだが・・・

ただこの手合い、例外投げて、それを受け取ったからと言って
リカバリーしてプログラムを再開できるかはわからないよなぁ
プログラム本体の状態を一切汚さずに(書き込まずに)
新規領域のみで何か処理をして
例外が飛んで来たら全てを無かったことにする・・・とか
例外でやる場合は例外安全を確保するのが結構面倒なんで
プログラムの末端から例外投げるのは最後の手段にしたい

だから「実際に実行してみないとエラーが出るかわからない」系のエラーが無いのであれば
早期の段階で入力データにエラーがあるかどうか精査して、エラーがあればその旨返して
以降はエラーが発生しない前提で処理する(ので巻き戻すことは考えない)
もし不慮のエラーが発生したら、バグであるからログ吐いて異常終了
可能なかぎり、なるべくこちらで行きたいわけで

185139 (ワッチョイ 272d-eGxq)2017/11/29(水) 12:10:47.10ID:/Yd3ZvxU0
>>177
optionalを挙げたものだけど 惑わせたようで申し訳ない

insert 前にチェックして不正ならそもそもinsertしない設計を考えてました
結局 optionalを返す insert / find を自前実装することになるから
そんな面倒な事せずに 素直にXXXで例外投げても全く構わないと思う

一応詫び代わりに書いてみたけど 鵜呑みにはしないでください
C++17 例外なし 読みやすさのためにautoなし
https://wandbox.org/permlink/rag4d7YPqwPKQpNq

186デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)2017/11/29(水) 12:13:09.20ID:f8CPZ7/S0
182=184
同じ臭いがする

187デフォルトの名無しさん (スップ Sd7f-cUxe)2017/11/29(水) 12:14:34.01ID:o9GGe8w4d
検査可能な事前条件はそりゃ呼び出し側の責務にしたいわな

188デフォルトの名無しさん (ドコグロ MMdb-CDhT)2017/11/29(水) 12:52:35.24ID:WoWbjmOBM
>>177
> ただベクターの生成は別関数が行うから引数に渡されるベクターにいくつ値が入っているか不明
.size で取ればいいだけだろ
そもそも name=value のパース結果をベクターで渡してくると言うの設計もどうかと思うが

> だからマップ作成側で個数を意識する対策する必要あるよね?って話
そうだよ、その対策を>>175にかいたつもりだが...
もしかして
name=

=value
の両方とも vec[0] にしか入れてこないとかなってるんじゃないよね?
だとしたら生成部分を直さないとどうしようもないけど

189デフォルトの名無しさん (ワッチョイ 47b3-h3cN)2017/11/29(水) 13:49:04.14ID:51eC79nG0
ヴェクターノズル搭載。

190デフォルトの名無しさん (スプッッ Sdff-T4vC)2017/11/29(水) 14:47:34.47ID:llo+D0tpd
色々とありがとう
最終的には呼び出しもとでtrycatchすることにしました

>>188
両方とも0 1の要素に値いれてるね


もう一個別件なのだけど
ファイルの存在チェックとファイルのオープンエラーについて教えてほしい

ある設定値は特定の設定ファイルが存在するにも関わらず読み込めなかったときに有効になるものとしたい
且つ設定ファイルが存在しないときもある
(設定する値が二つある。ひとつはkey=valueの形のvalue、もう1つは正常にファイルから値がとれたか否か)

ファイルが存在しないときはvalueの値をデフォルトで扱う必要があるので、
単純にファイルオープン処理を用いて一度で処理できなかった
(ファイルがなくて開けないのか、あって壊れていて開けないのか判断できないので)

そのため
statでファイル存在有無チェック→ファイルオープンとしたのだけど
タイミングが一致してないので刹那のタイミングでのファイル焼失を担保できないと言われている
どうすればファイルがなくて開けないのか、ファイルが壊れていて開けないのかを判断できますか

191デフォルトの名無しさん (ワントンキン MM3f-fNTp)2017/11/29(水) 15:03:14.59ID:IvqqBLy1M
ファイルオープンの開けませんでした例外をキャッチしたらええやろ

192デフォルトの名無しさん (ワンミングク MM3f-U9VW)2017/11/29(水) 15:30:10.25ID:CqyTJd2aM
keyにデフォルト値が存在するなら、最初にデフォルト値のmapを持つ。
ファイルを読み込んで存在したキーだけ上書き更新する。
だけでいいだろ。ファイル読み込まれなければ全部デフォルト値のままだ。

193デフォルトの名無しさん (ワッチョイ bfe7-5mWG)2017/11/29(水) 18:22:28.81ID:U+t8Y71p0
例外見ろよ
std::ifstreamならstd::ios_base::failureだからcode()の戻り値見ろ
何のために投げてると思ってるんだ

194デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/29(水) 20:17:29.87ID:LrQLLGRZ0
>>168
ゆとり死ね
お前は何も分かってないし、学ぶ知能もない


>>190
> 刹那のタイミングでのファイル焼失を担保できないと言われている
てかそいつに聞けよ。

課題として与えられてるのなら、そいつは「考えさせることに意味がある」と思っているのだから、
こんな糞上司に付き合ってられるか、と思ってないのなら自分で考えろよ。
ここで聞いているのは宿題の答えだけ写しているようなもので、全く上達しないぞ。

195デフォルトの名無しさん (ワッチョイ bfe7-5mWG)2017/11/29(水) 20:25:15.41ID:U+t8Y71p0
ファイル存在チェック→オープンがアンチパターンなのは常識だろ何言ってんだお前

196デフォルトの名無しさん (ワッチョイ 5f34-y0n2)2017/11/29(水) 20:31:50.13ID:6NgtQx/F0
相変わらず持論展開ウザ杉るの自覚してないな
アスペウンチ君

197デフォルトの名無しさん (ワッチョイ 5fbd-hcjg)2017/11/29(水) 21:17:19.68ID:6HlzpX8E0
ハローワールド逝け

198デフォルトの名無しさん (ワッチョイ 079f-5mWG)2017/11/29(水) 21:43:44.23ID:LrQLLGRZ0
C++スレすらゆとり汚染ひどいのかよ
世も末だな

199デフォルトの名無しさん (ワッチョイ 07eb-5mWG)2017/11/29(水) 21:47:36.72ID:ZCDC/+v90
実際にスレ汚しとるのはお前だけどな

200デフォルトの名無しさん (ワッチョイ 8746-TjkM)2017/11/29(水) 22:29:25.62ID:IulhJnoW0
割とタイムリーな話題というか、ここ一週間ぐらい、実行時エラーやら例外やらが発生したとき
どうやったらプログラムを安全に再開するか考えてた
で、至った考えは、ひとまとまりの一連の処理を二つに分割して
まず前半はread onlyセクションで、プログラム本体の状態を書き換えてはならないが
そのかわり例外が発生したら、無かったことに出来る(なのでread onlyにしておく)
後半はwritableセクションで結果をプログラム本体に反映させるが、その代わり例外(失敗)は許さない
bool func(){
  hoge_type result;
  try{ result = sub1(); sub2(); }catch(...){ /*リカバリ可能*/ return false; }
  try{ hoge = result; }catch(...){ /*リカバリ不可*/ abort(); } return true;
}
ただこれでもあまりうまくいかなくて、sub1()とsub2()が上記ルールに従ってたとしても
sub1()は成功してsub2()は失敗した場合に困る
全体としては失敗だけどsub1()は既に成功していて結果も反映されているので
sub1()の実行を無かったことにして巻き戻すのは難しい
sub1()をsub1_read_only()とsub1_writable()に分解するという方法もあるかもしれないが
データの受け渡しで苦労するし、可読性が落ちるうえ、複雑なことはしにくくなる

もう一つの別の要求もあって、重たい処理は別スレッドで実行して即座にGUIスレッドに制御を返したい
ということはユーザーは重い処理のキャンセルが出来るだろうが
処理のキャンセルは例外からのリカバリと本質的には全く同じこと
また、先ほどのread onlyセクションはプログラム本体の状態を書き換えない前提なので
別スレッドで実行したり非同期に同時並行で実行したりが出来る
(ただし、誰かがwritableセクションを実行したら、そいつ以外の処理結果は無効になる
 古いデータに基づいて処理した結果ということになるので・・)

201デフォルトの名無しさん (ワッチョイ 8746-TjkM)2017/11/29(水) 22:30:19.77ID:IulhJnoW0
上記のようなことを総合的にまとめると
void func(){
  // read only セクション
  barrier();
  // writable セクション
}
という結論に至った
ただし、func()はコルーチンから呼び出す
read only セクションでは、必要であれば処理を別スレッドで処理を実行することが出来、自身はyield_returnする
投げた処理が終わるとメインスレッドにて続きから再開してもらう
read only セクションでは、新たなコルーチンを作成することが出来、作成元のコルーチンと親子関係を構築する
親子関係を持つコルーチンの全てがbarrier()に到達するか終了してからでないとbarrier()以降は実行されない
親子関係を持ついずれかのコルーチンがread only セクションにて補足されない例外を発生するか
もしくは外からキャンセルされると、無かったこと扱いになって
全ての親子関係を持つコルーチンにおいてbarrier()以降は実行されない
(親子関係の有る複数のコルーチンの処理が一端barrier()で止まって、全てが成功したのを確認してからbarrier()以降が再開される)
コルーチンにはグループNoを設定することが出来る
違ったグループNoを持つコルーチンを同時に実行することはできない(終わるまで待つ)
同じグループNoを持つコルーチンは同時に実行できるが
いずれかのコルーチンがyield_returnした段階で、それと親子関係のあるコルーチン以外はすべてキャンセル扱いになる
たとえばボタンAを押して処理Aが始まったが処理Aが終わる前にボタンBが押されたら
処理Aはキャンセル扱いになって処理Bが反映される
キャンセルされると困るような処理は別のグループNoにしておく

というような感じでひとまず落ち着いた
グループNo周りはかなり暫定的な感じだが・・・
以上日記

202デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/11/30(木) 00:09:19.12ID:fhhh9IM80
32 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/26(日) 17:30:11.12 ID:DaGrByo80 [1/4]
C++入門書でよく勉強したはずなのにautoとかconstexprとか知らんもんが一杯…

35 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/26(日) 17:38:44.74 ID:DaGrByo80 [2/4]
>>32
やさしいC++第3版
大体9年前に買ったのを寝かしといて最近になって勉強し始めたが、そんなに仕様変更ないと思ってたが間違いだったようだ

36 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/26(日) 17:39:04.93 ID:DaGrByo80 [3/4]
>>33だった

39 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/26(日) 17:52:39.37 ID:DaGrByo80 [4/4]
Effective Modern C++17出たら買ってみるわ

95 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/27(月) 12:49:42.23 ID:vi7VqSly0 [1/2]
遠回しに他の言語の本読めって言っとるようなもんだ

98 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/27(月) 13:23:45.26 ID:vi7VqSly0 [2/2]
>>97
ああそういうことね

132 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/28(火) 12:26:15.71 ID:+ODnZXKO0 [1/2]
Java原人がいるようだね

156 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/28(火) 23:59:58.99 ID:+ODnZXKO0 [2/2]
ワッチョイって神だわ

199 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/29(水) 21:47:36.72 ID:ZCDC/+v90
実際にスレ汚しとるのはお前だけどな


さすがゆとり、これらが役立つ投稿のつもりらしい。

203デフォルトの名無しさん (ワッチョイ 5deb-JjO2)2017/11/30(木) 00:38:22.38ID:trGz4Mxl0
いつの間にかIP信者になったんだ・・・W

204デフォルトの名無しさん (ワッチョイ 6680-9RvO)2017/11/30(木) 01:15:02.77ID:aDlGM/9P0
バックアップの、3-2-1 ルール

同じデータをコピーして、3つ持つ。
2つの媒体に保存する。
1つは、離れた場所に持つ

205デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/11/30(木) 02:04:31.87ID:fhhh9IM80
>>200
SQLite3使ってみろ。

>>201
C++はyeildも入れたのか?と思ったがstd::yieldはただのsleep(0)か。
まああまり凝ったことしても、とも思うし、そもそもGUIはC++で無理に組む意味無いぞ。
それも含めて自由にやればいいとも思うが。


>>125
君は何が言いたかったのだ?

分かると思うが俺がゆとり死ねと言っている奴だ。
見る限り、君は話す気はあるようだ。
125は唐突過ぎてスルーしたが、相手してもいいぞ。

ただし125はバラけ過ぎているからテーマを絞れ、と言いたいところだったが、
その日記を読む限り上段落の話は一連のテーマか?
だったらWeb系の連中ならそこは「DBを使う」って事になっている。
C++は自前で何でもできるから、無意味なほど精神論で速度を追求するわけだが、
そこらへんをサクッと割り切るあいつらのやり方にも学ぶ物はあるぞ。
そもそも自前でトランザクションを実装するとか、検証の手間まで含めたらありえんだろ。
精神論でゴリゴリではなく、上手く手抜きするコツも覚えるべきだ。

206デフォルトの名無しさん (ワッチョイ 8d46-5y5x)2017/11/30(木) 03:11:44.92ID:b5fP6Zaz0
実際問題、メモリやデータだけを復元の対象とするとしたら
DBなど使わなくとも原本を保存しておけば何があっても元に戻せるのだが
そういう話ではないし
どのみち非同期処理にC#よろしくコルーチンが使いたいわけで
ただしそのままでは並行して細切れに処理が走って危険なので
書き込む前にbarrierを設けようというアイデアがまずあって
そうすることでついでに例外安全性も確保できるし
ならばキャンセル処理もできますわなぁという巡り合わさった面白い話

207デフォルトの名無しさん (スップ Sdea-hmNI)2017/11/30(木) 06:56:30.13ID:XcXaihxMd
>>194
確かにそうだね
ありがとう

自分なりに調べて回答も出たのでそれでいくことにします

208デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/11/30(木) 07:37:52.31ID:fhhh9IM80
>>206
> 巡り合わさった面白い話
まあ俺は単に張り切りすぎだと思うけど、
そういうところを含めて無駄に熱いのがC++erのいいところでもあるとは思う。
Web系の奴らは上手くこなすことだけを考えていて、自分で考えることを止めてしまってる。
あれでは上達しないのも分かる。

>>200
一応捕捉しておくと、SQLite3はDBだが鯖形式ではなくCのライブラリ(DLL)だからC++から直接呼べる。(はず)
ソースはパブリックドメインだからDLできるし、もちろんincludeしても使える。
(https://www.sqlite.org/quickstart.html // サンプルが extern "C" ではなく include かよ!)
DBはメモリ上にも置け、当然爆速だ。自前でトランザクション/ロールバックの仕組みを作るよりだいぶ楽。
公式に素晴らしいドキュメントがあるから詳しくはそこを読みまくったほうがいい。
C++erなら問題はSQL位だが、どうせいつかLINQもC++に導入されるだろうし、予習だと思ってやっとけ。

209デフォルトの名無しさん (ワッチョイ 5db3-JjO2)2017/11/30(木) 10:44:54.02ID:YoaAbc9R0
例外投げるってのは自分の責任の範囲外の事象が起きたときじゃないのかね
有効無効の意味合いならブール値返したほうがいいと思う

210デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/11/30(木) 11:49:07.85ID:/QNJXUpA0
>>209
禿本4thのP.351あたり読んだ?

211デフォルトの名無しさん (ワッチョイ 8d46-5y5x)2017/11/30(木) 12:26:19.48ID:b5fP6Zaz0
一応いまのところこんな感じで書けるようになってる
やってることが非同期処理なので多少ややこしいのは本質的に仕方がない
int func_async( int n ){
 if( n == 0 ){ return 0; }

 a_wait() << [&]{ sleep( 10*1000 ); };
 //↑非同期で何か重たい処理
 //↑別スレッドに投げたのちyield_return;

 int resunt;
 a_sync() << [&]{ //コルーチン作成
  resunt = func_async( n - 1 ); //再起呼び出し
 };
 //throw nanika;
 //↑仮に誰かが例外を投げれば親子関係のあるすべてのコルーチンの処理が
 //↑キャンセルされて、どのコルーチンもbarrier以降は実行しない

 //barrier前なのでresultの値は不定
 barrier();
 //barrier後なのでresultの値が決まる
 return n + result;
}
int main(){
 a_sync() << [&]{ //コルーチン作成
  int result;
  a_sync() << [&]{ result = func_async( 10 ); }; //コルーチン作成
  barrier();
  printf( "%d\n", result );
 }
 message_loop();
 return 0;
}

212デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/11/30(木) 19:19:19.63ID:fhhh9IM80
>>211
なんか無駄に複雑化してるだけに見えるが、、、

> どのみち非同期処理にC#よろしくコルーチンが使いたいわけで
なおVC++2015からはasync/yieldは使えるらしいぞ。
https://msdn.microsoft.com/ja-jp/magazine/mt573711.aspx
http://espresso3389.hatenablog.com/entry/2015/12/03/015157

213デフォルトの名無しさん (ワッチョイ 9e9f-Cyes)2017/11/30(木) 20:12:10.25ID:OtOqgvDg0
C++の名前空間と呼ばれるのがあまり理解出来ないんだが
Javaでいうパッケージ的なやつ?
それともそれを使うためのパスワード的なやつですか?

214デフォルトの名無しさん (ワッチョイ 8d46-5y5x)2017/11/30(木) 20:42:22.43ID:b5fP6Zaz0
>>212
複雑っていうけど、元から非同期処理なんか、どう書いたって複雑だろ
>>211はお遊びでワザとコルーチン作りまくってるだけだし
あの程度の事なら本当はこれでいけるわけで
int func_async( int n ){
 if( n == 0 ){ return 0; }
 a_wait() << [&]{ sleep( 10*1000 ); }; //非同期処理
 return n + func_async( n - 1 );
}
int main(){
 a_sync() << [&]{ printf( "%d\n", func_async( 10 ) ); };
 message_loop();
 return 0;
}
別に複雑と言うほどでもないし
非同期処理を同期処理みたいにかけるというだけ
あとはキャンセルと例外安全のためにbarrierの機能を追加しただけ

215デフォルトの名無しさん (ワッチョイ 392d-qkbZ)2017/11/30(木) 20:59:54.72ID:+psSmwi50
>>214
<future>のasync,futureじゃダメ? C++11で標準になりましたけど

https://wandbox.org/permlink/cACSVRCACSAl92OH

wait_for_allが欲しかったのでBoost使ってます
元は https://gist.github.com/chandraprakash/8666426 で これを少し改造

216デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/11/30(木) 21:03:11.80ID:fhhh9IM80
>>214
まず、君が書いているんだから君が好きなようにやるべきだし、
実験的な意味合いも含めて色々やること自体はいいと思うが、、、

非同期にしてるのは何故?GUIからの呼び出しでC#のasync Taskと同じ状況か?
それなら確かにどうしようもないが、しかし今見てみるとC#のasyncもだいぶ筋が悪いとは感じるね。
そのケースなら、普通にマルチスレッドした方がすっきり書けるはず。

あと、コルーチンからのthrowって、君の意図しているようにドミノ倒し的に回収できるものなのか?
これは俺が仕様を知らないだけではあるが、普通はコルーチンってそういう使い方しないと思うし。

217デフォルトの名無しさん (ワッチョイ 8d46-5y5x)2017/11/30(木) 22:29:42.54ID:b5fP6Zaz0
>>あと、コルーチンからのthrowって、君の意図しているようにドミノ倒し的に回収できるものなのか?
そういう風にコルーチンを実装した
具体的にはコルーチンのメンバにキャンセルフラグを持たせておいて
コルーチンを外部からキャンセルしたいときはそのフラグを立てる・・・だけ
コルーチンがyieldから再開したら真っ先にそのフラグを読みに行って
もし立ってたら自発的に例外を投げてスレッドを巻き戻す

>そのケースなら、普通にマルチスレッドした方がすっきり書けるはず。

あくまでこれは例だからなぁ
上で書いた内容もそうだけど、ひとつコルーチンがシングルスレッドというのがミソになってて
マルチスレッドだと排他処理が非常に面倒なことになる場面でも
コルーチンはシングルスレッドだから問題にならない
ただ、yieldの前と後ろで時間的につながりが無いことが問題になるので
誰かが何かを書き換える前にbarrier()を設けるルールを作って、他のコルーチンを無効にする
非同期処理なんかまともにやったら頭がおかしくなるに違いないので
横断的に静的に管理したいなぁと

今までコルーチンは全然使わなかったし、完全にマルチスレッド脳だったんだが
コルーチンはかなり脳の負担が少なくてよい
自分が動いているときは必ず他人は止まっているという性質が良い
yieldの前後だけ気を付ければ後は完全にシングルスレッドのノリで排他処理が要らない
ただ逆に同期オブジェクトをLockしたままyieldしたら終わるという

>C#のasyncもだいぶ筋が悪いとは感じるね。
正直、あれの使いどころは俺もよくわからないんよなぁ
複数のコルーチンが同時並行で走ったら危ないから結局画面をロックせざるを得ないんじゃないかとか
キャンセルを受け付けられるようにするためには例外安全についても考えないとダメなんじゃないかとか
色々思うところは有るが、実はよく知らん

218デフォルトの名無しさん (ワッチョイ 8abd-17nN)2017/11/30(木) 23:00:20.60ID:oM5vIjZA0
>>216
async/awaitのしくみはawaitするタスクの完了時に呼ばれるべきコールバック関数登録の糖衣構文にすぎないとかそんな感じ、
http://qiita.com/ryosukes/items/db8b45c8ea42f924f02f
(まんまC#の関数で説明したページもあったはずだがどっかいったのでJavaScriptの例↑

で、ネイティブスレッドX上でasync/await呼び出しをいくつ書いても上記コールバック関数は単一スレッドで実行されるので
Xに対して同期的なデータへのアクセスはロック不要

ウィンドーズホンのGUIをぬるぬる動かすのがほぼ唯一の存在意義

219デフォルトの名無しさん (ワッチョイ 8abd-17nN)2017/11/30(木) 23:07:19.56ID:oM5vIjZA0
つまり同一スレッド内であればasync/awaitをいっぱい書いても複数のコルーチンが順不同でresumeされる感じにはなるが真に同時並行で実行されることにはならない

220デフォルトの名無しさん (ワッチョイ 8abd-17nN)2017/11/30(木) 23:13:29.49ID:oM5vIjZA0
なお順不同なresumeというシチュは、関数A内でawaitされるasyncタスクB内でタスクCをawaitする…とかいったケースで容易に生じる
この場合A内のawaitに引き続くのコードと、B内のawaitに引き続くコードのは順不同でどっちが先にresumeされるかわからん
しかし真に同時並行ではなく、同期的

221デフォルトの名無しさん (ワッチョイ b5b3-HgL3)2017/11/30(木) 23:19:09.22ID:AS96YR/U0
http://stackoverflow.com/questions/1724036/splitting-templated-c-classes-into-hpp-cpp-files-is-it-possible

Your template classes must represent only data structures not the algorithms.
This enables you to hide more valuable implementation details in separate non-templatized class libraries,
the classes inside which would work on the template classes or just use them to hold data.

この回答の具体的な例を教えて頂けないでしょうか。

std::vector(データ)とstd::algorithm(アルゴリズム)と思ったのですが、
std;;algorithmはnon-templatized classではないですよね。。。

222デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/11/30(木) 23:40:55.16ID:fhhh9IM80
>>217
> あくまでこれは例だからなぁ
もしかしてコルーチンを自動的にマルチスレッド展開して加速させる為のラッパを用意してるってことか?
それならまあそのコードの感じになるのかもしれん。

ちなみに言っておくと、俺が普通に実装したら>>215と同じようなものになる。
単純に、「ディスパッチして、joinを待って、commitする」としか読めないコードにする。
ただこれは君ももちろん分かっていて、あのコードなのだとは思う。


なお俺はC#のasyncは設計ミス、
・UIコンポーネントがUIスレッドからでしか触れないこと
の対策だと思っている。あれが無いと毎回invokeするとか、ちょっと回りくどい書き方をするしかない。
実際、Thread->backgroundWorker->Task->async Task だったっけ?何度も変更されていて、
こういう場合は通常、
・修正している奴が馬鹿だから修正のたびに新たなバグを仕込んでしまい、収拾がつかない
わけだが、ヘルズバーグとMSがそこまで馬鹿なはずも無く、もう一つのケース、
・根本の問題を修正せずに表面的に対策をしているから、収拾がつかない
のだと思っている。そして、根本の問題は、最初に書いたUIガー、って奴。

これについて「根本のUIスレッドの問題直せやボケエ」ってをずいぶん前にC#スレで議論した覚えはあるが、
UIをマルチスレッドにして悲惨だった歴史が既にあるらしく、
「オメーがラップすりゃいいだけだろボケエ」と返され、あ、確かにそうだな、と思って終わった。
ま、とにかく、UI関係のコードをスッキリさせる為の物だから、気になってないのなら放置でいいと思う。


> yieldの前後だけ気を付ければ後は完全にシングルスレッドのノリで排他処理が要らない
コルーチンの方がいいケースについてか。
うーん、どうなんだろうなあ?俺もコルーチンはほぼ使ってきてないが、
マルチスレッドする場合にはほぼ干渉しない場合に限っていたから、
逆に言えば、コルーチンを使えばもっと並列化できるということか?

223デフォルトの名無しさん (ワッチョイ fa96-JU5h)2017/12/01(金) 09:48:37.54ID:eHCFERDK0
Eigenで透視投影変換行列を作るのは次の書き方でいいんでしょうか?
なんか結果をみても微妙にずれているのですが...

Eigen::Matrix4f perspectiveMatrix(float left, float right,
float bottom, float top,
float near, float far)
{
Eigen::Matrix4f m;
m << 2.0f*nearZ/(right-left), 0.0f, (right+left)/(right-left), 0.0f,
0.0f, 2.0f*near/(top-bottom), (top+bottom)/(top-bottom), 0.0f,
0.0f, 0.0f, -(far+near)/(far-near), -2.0f*far*near/(far-near),
0.0f, 0.0f, -1.0f, 0.0f;
return m;
}

224デフォルトの名無しさん (ワッチョイ 8d46-5y5x)2017/12/01(金) 09:59:25.68ID:DoXCr8LG0
await/asyncのコルーチンは並列化じゃなくて非同期処理を同期処理っぽく書くための物だとおもうよ
「これを実行して、終わったらこれを実行してね」
っていうときに、スタックの内容がそのまま残ってるからデータの受け渡しが楽というだけだろう
ただ>>220が言ってるように順不同のresumeが起こったらアブナイので
何か書き込む前にbarrierを張って自分に関係が無い実行中のコルーチンを全部キャンセルして始末してしまおうという
(実際にはbarrierだけじゃなくawaitのタイミングでも始末するようにしているが)
ただキャンセルするために例外安全性とかも重要になってきて
ここでもbarrierとコルーチンの仕組みがそのまま活躍するのが、なんか不思議な感じなんだが
読み込みオンリーだけどキャンセルできるセクションと、書き込みできるがキャンセルできないセクションに
処理を分けるというアイデアはなかなか汎用性が有るんじゃないかと
で、二つのセクションは別関数にせずにコルーチンでつないで一つの関数に収めbarrier前/後とし
barrier前ならawaitも使える、と、2,3のことが同時にかたづいて気持ちが悪い

225デフォルトの名無しさん (ブーイモ MMc9-ZS+9)2017/12/01(金) 10:56:33.99ID:HkxgtxKmM
>>224
今日もA-10学校に、まで読んだ

226デフォルトの名無しさん (スップ Sdea-hmNI)2017/12/01(金) 11:05:05.82ID:Y7mfb9sId
exec execve などいくつかあるけど
こいつらの違いを理解できない
ここの人たちはmanページを読んで理解できるもんなの?

227デフォルトの名無しさん (ササクッテロラ Spbd-Wo5e)2017/12/01(金) 11:40:18.96ID:ZhxOnODbp
>>223
https://msdn.microsoft.com/ja-jp/library/cc372887.aspx
これを参考にしてみては
右手系の場合はRH、あと行列の扱い方によっては転置が必要だけど

228デフォルトの名無しさん (ワッチョイ fa96-JU5h)2017/12/01(金) 15:52:06.92ID:Xp3BajG00
>>227
解決しました。あれで合ってました。
間違ってのはモデル変換行列の方でした。

229デフォルトの名無しさん (オッペケ Srbd-MUmZ)2017/12/01(金) 18:53:54.97ID:1uEPS/Zvr
C++17が出たけど既にN4700しか読んでない

230デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/01(金) 19:27:41.27ID:quTLstwT0
>>224
最終的に何をしたいんだ?
俺にはそこが見えない。

一つずつ詰めると、頭三行
> await/asyncのコルーチンは並列化じゃなくて非同期処理を同期処理っぽく書くための物だとおもうよ
> 「これを実行して、終わったらこれを実行してね」
> っていうときに、スタックの内容がそのまま残ってるからデータの受け渡しが楽というだけだろう
については同意する。これは>>218-220含めて3人の共通理解でいい。
(ただし俺には逆に、君自身は「並列化の為に」async/awaitを使おうとしているように見える)

> ただ>>220が言ってるように順不同のresumeが起こったらアブナイので
これについては、一般的には逆だ。順序が逆になったら危ないような物を非同期にしてはいけない。
違う言い方をすると、非同期の結果をbarrierを張ってキャンセルするのではなく、
barrier後に非同期にして、結果は必ずcommit出来る構造にする。

ちなみにJavaScriptの連中はここら辺が分かっていなくて、
(というより連中は制御構造云々を議論できるレベルではないのでこれ以前なのだが)
同期前提の制御構造で非同期を扱おうとするからおかしなことになる。
JavaScriptには非同期しかないんだから、選択の余地もないんだが。

C#のasyncはこれとはちょっと違って、イベントで起動するから必ずUIスレになるんだが、
それにジョブをやらせるとUIがカクつくから他スレッドを起動しろ、
しかしそれだと結果を画面に表示できないからそこだけUIスレッドを呼び戻せ、
ただこれだとソースが汚いから、asyncというキーワードをつけ、あたかも全てUIスレッドが処理しているように見せる、
みたいな、なんだかなあ、という状況になっている。
つまり処理順と処理スレッドを入れ替える為の糖衣構文のようなものであって、
本来のasync/awaitのように、非同期を同期的に書くための物自体ではない。ただしそうとも使えるから流用してるが。

それで話を戻すと、君は非同期部分に一般とは逆の「非同期の結果を普通にキャンセルできる構造」を作ろうとしているようだが、
これは何故?或いは何のメリットがあると考えている?

231デフォルトの名無しさん (ワッチョイ ea34-YBdU)2017/12/01(金) 19:37:06.05ID:BNKPu+/90
Java厨はハードの基本がわかってないニワカなんちゃってPGが殆どだからな

232デフォルトの名無しさん (ワッチョイ f1c8-wAwf)2017/12/02(土) 00:35:41.73ID:i2vG1ua/0
最近長えレスが多くて辛えぞえ

233デフォルトの名無しさん (ワッチョイ 398a-fjL1)2017/12/02(土) 00:43:05.07ID:fU6v9rJN0
予告犯でホリエモンもどきがシンブンシにそんな事言っていたな

234デフォルトの名無しさん (ワッチョイ a580-o8PC)2017/12/02(土) 01:17:01.05ID:Ppnhc3/B0
コルーチンをキャンセルとか意味わかんない事言ってるから途中から読んですらない。

235デフォルトの名無しさん (ワッチョイ 8abd-17nN)2017/12/02(土) 02:10:43.54ID:YZ0QjRT20
漏れはもう説得をあきらめたゾ

236デフォルトの名無しさん (ワッチョイ 6680-9RvO)2017/12/02(土) 03:07:38.26ID:UE7qzU9L0
>>226
引数が違うだけで、内部的には、どれも同じだろ。
つまり、ラッパー関数

OS をすべて知っている奴は、いない

だから皆、神の書と呼ばれる、この本を枕にして寝ている。
著者は、man ページの作者。
この本が翻訳されているのは、日本だけ

Linux プログラミング・インタフェース、2012

237デフォルトの名無しさん (オッペケ Srbd-MUmZ)2017/12/02(土) 17:32:32.90ID:oDhEkD2+r
>この本が翻訳されているのは、日本だけ

もうだめだこの国

238デフォルトの名無しさん (ワッチョイ 6680-9RvO)2017/12/02(土) 20:34:54.85ID:UE7qzU9L0
Linux 資格の、LPIC 取得者も、半分以上は日本人だろ

日本は、Linux 大国

239デフォルトの名無しさん (ワッチョイ ea34-YBdU)2017/12/02(土) 20:40:02.69ID:hpEyyDG+0
pthreadとかPOSIX系は扱い易い

240デフォルトの名無しさん (ワッチョイ b5b3-9GJZ)2017/12/02(土) 21:04:09.64ID:TmTI6KJY0
Linuxは日本に入ってきたのが早かったし、最初期に一気に広まった。
日本がLinux王国というのは間違いではない。
しかし、それを生かせなかった。
なんでだろ。

241デフォルトの名無しさん (ワッチョイ 5d78-ToxZ)2017/12/02(土) 21:06:05.55ID:IxwO1O770
PC98がMSDOSを採用し続けたせい

242 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/02(土) 21:14:00.87ID:4pmjT1Fk0
>>240
PC98 のリソースが freebsd に注がれ、linux への移植が遅れたため

243デフォルトの名無しさん (ワッチョイ b5b3-9GJZ)2017/12/02(土) 21:25:07.65ID:TmTI6KJY0
当時書店でBoWとか売ってたけど、そのせいで遅れたような感じはしなかったけどなあ。
むしろLinuxでX11動かすのに四苦八苦してた頃、すでにコンソールで日本語が使えてたのは、
UNIXの人たちのおかげのような気がする。

244デフォルトの名無しさん (ワッチョイ b5b3-9GJZ)2017/12/02(土) 21:38:52.02ID:TmTI6KJY0
検索してみるとコンパックショックが1994年なんだな。
DOS/V機自作したのが1993年だからもうちょっと前かと思ってたけど。
正規流通前にショップが輸入して売ってたんだろか。

245デフォルトの名無しさん (ワッチョイ 6680-9RvO)2017/12/02(土) 22:17:42.90ID:UE7qzU9L0
その当時、漏れは、Windows 3.1 で、UNIX プログラミングやってた。
テキストエディタ MIFES を使っていた

Oracle で、銀行とか、新幹線とか

246 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/02(土) 22:46:06.08ID:4pmjT1Fk0
>>245
>銀行とか、新幹線とか
暗号方式はなにを使っていましたか?

247デフォルトの名無しさん (ワッチョイ 398a-fjL1)2017/12/02(土) 23:44:03.24ID:fU6v9rJN0
PANIXの遅さはすごかったな

248デフォルトの名無しさん (ワッチョイ ea34-YBdU)2017/12/03(日) 01:07:06.72ID:ti2y6lW/0
NECは当時経営陣が自社の社員が開発したソフトを押し退けてMSのソフトをごり押ししてたからな
終わっているよな

249デフォルトの名無しさん (ワッチョイ a580-o8PC)2017/12/03(日) 01:40:24.23ID:MtUE51Zo0
>>248
そんなに糞だったのか自社製ソフト

250デフォルトの名無しさん (ワッチョイ b5b3-HgL3)2017/12/03(日) 08:02:49.76ID:YKcJD0pm0
派生クラスのデストラクタでなにもしないなら、
基底クラスのデストラクタを仮想にしなくてもいいですか?

251デフォルトの名無しさん (ワッチョイ 9e9f-GQwd)2017/12/03(日) 08:56:43.57ID:I8IEjg5G0
>>250
自由にクラスを設計すればいいよ。
デストラクタを仮想クラスを必ず定義しておかなければならないとか、そんな義務はない。
あらかじめ定義しておくと、仕様変更があった時などで、派生クラスで、デストラクタを使いたい時に、基底クラスをいじらずに定義できるだけだよ。
仮に、複数人で、アプリを作ってるなら、基底クラス担当がいたとして、わざわざ基底クラスをいじりますよーとか連絡しないでいいという利点はあるかもな。
もし、基底クラス担当で、他人に基底クラスを触らせたくないなら定義しておいたほうがいい。
基底クラスをいじられて、変なバグとか追加されても困るw

252デフォルトの名無しさん (ワッチョイ eab3-YtI1)2017/12/03(日) 09:05:51.65ID:pXIsIngK0
>>251
頓珍漢すぎて笑えない...

253デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/03(日) 09:26:11.28ID:hz5Rl7cd0
うん、これは頭悪い発言スレでやればウケてた

254デフォルトの名無しさん (ワッチョイ a580-o8PC)2017/12/03(日) 09:31:06.52ID:MtUE51Zo0
>>250
規格は知らんが問題が発生するコンパイラは存在しないと思う。が、デストラクタで何もしないというのはデータメンバーも含まれるからね。
派生クラスにstd::stringのメンバーが居るだけでアウト
そんな事を気にするより素直にvirtual付けるか基底クラスでdeleteされないようにする方が有意義に時間を使えると思うよ。

255デフォルトの名無しさん (ワッチョイ 8abd-17nN)2017/12/03(日) 09:49:40.40ID:lnc2VqP30
>>254
>派生クラスにstd::stringのメンバーが居るだけでアウト
それだけでアウトなのではない
DerivedがBaseの派生だとして、実体はDerivedなのにコンパイラからはBaseにしか見えないケースで問題になるだけ
DerivedをDerivedとして宣言したらスコープを抜けたらちゃんとDerivedのデストラは呼ばる

問題なやつの例:
 Derived g_d;
 void foo() {
  Base* p = (Base*)&g_d;
  /*...*/
  delete p; // Base::~Base()は呼ばれるがDerived::~Derived()は呼ばれない
 }

256デフォルトの名無しさん (ワッチョイ 8abd-17nN)2017/12/03(日) 09:53:01.97ID:lnc2VqP30
ごめ、一点抜けた
誤: 実体はDerivedなのにコンパイラからはBaseにしか見えないケース
正: 実体はDerivedなのにコンパイラからはBaseにしか見えない状態で当該オブジェクトが破棄されるケース

なお、(規格でどういう言葉使いをしているかわ知らんが、)
Derivedが多態性をきちんと実装してあるなら、Derivedは「コンパイラからはBaseにしか見えないケース」には該当しない

257デフォルトの名無しさん (ワッチョイ 8abd-17nN)2017/12/03(日) 09:53:10.45ID:lnc2VqP30
ごめ、一点抜けた
誤: 実体はDerivedなのにコンパイラからはBaseにしか見えないケース
正: 実体はDerivedなのにコンパイラからはBaseにしか見えない状態で当該オブジェクトが破棄されるケース

なお、(規格でどういう言葉使いをしているかわ知らんが、)
Derivedが多態性をきちんと実装してあるなら、Derivedは「コンパイラからはBaseにしか見えないケース」には該当しない

258デフォルトの名無しさん (ワッチョイ a580-o8PC)2017/12/03(日) 09:57:14.66ID:MtUE51Zo0
>>255
だから
「基底クラスでdeleteされないようにする方が」
って言ってんだろ

259デフォルトの名無しさん (ワッチョイ 8abd-17nN)2017/12/03(日) 09:58:13.14ID:lnc2VqP30
大事なことなので2回ry

まあ一般論として、>>255の問題なやつがプログラム内に存在しないことの確実で安価で
ウザく無い検出方法というものはこの世に存在しないので、
継承関係を使うならデストラクタを見たらvirtualにするパブロフの犬に徹するべきではある

260デフォルトの名無しさん (ワッチョイ b5b3-HgL3)2017/12/03(日) 10:48:30.75ID:YKcJD0pm0
>delete p; // Base::~Base()は呼ばれるがDerived::~Derived()は呼ばれない

~Derived()が呼ばれないけど、
呼ばれたとして何も仕事をしないのであれば、呼ばれなくても不都合ないのでは?

261デフォルトの名無しさん (ワッチョイ b5b3-HgL3)2017/12/03(日) 11:01:45.65ID:YKcJD0pm0
なにも仕事をしないデストラクタという前提がおかしいのですか?

262デフォルトの名無しさん (スップ Sdea-t0Iq)2017/12/03(日) 11:06:05.82ID:OF+rgUqYd
メイヤーズが言ってる
ポリモーフィズムを目的とした基底クラスはvirtualデストラクタにする
それ以外はしないってルールでいいだろ

263デフォルトの名無しさん (オッペケ Srbd-MUmZ)2017/12/03(日) 11:12:49.55ID:TXqrw7wLr
>>261
Yes
デストラクターの仕事はプロクラマーの書いたコードだけではない

264はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph)2017/12/03(日) 13:16:36.90ID:15ZXM/fw0
>>260
このあたりで話題になったことがある。
http://2chb.net/r/tech/1478440682/651-
結論から言うと不都合は有る。

少なくとも言語仕様上は未定義に踏み込むのでクラッシュしても泣かない強い心を持ち合わせているのでなければやらない方が良い。

265デフォルトの名無しさん (スプッッ Sdea-gD61)2017/12/03(日) 13:39:28.04ID:JZXkgVFzd
>>254
暗黙的なメンバー変数の破棄が呼ばれるべきってのはあるけど、何もアウトなことはないぞ?

266デフォルトの名無しさん (ワッチョイ a580-o8PC)2017/12/03(日) 13:42:24.66ID:MtUE51Zo0
>>265
お前質問読んでないだろ

267デフォルトの名無しさん (ササクッテロロ Spbd-Wo5e)2017/12/03(日) 13:52:29.29ID:nekR+Iu8p
>>259
その考えはどうかと思うけどな
vtblが邪魔になるような、メモリ上では純粋にデータしか持たないクラスとか作れなくなるぞ

268デフォルトの名無しさん (ワッチョイ eab3-YtI1)2017/12/03(日) 16:06:00.67ID:pXIsIngK0
>>267
> 継承関係を使うなら

269デフォルトの名無しさん (オッペケ Srbd-MUmZ)2017/12/03(日) 16:29:14.83ID:gYv1de+4r
継承関係を使う=vtbl
と考えてしまうような無知な者には理解するのは難しい
他人の作ったものも構わずナマポをdeleteしておいて「virtualにしておけば安全」というのはマッチポンプと言えよう

270デフォルトの名無しさん (ワッチョイ eab3-YtI1)2017/12/03(日) 16:39:32.89ID:pXIsIngK0
正直何を言いたいのかはよくわからん w
まあ>>251みたいな頓珍漢野郎なんだろう...

271デフォルトの名無しさん (ワッチョイ b5b3-4T5h)2017/12/03(日) 17:09:40.29ID:bFUfg9md0
>>270
いや、この件に関してはお前の方が無知だぞ

272デフォルトの名無しさん (ワッチョイ b5b3-HgL3)2017/12/03(日) 17:12:44.51ID:YKcJD0pm0
結局のところ
何も仕事をしないデストラクタはあるが、(空のデストラクタかつメンバ変数なし)
基底クラスのデストラクタだけで派生クラスをdeleteすることが未定義だから
基底クラスのデストラクタは仮想にしないとダメという理解でよろしいでしょうか。

273デフォルトの名無しさん (ワッチョイ ea34-YBdU)2017/12/03(日) 17:28:04.25ID:ti2y6lW/0
デストラクタは仮想にしておくことにより通常の仮想関数と違って継承元辿って全自動ですべて呼び出されるから基底はやることなくても以後継承で実装を変更することがあるのなら空の{}で括っておいたほうが良いよ

274デフォルトの名無しさん (ワッチョイ 66eb-YNoK)2017/12/03(日) 17:49:35.39ID:PHD8+7P20
=defaultじゃだめなん?

275デフォルトの名無しさん (ワッチョイ eab3-YtI1)2017/12/03(日) 17:50:12.92ID:pXIsIngK0
>>271
まあそう思ってりゃいいんじゃね? w

276デフォルトの名無しさん (ワッチョイ b5b3-4T5h)2017/12/03(日) 19:52:12.45ID:bFUfg9md0
もしかして本当に継承使ったPOD型に思い至ってないのか

277デフォルトの名無しさん (ワッチョイ 8abd-17nN)2017/12/03(日) 19:55:36.14ID:lnc2VqP30
くそー>>254の簡潔すぐる日本語のせいで暗黒の日曜日になってしまったわ、

だいたい質問者の>>250も簡潔すぐる
初心者質問と思ったし、だいたい理解している上で確認の意味で質問しているのならそう書いてホスイ、

278デフォルトの名無しさん (ワッチョイ 5deb-JjO2)2017/12/03(日) 20:15:25.15ID:mwO2JS4O0
もうここ完全に初心者様質問無しにしろよ
上級者様もそれで満足だろ

279 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/03(日) 20:16:39.17ID:lZQcP+Ql0
>>278
それは困ります…

280デフォルトの名無しさん (ワッチョイ 8abd-17nN)2017/12/03(日) 20:21:06.32ID:lnc2VqP30
>>278
漏れのように語りたい初心者は一体どうすれば…orz

281デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/03(日) 21:05:16.05ID:hz5Rl7cd0
>>278
自殺乙

282デフォルトの名無しさん (ワッチョイ 3d04-4NBu)2017/12/04(月) 12:17:24.94ID:gpGY1qga0
祝・C++17発行!

283デフォルトの名無しさん (ブーイモ MM81-ZS+9)2017/12/04(月) 12:38:47.34ID:vRsxBueGM
これまでinlineを関数に適用するとインライン展開されるんじゃなかったでしたっけ?
c++17の説明を読むと翻訳単位で共通のアドレスになるって書いてあるのだけど仕様が変わった?

284デフォルトの名無しさん (オッペケ Srbd-MUmZ)2017/12/04(月) 12:45:21.76ID:i0vOJ/Wzr
何を言っているんだお前は

ISO/IEC 14882:1998 7.1.2/p4
An inline function with external linkage shall have the same address in all translation units

285デフォルトの名無しさん (ブーイモ MM81-ZS+9)2017/12/04(月) 12:56:42.17ID:vRsxBueGM
>>284
ナンダッテー

286デフォルトの名無しさん (ドコグロ MM12-3/o9)2017/12/04(月) 13:08:03.78ID:VjK2Ds3GM
以前void f(A &a, int num)をa.f(num)みたいに呼べる機能が追加されるとかされないとかを見た気がするんだけど知ってる人いたらURLか機能名を教えてほしい

287デフォルトの名無しさん (ワッチョイ b5c8-Syir)2017/12/04(月) 13:10:08.18ID:zqEI2rJ60
unified call syntax

288デフォルトの名無しさん (ドコグロ MM12-3/o9)2017/12/04(月) 13:22:55.68ID:VjK2Ds3GM
>>287
ありがとう

289デフォルトの名無しさん (ワッチョイ 3d04-4NBu)2017/12/04(月) 14:58:45.86ID:gpGY1qga0
ウニファイドコールシンタックスは死んだのだ。
よみがえれ!

290デフォルトの名無しさん (ワッチョイ ea34-YBdU)2017/12/04(月) 15:48:40.92ID:hZXt5yd00
残念だったな

291デフォルトの名無しさん (ワッチョイ 3d04-4NBu)2017/12/04(月) 16:16:56.14ID:gpGY1qga0
はう。

292 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/04(月) 18:00:57.88ID:ESsPBxjD0
accelerated c++ をやっている人いませんか?
今やりなおしているけれども、5年ほど前の自分の回答をなくしてしまった…
4章章末練習問題4-6の回答を、よろしければお見せいただけませんか?
この章、EOLine と EOFile を std::cin の eof フラグ 1 個でなんとかしようとしているのが非常にまずいと分かりましたが
逆に教科書掲載のプログラムでうまくいっているのが不思議です…取り組まれた方のコメントをお待ちしています…

普通 getline() をつかうんだろうけれども、なんでこんなに変てこな実装になっているのだろう?
教科書の内容 https://ideone.com/rdtZWG

>>44-45 悪書を薦めてしまいました、ごめんなさい

293デフォルトの名無しさん (ワッチョイ a580-o8PC)2017/12/04(月) 19:13:30.50ID:gGPHcFu90
>>289
メソッドチェインしたいだけなら拡張メソッドの方が筋がいいだろ。そっち応援してやれよ

294デフォルトの名無しさん (ワントンキン MM7a-Syir)2017/12/04(月) 19:27:49.25ID:I5+tBH1vM
拡張メソッドってデコレータパターンで充分なのに、なんで最近の言語には結構ついてんだろ。

295 ◆QZaw55cn4c (ワッチョイ 4a60-L6cJ)2017/12/04(月) 19:43:03.25ID:ESsPBxjD0
>>292
>>44-45
結局のところ、std::stringstream を使うべきだという結論になりました。(std::stringstream は今回初めて知った)
教科書本文(64ページ、項4.2.3、70ページ、項4.5)
https://ideone.com/F761bo

73ページの練習問題4-5の方は
https://ideone.com/H9iE4j

このように >>42 は多大な努力を強いられる教科書ですので、お勧めです、強くなりたい人はどうぞ
私はもう強くなくてもいいから、この本はもういいです…

教科書をお持ちでない人には関係ない話ですみません

296デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/04(月) 21:39:45.95ID:k2OIwnad0

297デフォルトの名無しさん (ワッチョイ 3d04-4NBu)2017/12/04(月) 21:40:55.38ID:gpGY1qga0
ん?

298デフォルトの名無しさん (ワッチョイ 8abd-17nN)2017/12/04(月) 22:43:49.08ID:5AQkRrK70
>>285
別に驚くほどのことじゃないし…
関数のインライン展開と、同じ機能の非インライン関数の存在は両立する
>>284の規定は関数のアドレスをとられたときのため用

299 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/05(火) 10:37:05.67ID:x6DQdw1l0
>>151
template の話もお願いしていいですか?
型安全を優先するあまりに instantiate(これいい訳がないね) してまで、という思考と void * を許してしまう思考の両方について、比較していただくとうれしいんですけれども

300 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/05(火) 10:45:00.72ID:x6DQdw1l0
>>168
std::make_shared はあっても unique 版はない、とかなんとか、そこらへんが徹底されていない、とか、確かあったような気が

301 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/05(火) 10:50:30.93ID:x6DQdw1l0
>>150-152
ファイルのopen/close とか、RAII /デストラクタが Java にもあればなあ、と思っています。
あと、Java の syncronized って、結局、テキトーなダミー変数を mutex 代わりにしちゃう、とかありません?

302 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/05(火) 10:53:52.88ID:x6DQdw1l0
>>115
古来ゆかしき Boehm GC を思い出しました。これ、C++11 later とかの対応はどうなんだろう?
http://www.hboehm.info/gc/ よくわからん…

303 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/05(火) 10:58:49.04ID:x6DQdw1l0
>>101
>K&Rも「関数ポインタも使えるよ」としか書いて無い。あれはもっと力説されて然るべきだった。

これが本題かな?
いや、関数ポインタってそんなに特筆すべきものだったかな…むしろ setjmp()/longjmp() の方がインパクトが、ってこれはexception として広く採用されていましたっけね
いや、関数ポインタってコールバック(とvtable)は別として、何か使えるネタが他にあるかなって考えてました、今のところ思いつかないな…

304 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/05(火) 11:06:41.81ID:x6DQdw1l0
>>99
>(instance.method()とstaticMethod(instance)の実行時の違いがほぼ無い、
うーん、Java で、これでもか、これでもか、と this が null でないことをチェックするのを読んだことがあります。
C++ だと(virtual でなければ)普通に this = 0 にして this->method() できちゃうんですが、この this の null チェックって、広く行われているのでしょうか?http://codepad.org/gtEBWFKR

305 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/05(火) 11:20:19.80ID:x6DQdw1l0
これでおしまい
try~catch はいいとして、finally って使いにくい、というか使い方がわからないんですが、finally って意味あるんでしょうか?

306デフォルトの名無しさん (オッペケ Srbd-MUmZ)2017/12/05(火) 12:10:12.56ID:4pWc4df5r
> RAII /デストラクタが Java にもあればなあ、と思っています

RAIIは7年前にジャバに入った筈だが
何を言っているのだろうか

307はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph)2017/12/05(火) 18:56:58.67ID:+5IMShlD0
>>305
C++ 的にはなるべくデストラクタで後始末がつくようにやれというスタンスっぽい

308はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph)2017/12/05(火) 19:00:20.98ID:+5IMShlD0
>>304
C++ ではヌルポインタからメンバ関数を呼び出すのは未定義だよ。
メンバ関数内でデータメンバにアクセスする要素がなかったとしても未定義。

309 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/05(火) 19:12:28.94ID:x6DQdw1l0
>>308
え!

310デフォルトの名無しさん (ワッチョイ dee7-JjO2)2017/12/05(火) 19:18:52.02ID:EmfbEE5b0
this->method()は(*this).method()と等価で、ぬるぽに*適用したらその時点で未定義だからアウト

311デフォルトの名無しさん (ワッチョイ c576-jUU9)2017/12/05(火) 19:33:35.46ID:EFbqYV3B0
未定義だけどvirtualじゃなきゃ大抵動く
だからNULLチェックも意味がある

312デフォルトの名無しさん (ワッチョイ 398a-RK4k)2017/12/05(火) 19:58:57.51ID:U9JLSPtA0
thisをNULLチェックするようになったらそれはもう終わってるコード

313デフォルトの名無しさん (ワッチョイ c576-jUU9)2017/12/05(火) 20:02:17.22ID:EFbqYV3B0
終わってるヤツでも使えるようにする
よくあること

314デフォルトの名無しさん (ワンミングク MM7a-o8PC)2017/12/05(火) 20:52:26.72ID:sgxJpWORM
>>313
呼び出されなくても泣くなよ

315デフォルトの名無しさん (ドコグロ MM6d-YtI1)2017/12/05(火) 20:53:39.04ID:TKR/EMkrM
>>305
catchの中で再スローしてもとにかくリソースを解放したいとか普通にあるでしょ

316デフォルトの名無しさん (ドコグロ MM12-YtI1)2017/12/05(火) 21:07:41.41ID:njWV82p8M
>>304
俺はしない

以上!

317デフォルトの名無しさん (ワッチョイ 398a-RK4k)2017/12/05(火) 23:32:01.27ID:U9JLSPtA0
>>315
RAIIを徹底すればそんな危なっかしいことは不要

318デフォルトの名無しさん (ワッチョイ 36fb-MUmZ)2017/12/05(火) 23:35:55.54ID:+TIDOo7u0
>>309
自分にレスすんなよ
見てて恥ずかしいだろ

319デフォルトの名無しさん (ワッチョイ 398a-RK4k)2017/12/05(火) 23:52:38.14ID:U9JLSPtA0
>>300
std::make_uniqueがあるだろうが(C++14)

320デフォルトの名無しさん (ワッチョイ 59e3-HgL3)2017/12/05(火) 23:55:11.50ID:WoyHGfNJ0
返答を期待しないでただ聞いて文句言ってもらいたんですけど

03以来久し振りにc++いじってます
17だか20の最新仕様も未だにclassでgetter/setter定義しなきゃいけない仕様なんですかね?
C#のpropertyがあれば便利と思うんですけど。今あるか知りませんが

どうなんでしょ?今後の仕様も導入予定なし?

おやすみなさい

321デフォルトの名無しさん (ワッチョイ 6681-Syir)2017/12/06(水) 00:03:17.02ID:nXK3hnHv0
そもそも状態を露出するな

322はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph)2017/12/06(水) 01:18:56.49ID:s33DVBsR0
>>311
いや、俺は意図通りに動かない場合にガチで遭遇したことあるからこれはホントにお勧めしない。

323デフォルトの名無しさん (ワッチョイ 3d04-4NBu)2017/12/06(水) 01:21:27.27ID:+0bHqE6f0
>>320
そもそも、せったげったってそんなに重要か?

324デフォルトの名無しさん (ワッチョイ ea33-MbHU)2017/12/06(水) 01:48:19.95ID:K0RLdWNW0

325はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph)2017/12/06(水) 02:05:35.10ID:s33DVBsR0
一応 >>324 を解説しておくと、 this が真のときはもちろん真だし、
this が偽 (ヌル) のときは未定義なのでどういう挙動をしてもかまわないので真と解釈してもええやろという超推論で常に真として扱われる。

326デフォルトの名無しさん (ワッチョイ b5b3-9GJZ)2017/12/06(水) 04:07:36.86ID:hjP5HWFz0
++thisってやるとどうなるんだろうねえ。

327デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/06(水) 05:07:17.55ID:yhpve1PE0
できないよ
thisは常にconst修飾されている
禿本1stではthisへの代入があったんだけどね

328デフォルトの名無しさん (ワッチョイ 36fb-MUmZ)2017/12/06(水) 07:19:10.64ID:Fjj6BXu50
>thisは常にconst修飾されている

それは規格のどこに書いてあるのですか

329デフォルトの名無しさん (スプッッ Sdea-gD61)2017/12/06(水) 08:02:56.90ID:vAzWmOhld
thisってprvalueじゃないのか?

330デフォルトの名無しさん (ワッチョイ fa96-JU5h)2017/12/06(水) 08:25:21.60ID:ROyOilcp0
This is a pen.

331デフォルトの名無しさん (ワッチョイ 6679-mNEL)2017/12/06(水) 08:33:58.89ID:BltAOSs70
ISO、C++17の仕様「ISO/IEC 14882:2017」を発行
https://mag.osdn.jp/17/12/05/171500

「ISO/IEC 14882:2017」
https://www.iso.org/standard/68564.html

332デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/06(水) 10:56:56.20ID:yhpve1PE0
>>329
ご指摘どうも
struct X
{
void f()
{
decltype(auto) that(this);
that = nullptr; //ok
}
void g()
{
X* const it(nullptr);
decltype(auto) that(it);
that = nullptr; //error
}
};
確かにそのようで

333デフォルトの名無しさん (ワッチョイ a580-o8PC)2017/12/06(水) 11:12:02.00ID:J84WjEud0
それはメンバー関数の修飾によっても変わるやろ

334デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/06(水) 11:21:40.65ID:yhpve1PE0
void f() constのことを言っているなら見当違いだが

335デフォルトの名無しさん (スプッッ Sdea-gD61)2017/12/06(水) 11:44:06.58ID:vAzWmOhld
*thisじゃなくてthisのことだよね?
何かで「const pointerである」って読んだことあるような気もするけど、
そもそもprvalueにしか思えない。

336デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/06(水) 12:20:51.70ID:yhpve1PE0
this = だの &this なんてことは考えもしないので気がつかなかった

337デフォルトの名無しさん (ワッチョイ ea34-YBdU)2017/12/06(水) 13:26:30.44ID:+UwbONVA0
this is it

338デフォルトの名無しさん (ワッチョイ 5d78-ToxZ)2017/12/06(水) 16:04:03.08ID:S418wH960
this, this... this...

339デフォルトの名無しさん (ワッチョイ 6a12-JjO2)2017/12/06(水) 18:31:30.07ID:Kh6EF+Se0
=0とかじゃなくてpureとかそのまま書ければいいのに
そもそもなんで0入れるんだ

340デフォルトの名無しさん (ワッチョイ dee7-JjO2)2017/12/06(水) 20:25:22.49ID:EpXMgW7A0
vtblの関数ポインタをNULLにセットするっていうK&R時代の発想で決まった文法

341デフォルトの名無しさん (ワッチョイ dee7-JjO2)2017/12/06(水) 20:29:30.14ID:EpXMgW7A0
独自拡張で0の代わりに関数ポインタ代入できるようにした糞コンパイラと
それ使ってイベントハンドラかなんかの設定するようになってる糞システムが
なんかあったような気がするけど誰か覚えてない?

342デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/06(水) 21:00:00.17ID:yhpve1PE0
>>340
実際には存在し得ない抽象クラス単体オブジェクトが指すためのvtableな
bcc32のバグで存在し得たことはあるが

343デフォルトの名無しさん (ワッチョイ 9fbd-aiou)2017/12/07(木) 01:28:26.94ID:lJwR2NaH0
=0、漏れはしゅき!!!!1!!!!!11!

キーワードを増やさなくて済む
切り札は最後までとっておくべきものじゃ

344デフォルトの名無しさん (ワッチョイ 9fbd-aiou)2017/12/07(木) 01:56:58.07ID:lJwR2NaH0
つかpureみたいな柔弱で恥ずかしい感じのキーワードを追加してくれなくて本当に良かった

345デフォルトの名無しさん (ワッチョイ 5704-IpD3)2017/12/07(木) 02:03:07.27ID:5gbe7aWB0
ピュア関数の提案は出てたよ。最適化に効くとかで。

346デフォルトの名無しさん (ワッチョイ 9f34-Xhpf)2017/12/07(木) 02:13:17.50ID:ETsKWPG+0
ピュアプリズム!

347デフォルトの名無しさん (ワッチョイ 5778-T1Xs)2017/12/07(木) 02:18:10.34ID:clrrPlpA0
C++98だかでポインタ値にNULLじゃなくて0を使うのが推奨されていた頃の名残じゃないかな
の割にはnullptrを指定するとエラーになるけど

348はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-StTJ)2017/12/07(木) 02:43:01.31ID:vxJqQn/b0
文脈依存キーワードを導入しちゃったからな。
pure も有りといえば有りな気はしないでもない。

349デフォルトの名無しさん (ワッチョイ bfe7-F7Qh)2017/12/07(木) 19:18:50.53ID:TKFMtTzr0
pure関数って状態を持たない関数であって純粋仮想関数とは別物だぞ

350デフォルトの名無しさん (ワッチョイ 5704-IpD3)2017/12/07(木) 19:49:26.48ID:5gbe7aWB0
>>347
標準委員の人がそういう意味じゃないよ。適当に決められたんだよ。って言ってた。

351デフォルトの名無しさん (ドコグロ MMeb-45bT)2017/12/07(木) 20:45:51.07ID:G7lyLovKM
>>349
この話の流れで virtual pure function でないと思ってるお前が不憫だよ...

352デフォルトの名無しさん (ワッチョイ 9fbd-aiou)2017/12/07(木) 22:05:02.33ID:lJwR2NaH0
=0は最初ボーランドが勝手に実装した、とどこかで読んだが
じゃあ=0より前のC++には純粋仮想関数は無かったのやろうか…

353デフォルトの名無しさん (ワッチョイ 9fbd-aiou)2017/12/07(木) 22:43:46.61ID:lJwR2NaH0
ていうか
 class Foo {
public:
void someMethod() { }
};
と書くしかなかったものが
 class Foo {
public:
void someMethod() = 0;
};
になったのだとしたら
文字数的にもバランスがとれた良い追加構文


lud20171208042221
このスレへの固定リンク: http://5chb.net/r/tech/1511509970/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「C++相談室 part133 ->画像>4枚 」を見た人も見ています:
C++相談室 part126
C++相談室 part155
C++相談室 part165
C++相談室 part158
C++相談室 part157
C++相談室 part164
C++相談室 part150
C++相談室 part154
C++相談室 part149
C++相談室 part153
C++相談室 part148
C++相談室 part151
C++相談室 part152
C++相談室 part156
C++相談室 part159
C++相談室 part124
C++相談室 part161
C++相談室 part163
C++相談室 part162
C++相談室 part166
C++相談室 part135
C++相談室 part140
C++相談室 part117
C++相談室 part138
C++相談室 part137
C++相談室 part143
C++相談室 part142
C++相談室 part141
C++相談室 part134
C++相談室 part146
C++相談室 part130
C++相談室 part132
C++相談室 part144
C++相談室 part137
C++相談室 part145
C++相談室 part139
C++相談室 part147
C++相談室 part136
C++相談室 part131
C++Builder相談室 Part21
0からの、超初心者C++相談室
Cygwin + MinGW + GCC 相談室 Part 8
Cygwin + MinGW + GCC 相談室 Part 3
C++相談室 part123 [無断転載禁止]©2ch.net
C++相談室 part129 [無断転載禁止]©2ch.net
【初心者歓迎】デジタル一眼質問・購入相談室 166+
【初心者歓迎】デジタル一眼質問・購入相談室 170+
C♯相談室 Part20
C言語相談室(上級者専用)
MFC相談室 mfc22d.dll
Mac G5 中古買入相談室
屯田五目須のお悩み相談室
MFC相談室 mfc23d.dll
河田さんによる人生相談教室
C#, C♯, C#相談室 Part79
C#, C♯, C#相談室 Part75
C#, C♯, C#相談室 Part78
自営業 悩みごと相談室 40
自営業 悩みごと相談室 16
C#, C♯, C#相談室 Part93
C#, C♯, C#相談室 Part90
C#, C♯, C#相談室 Part94
11:22:26 up 65 days, 12:21, 0 users, load average: 9.16, 17.91, 18.88

in 0.0156409740448 sec @0.0156409740448@0b7 on 062200