C++相談室 part133

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 1fcf-H1rY)
垢版 |
2017/11/24(金) 16:52:50.43ID:WoNXR2ax0
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

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

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

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

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2017/11/26(日) 04:32:18.07ID:KjdhQPtsd
-1
2017/11/26(日) 04:33:56.38ID:KjdhQPtsd
switch ((x - 1) / 10)
2017/11/26(日) 04:42:41.92ID:Dn1yAmWU0
>>23
pair<int, int>の配列を用意してループする

https://ideone.com/0pYJWk
2017/11/26(日) 09:12:00.52ID:8WHK08hV0
>>23
(x-1)/10
2017/11/26(日) 10:40:50.63ID:q1KSvIhfM
>>23
sys/param.h
howmany
2017/11/26(日) 11:43:40.48ID:OJziPoG6M
>>19>>20
結局どうしたらいいの...
2017/11/26(日) 11:56:21.91ID:OeykFUMSr
>>29
auto &&unko = f();
2017/11/26(日) 17:24:53.04ID:+CosUOwya
Win32とかだとフラグ管理でビット演算利用してるけど、今どきのc++17だとどのようにするのがベスト?
2017/11/26(日) 17:30:11.12ID:DaGrByo80
C++入門書でよく勉強したはずなのにautoとかconstexprとか知らんもんが一杯…
33デフォルトの名無しさん (ワッチョイ 077f-lrN+)
垢版 |
2017/11/26(日) 17:31:42.72ID:CoQMqJ/C0
何年に発売した入門書なんだ
2017/11/26(日) 17:33:33.90ID:mkIW06Zo0
変わらず std::bitset 使い続けてる ベストかは自信ないけど不便もないので
2017/11/26(日) 17:38:44.74ID:DaGrByo80
>>32
やさしいC++第3版
大体9年前に買ったのを寝かしといて最近になって勉強し始めたが、そんなに仕様変更ないと思ってたが間違いだったようだ
2017/11/26(日) 17:39:04.93ID:DaGrByo80
>>33だった
37デフォルトの名無しさん (ワッチョイ 0778-4Z1+)
垢版 |
2017/11/26(日) 17:42:35.83ID:LgT/GDJu0
CはそれほどでもないけどC++は11以降どんどん変わるようになったね
2017/11/26(日) 17:46:59.07ID:n7ZC4ZKm0
Effective Modern C++を俺は使ってる
でもC++17が出たらまた新刊出るね
これC++11/14対応版だしすぐに古くなる
2017/11/26(日) 17:52:39.37ID:DaGrByo80
Effective Modern C++17出たら買ってみるわ
2017/11/26(日) 17:56:44.90ID:kRx46ugP0
もうC++を本で勉強するのは無理なのではないだろうか
41デフォルトの名無しさん (ワッチョイ bf4b-g2WY)
垢版 |
2017/11/26(日) 18:04:02.71ID:rgo+yBBa0
C++を始めようと思うんですがおすすめの参考書知りたいです。Cの知識はありませんがPythonでプログラミングは経験したのでプログラミング初学者ではないです。
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訂正
日本語版もありますね
すいません(^^;;
2017/11/26(日) 19:17:54.77ID:C7WBrdWqM
>>39
残念ながら、続編はもうないんだ…
2017/11/26(日) 20:18:30.38ID:po9rLop30
C++ の定本は、ロベールだけど、ものすごい分厚い

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

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

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

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

その後、この2冊をこの順に読む
たのしいRuby 第5版、2016
みんなのPython 第4版、2017
2017/11/26(日) 20:45:07.56ID:rNgJnhxq0
>>47
>とにかく、C++は言語の最高峰だから、
いや、関数型の諸言語の方が、わけわからなくてすごい、と思うときもあるのでした。最古参の lisp とか…
2017/11/26(日) 20:52:23.29ID:I1XRhGjPM
>>30
thx!
2017/11/26(日) 20:54:50.87ID:po9rLop30
関数型は、コンセプトが難しいだけだが、
Elixir みたいに分かりやすい言語もある

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

Rust では、実装の詳細をどう回避しようとしてるのか、よくわかる
2017/11/26(日) 21:10:38.95ID:lLN9GSgU0
>>48
うーん、 Scheme スレ住人の私からすると、 LISP はS式表現の考え方で引っかかってる人の方が多い印象があるな。
関数型たって、副作用にややこしい手順が必要なのは Haskell くらいで、 LISP に「関数型」であるが故の難しさはそんなにない。
2017/11/26(日) 21:13:13.79ID:T8jkbpd5a
>>47
なんでc++の勉強するのになんでrubyやpythonの本を読まなきゃいけないんだよ?
2017/11/26(日) 21:17:17.78ID:lLN9GSgU0
>>52
必須ではないにせよ様々なパラダイムについて見識を持つのは無駄にはならないと思う。
ただ、入門者が色々手を出すと混乱する可能性も大きいんじゃないか。
2017/11/26(日) 21:38:23.19ID:po9rLop30
C++ は、エベレストみたいなもの。
まず、色々な山で練習しろってこと

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

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

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

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

C++ で勉強していると、ものすごい時間が掛かって、非効率
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
2017/11/26(日) 21:57:16.96ID:rNgJnhxq0
>>54
うーん Ruby/Python/Java で実装した例を読むと、即座に C++ に直す、というか、どうしてもそうしたくなってしまうんだよ
薄い本なのにぜんぜんはかどらない
2017/11/26(日) 22:01:25.91ID:lLN9GSgU0
Ruby/Python/Java の薄い!?
2017/11/26(日) 22:05:23.77ID:po9rLop30
OS 周りの事は、Python よりも、Ruby の方が楽。
Vagrant, Chef で、仮想OS もできるし

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

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

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

何十年も、C で手続き型をやってる老害どもが皆、
C++ のオブジェクト指向で、討ち死にしてる
2017/11/26(日) 22:07:18.82ID:rNgJnhxq0
>>58
いやいや 言語自体の話ではなくて、応用例の話で
いまはまっているのは https://www.amazon.co.jp/dp/4627847610 で、こういうのを読むと c/c++ で書いてみたくなるという…
2017/11/26(日) 22:13:20.12ID:po9rLop30
Go は老害が作っているから、結局、手続き型から言語から、抜け出せなかった。
C から、C++ へ移行できない、老害と同じ

一方、Elixir, Rust とかを見れば、どの概念を抽象化したのか、よくわかる
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だもんな・・・
2017/11/26(日) 22:33:03.00ID:A1ZwwN/70
難しい難しいと言って「ポインタとか」という例が出てくるところで察し
2017/11/26(日) 22:33:41.66ID:po9rLop30
素人がエベレストを目指しても、ダメ。
レベル5 の冒険者が、レベル50 のモンスターを倒せない。
小学生が大学数学を解けない

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

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

何十年も、C をやってる老害でも、C++ は全くできないし
2017/11/26(日) 22:37:49.56ID:okic0QgR0
できるとかできないとかどのくらいのレベルのことを言っているのか気になる
2017/11/26(日) 22:39:44.04ID:rNgJnhxq0
>>65
どのくらいの C++ スキルが必要とされるの?
68デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)
垢版 |
2017/11/26(日) 22:48:32.43ID:SBifPocB0
>>66
> 小学生が大学数学を解けない
ちゃんとこう言ってるじゃないかw
2017/11/26(日) 23:13:47.64ID:rNgJnhxq0
>>26
うーん、auto、よくわからんなあ…
2017/11/26(日) 23:35:44.48ID:okic0QgR0
>>68
例えが分かりにくいのでC++で例えてほしい
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
チンパンジーに因数分解みたいな話に例えもへったくれもねえだろ
2017/11/27(月) 00:33:44.81ID:1bUH4ri10
>>69
この場合はstd::inializer_listになるよ
2017/11/27(月) 00:34:52.25ID:1bUH4ri10
◯std::initilizer_list

