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/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セマンティクス無いし
しかし、どうであれ、どのみち質問には関係が無い
2017/11/24(金) 19:29:11.47ID:FCfoZStM0
何故建てたし
5デフォルトの名無しさん (アウアウカー Sadb-ZI9b)
垢版 |
2017/11/24(金) 20:40:51.17ID:X0HwtQDQa
保守
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
https://mevius.5ch.net/test/read.cgi/tech/1507561894/995

おまえは何を言っているんだ?
= delete;が03でNGになるのは当たり前だろ
9デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)
垢版 |
2017/11/24(金) 23:01:10.76ID:9/UAKu4i0
>>3
おまえも何を言っているんだ?
operator deleteが呼び出されるタイミングを
vectorの詳細とでも言っているなら病院へ行ったほうがいい
2017/11/24(金) 23:25:11.19ID:tVS6N6Kc0
前スレのおバカさんか

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

↑これの説明してみ?
好意的に解釈することもできるが、どのみち意味不明すぎる
2017/11/24(金) 23:43:36.87ID:lG8HVUMw0
>>8
そっちこそ何言ってるんだ?
今は RVO の話だろ?
2017/11/24(金) 23:59:00.33ID:tVS6N6Kc0
まぁ、>>10の意味不明な文章の解釈などどっちでも良いんだが
質問者はvectorな自動変数の寿命に関して、RAIIが正しく行われるか
不安だから聞いているだけなのに、moveがどうとかドヤッた挙句
RVOが働いたらmoveされないんじゃね?ってのはお粗末すぎる

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

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

結局、質問者には
vectorな自動変数はスコープを抜けると寿命が尽きてデストラクタが呼ばれて解放される
というC++の根底のDNAである、RAIIのルールだけ言えばよいわけで
2017/11/25(土) 00:07:29.16ID:gBFdbUKG0
vectorな自動変数 という表現はちょっとアレだったかもしれん
まぁ、vector型として宣言された自動変数 のこと・・
2017/11/25(土) 00:10:16.37ID:5IwBrrUdr
「コンパイラの銘柄とバージョンと最適化のオプションによる」

少なくとも991の置いたC++17の前提ではムーブコンストラクターやコピーコンストラクターは有り得ないのだが、
ひょっとして前提をすり替えられたのだろうか
2017/11/25(土) 00:27:25.13ID:gBFdbUKG0
それは>>991が言ってるだけで
質問者はC++17とは言ってない
質問者に対して、もしC++17の場合は必ずRVOになるので〜〜という説明をしたとして
これもあまり意味が無いというか、関係が無い
質問者はvectorがRAIIを徹底していのるか心配になったから聞いているだけ
その意味ではRVOだろうがムーブだろうがコピーだろうが、関係が無い
2017/11/25(土) 00:33:53.19ID:Sg1k8TV00
991がC++17のことを言っているのはちょっと脱線しただけであって、
話の前提でもないし質問の意図に沿ったものでもないよな
2017/11/25(土) 09:33:20.80ID:+Jz8ZPqE0
なけなしの知識でドヤってるだけやろ w
2017/11/25(土) 21:47:56.71ID:fPJ/ssThM
const参照を返す関数があるのだけど、autoで効率よく戻り値を受け取るには
const auto&とか書かなきゃいけないの?
それともdecltype(auto)とかするの?
2017/11/25(土) 23:24:46.27ID:afKc1pIZ0
↑嘔吐するから漏れには関係ない

それよか想定上はconstメソッドなのだが実際のところ実装がどうされるかわからない抽象仮想関数にconstをつけて良いものかどうか
いつも悩む
2017/11/25(土) 23:33:46.79ID:mxSpQEHX0
autoで受けて余計なコピーを発生させちゃう困ったちゃん
21デフォルトの名無しさん (ワッチョイ c74b-gliV)
垢版 |
2017/11/26(日) 03:45:55.11ID:I/ckFlEt0
>>19
良い。
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個用意する方法より綺麗にするにはどうしたらいい?
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で文法的には取り入れられたものの、おそらく大半の職場では相当期間制限されるはず。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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