だからstd::beginとかstd::endが使える
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
2017/11/27(月) 01:52:56.54ID:x+zk8UEy0
最近の大企業では、言語の募集をしても、全然できない人が来る。
言語を知っていても、何もできない

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

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

確かに、何の言語でも、そうなる
2017/11/27(月) 02:14:06.37ID:GAML79c/0
>>60
あ、すまん、それは薄い本 (同人誌のことをいうスラング) に反応してしもうたというジョークなので気にしないで。
2017/11/27(月) 02:36:02.00ID:T7rLcZV0d
>>77
C言語できますって言って2進数知らない人とか来るもんね
2017/11/27(月) 03:58:40.54ID:x+zk8UEy0
まあ簡潔に言えば、C++ を学びたい場合、直接C++ を学ぼうとしても無理。
文法だけを学んでも、全く何もできない

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

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

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

平山尚のセガ本もあるけど、文法を学んでも、オブジェクト指向が理解できない。
やっぱり「スッキリJava」から始める必要がある
2017/11/27(月) 04:39:24.98ID:/nBMg24u0
Javaみたいなオペレータもテンプレートも使えない糞言語薦めるな
2017/11/27(月) 04:41:34.85ID:/nBMg24u0
ヒエラルキーのトップC++にはなにもかも無駄な知識
Javaもrubyもpythonも
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++の学び方はパタヘネを読むところから始まる。
2017/11/27(月) 08:33:19.56ID:x+zk8UEy0
オブジェクト指向をわかりやすく説明した本は、世界中にない。
だから「スッキリJava」が出た 2011年は、オブジェクト指向にとって、エポックの年

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

他国では、もっと苦労してるはず。
まあ、漏れの勝手な意見だけど
2017/11/27(月) 08:42:09.94ID:T6hD1Djz0
いや意見というより妄想
2017/11/27(月) 08:46:30.99ID:U9yOEuDb0
Javaみたいなゴミ薦めるな。ソフィーの世界の方がマシ
2017/11/27(月) 09:19:29.64ID:tczRDnba0
いろんな言語のおいしいとこだけ使って個々の言語に深入りしないのが得策
おいしいところを繋ぎ合わせる能力のほうが大事
2017/11/27(月) 09:19:54.22ID:aghVPiEK0
better Cとして使うのはいかんのか?
2017/11/27(月) 10:06:43.21ID:AedLfSQl0
イカンことはないと思うが、C の環境に行った時に困るぞ。
まあ最近の C には大体取り込まれてるみたいだけど。
2017/11/27(月) 12:03:50.36ID:pjE3KxE70
例の約一名入ってることがおかしくて
まず初心者というか入門で、C++の文法などを覚えたいという話なのに
コンピュータリテラシーが無いと現場では使えない、とか
今それ関係ないし
2017/11/27(月) 12:14:01.72ID:889bi2PQa
他の言語の本は無しとしてオススメの本ある?
c++11以前だったら独習C++が良かった。
2017/11/27(月) 12:45:48.74ID:O7ueEetiM
c++ プライマー第5版くらいしかないと思う。
c++の基本的な文法から解説してあってc++11対応。他の言語を学んでいるなら読めると思う。
2017/11/27(月) 12:49:42.23ID:vi7VqSly0
遠回しに他の言語の本読めって言っとるようなもんだ
2017/11/27(月) 12:51:23.55ID:GAML79c/0
C++11 が成立するより前だと「詳説 C++ 第2版」が良かったと思う。
http://amzn.asia/4C6Q7x9
2017/11/27(月) 13:10:56.02ID:O7ueEetiM
>>95
説明が悪かったけど、プログラミングの全くの初心者が読むにはちょっと難しいかもってこと。
2017/11/27(月) 13:23:45.26ID:vi7VqSly0
>>97
ああそういうことね
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に至ってはこの点、どっちでもいいです、という仕様にしてしまっているし)
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だし。(あれは双方の言い分も分かるが)
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で文法的には取り入れられたものの、おそらく大半の職場では相当期間制限されるはず。
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は向いているが。
2017/11/27(月) 20:24:50.03ID:GAML79c/0
>>102
Go はさっぱりあかん言語だというのには同意するが、
現実にはその程度で良かったという話なんだよ……
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
2017/11/27(月) 21:58:25.69ID:x+zk8UEy0
ゲームプログラマになる前に覚えておきたい技術、平山 尚、2008

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

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

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

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

外人の場合、専門書しかないから、偏差値70未満は、単純に振るい落とされるだけ。
日本のように、学ぶことはできない
2017/11/27(月) 22:04:03.51ID:pbeBNwkp0
>>103
あれは言っちゃあ悪いがC++のオブジェクト指向が暴走した反動だよ。
C++が無駄に複雑化しなければ全くのゴミだったはず。
それ以前にC++はGC嫌いが宗教じみてる。
無駄にスマポで頑張るのではなく、VC++/CLIのgcnewを導入した方がましだったと思うよ。

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

どこの現場でも出来る奴ってのは、モジュール設計のセンスとネーミングセンスのある奴じゃなかろうか
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 を非難したくはないな…
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だのでさえ殺意を覚えているんだが
2017/11/27(月) 23:26:49.34ID:gwom9yQZ0
マニア向けも何もunique_ptrもshared_ptrも1x以降に実装されたんだから当たり前やろ
2017/11/27(月) 23:28:11.32ID:x+zk8UEy0
unique_ptr, shared_ptr などは、たぶん、Boost の本に載ってるかな?

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

C++ では、多重継承も難しいから、Java, C# では単一継承だけになった
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++は。
2017/11/27(月) 23:34:27.97ID:gwom9yQZ0
いくらなんでもGCはいらんやろ
117デフォルトの名無しさん (ワッチョイ 077f-lrN+)
垢版 |
2017/11/27(月) 23:37:10.60ID:Tgpr/JpE0
リソースを全部GCで管理してくれるならいいんだけど
自分で解放しないといけないリソースもあってなんだそりゃっていつも思う
2017/11/27(月) 23:38:00.85ID:/nBMg24u0
GCなんて負の遺産だろ
崇高なC++にそんなもん混ぜんな
2017/11/27(月) 23:39:22.69ID:gwom9yQZ0
>>117
ほんこれ
んで結局usingだのwithだのって、ええ…って感じ
2017/11/28(火) 00:15:26.24ID:MNvbCMHv0
>>111
c++プライマー第5版で解説してる。
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に対してかなり出遅れている感じは否めない。
ここら辺は結果論でしかないが、分からん物だね。
単純にいい言語が繁栄するわけでもないし。
2017/11/28(火) 00:41:52.09ID:+e31yHtn0
ワッチョイ便利だね。
123デフォルトの名無しさん (ワッチョイ 0775-forR)
垢版 |
2017/11/28(火) 01:00:11.14ID:g1MyZtTV0
煽りカスさん乙
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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