X



C++相談室 part133
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 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
0002デフォルトの名無しさん (ワッチョイ 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>
後死ね。

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

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

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

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

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

ついでにバージョンによってRVOどうのこうのも、質問には関係が無い余談だし
そもそもバージョンの話するんなら昔のC++はmoveセマンティクス無いし
しかし、どうであれ、どのみち質問には関係が無い
0005デフォルトの名無しさん (アウアウカー Sadb-ZI9b)
垢版 |
2017/11/24(金) 20:40:51.17ID:X0HwtQDQa
保守
0007デフォルトの名無しさん (ワッチョイ 0778-4Z1+)
垢版 |
2017/11/24(金) 22:22:42.08ID:l1+FhW7v0
v(^・^)vはどこ行った?
0009デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)
垢版 |
2017/11/24(金) 23:01:10.76ID:9/UAKu4i0
>>3
おまえも何を言っているんだ?
operator deleteが呼び出されるタイミングを
vectorの詳細とでも言っているなら病院へ行ったほうがいい
0010デフォルトの名無しさん (ワッチョイ 8746-TjkM)
垢版 |
2017/11/24(金) 23:25:11.19ID:tVS6N6Kc0
前スレのおバカさんか

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

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

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

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

結局、質問者には
vectorな自動変数はスコープを抜けると寿命が尽きてデストラクタが呼ばれて解放される
というC++の根底のDNAである、RAIIのルールだけ言えばよいわけで
0014デフォルトの名無しさん (オッペケ Srfb-gBtc)
垢版 |
2017/11/25(土) 00:10:16.37ID:5IwBrrUdr
「コンパイラの銘柄とバージョンと最適化のオプションによる」

少なくとも991の置いたC++17の前提ではムーブコンストラクターやコピーコンストラクターは有り得ないのだが、
ひょっとして前提をすり替えられたのだろうか
0015デフォルトの名無しさん (ワッチョイ 8746-TjkM)
垢版 |
2017/11/25(土) 00:27:25.13ID:gBFdbUKG0
それは>>991が言ってるだけで
質問者はC++17とは言ってない
質問者に対して、もしC++17の場合は必ずRVOになるので〜〜という説明をしたとして
これもあまり意味が無いというか、関係が無い
質問者はvectorがRAIIを徹底していのるか心配になったから聞いているだけ
その意味ではRVOだろうがムーブだろうがコピーだろうが、関係が無い
0019デフォルトの名無しさん (ワッチョイ 5fbd-hcjg)
垢版 |
2017/11/25(土) 23:24:46.27ID:afKc1pIZ0
↑嘔吐するから漏れには関係ない

それよか想定上はconstメソッドなのだが実際のところ実装がどうされるかわからない抽象仮想関数にconstをつけて良いものかどうか
いつも悩む
0021デフォルトの名無しさん (ワッチョイ c74b-gliV)
垢版 |
2017/11/26(日) 03:45:55.11ID:I/ckFlEt0
>>19
良い。
0023デフォルトの名無しさん (ワッチョイ 5fcc-tupB)
垢版 |
2017/11/26(日) 04:29:20.65ID:g3197Gxk0
最近勉強始めたばかりで100までの範囲の数字を入力したらそれが1〜10,11〜20,・・・91〜100のどの範囲にあるか判定したいけどif文10個用意する方法より綺麗にするにはどうしたらいい?
0033デフォルトの名無しさん (ワッチョイ 077f-lrN+)
垢版 |
2017/11/26(日) 17:31:42.72ID:CoQMqJ/C0
何年に発売した入門書なんだ
0037デフォルトの名無しさん (ワッチョイ 0778-4Z1+)
垢版 |
2017/11/26(日) 17:42:35.83ID:LgT/GDJu0
CはそれほどでもないけどC++は11以降どんどん変わるようになったね
0041デフォルトの名無しさん (ワッチョイ bf4b-g2WY)
垢版 |
2017/11/26(日) 18:04:02.71ID:rgo+yBBa0
C++を始めようと思うんですがおすすめの参考書知りたいです。Cの知識はありませんがPythonでプログラミングは経験したのでプログラミング初学者ではないです。
0043デフォルトの名無しさん (スップ Sdff-2b6l)
垢版 |
2017/11/26(日) 18:09:43.82ID:wYDDxvKDd
今は規格から追ってった方がいいと思う
規格書そのものの通読は大変だろうから、cpprefjpとか眺めてわからなくなったら規格に当たってコード書いて試してが一番早いよ
プログラミング完全初心者はそうも行かないだろうけどPython知ってるなら大丈夫だろ
0044デフォルトの名無しさん (ワッチョイ bf4b-g2WY)
垢版 |
2017/11/26(日) 18:12:38.67ID:rgo+yBBa0
>>42
英語の本ではなく日本語の本で何かありませんかね?
英弱なもので^^;
0045デフォルトの名無しさん (ワッチョイ bf4b-g2WY)
垢版 |
2017/11/26(日) 18:14:59.44ID:rgo+yBBa0
>>44訂正
日本語版もありますね
すいません(^^;;
0047デフォルトの名無しさん (ワッチョイ 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
0048 ◆QZaw55cn4c (ワッチョイ 5f60-2JzH)
垢版 |
2017/11/26(日) 20:45:07.56ID:rNgJnhxq0
>>47
>とにかく、C++は言語の最高峰だから、
いや、関数型の諸言語の方が、わけわからなくてすごい、と思うときもあるのでした。最古参の lisp とか…
0050デフォルトの名無しさん (ワッチョイ 7f80-xsLR)
垢版 |
2017/11/26(日) 20:54:50.87ID:po9rLop30
関数型は、コンセプトが難しいだけだが、
Elixir みたいに分かりやすい言語もある

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

Rust では、実装の詳細をどう回避しようとしてるのか、よくわかる
0051はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)
垢版 |
2017/11/26(日) 21:10:38.95ID:lLN9GSgU0
>>48
うーん、 Scheme スレ住人の私からすると、 LISP はS式表現の考え方で引っかかってる人の方が多い印象があるな。
関数型たって、副作用にややこしい手順が必要なのは Haskell くらいで、 LISP に「関数型」であるが故の難しさはそんなにない。
0054デフォルトの名無しさん (ワッチョイ 7f80-xsLR)
垢版 |
2017/11/26(日) 21:38:23.19ID:po9rLop30
C++ は、エベレストみたいなもの。
まず、色々な山で練習しろってこと

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

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

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

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

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

落ちたやつにはエベレストに見えるのかw
0057 ◆QZaw55cn4c (ワッチョイ 5f60-2JzH)
垢版 |
2017/11/26(日) 21:57:16.96ID:rNgJnhxq0
>>54
うーん Ruby/Python/Java で実装した例を読むと、即座に C++ に直す、というか、どうしてもそうしたくなってしまうんだよ
薄い本なのにぜんぜんはかどらない
0059デフォルトの名無しさん (ワッチョイ 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++ のオブジェクト指向で、討ち死にしてる
0061デフォルトの名無しさん (ワッチョイ 7f80-xsLR)
垢版 |
2017/11/26(日) 22:13:20.12ID:po9rLop30
Go は老害が作っているから、結局、手続き型から言語から、抜け出せなかった。
C から、C++ へ移行できない、老害と同じ

一方、Elixir, Rust とかを見れば、どの概念を抽象化したのか、よくわかる
0063デフォルトの名無しさん (アウアウウー Sacb-DWFp)
垢版 |
2017/11/26(日) 22:26:56.58ID:tkabk1y3a
C++を勉強したいという人にrubyやpython,javaの本をすすめるなんて
遠回りな事言うんだなと思ったら>>59だもんな・・・
0065デフォルトの名無しさん (ワッチョイ 7f80-xsLR)
垢版 |
2017/11/26(日) 22:33:41.66ID:po9rLop30
素人がエベレストを目指しても、ダメ。
レベル5 の冒険者が、レベル50 のモンスターを倒せない。
小学生が大学数学を解けない

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

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

何十年も、C をやってる老害でも、C++ は全くできないし
0068デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)
垢版 |
2017/11/26(日) 22:48:32.43ID:SBifPocB0
>>66
> 小学生が大学数学を解けない
ちゃんとこう言ってるじゃないかw
0071デフォルトの名無しさん (ワッチョイ 7f80-xsLR)
垢版 |
2017/11/26(日) 23:39:50.10ID:po9rLop30
最近の大企業では、言語の募集をしても、全然できない人が来る。
言語を知っていても、何もできない

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

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

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

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

Emacs を使えない人は、お断りっていう会社もあるほどw
プロなら、自分が使うツールにも、こだわりがあるはずだから
0072デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)
垢版 |
2017/11/26(日) 23:49:41.52ID:SBifPocB0
>>70
チンパンジーに因数分解みたいな話に例えもへったくれもねえだろ
0076デフォルトの名無しさん (ブーイモ MMeb-V9cG)
垢版 |
2017/11/27(月) 01:26:50.56ID:fAclYYwOM
>>75
>>63>>64
0077デフォルトの名無しさん (ワッチョイ 7f80-xsLR)
垢版 |
2017/11/27(月) 01:52:56.54ID:x+zk8UEy0
最近の大企業では、言語の募集をしても、全然できない人が来る。
言語を知っていても、何もできない

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

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

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

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

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

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

平山尚のセガ本もあるけど、文法を学んでも、オブジェクト指向が理解できない。
やっぱり「スッキリJava」から始める必要がある
0083デフォルトの名無しさん (ワッチョイ 0793-C/lT)
垢版 |
2017/11/27(月) 06:30:05.16ID:O6svWDNK0
C++を使うのにオブジェクト指向に対する理解が必要、という意見にはある程度賛成できる。
しかしながら、そのために先にJavaの本を読め、てのはどうなんだろ。
C++の入門書でオブジェクト指向の解説までカバーした本、てのは存在しないのかな。

C++の本を書くような人はオブジェクト指向の説明をするのは沽券に関わると思っているのか、
あるいは「C++の専門家」にはオブジェクト指向を教える能力がないのか。
0084デフォルトの名無しさん (ワッチョイ 47b3-h3cN)
垢版 |
2017/11/27(月) 06:41:19.35ID:/wh5qHzF0
オブジェクト指向言語じゃないので。
0085デフォルトの名無しさん (ワッチョイ 47b3-h3cN)
垢版 |
2017/11/27(月) 06:42:27.76ID:/wh5qHzF0
C++の学び方はパタヘネを読むところから始まる。
0086デフォルトの名無しさん (ワッチョイ 7f80-xsLR)
垢版 |
2017/11/27(月) 08:33:19.56ID:x+zk8UEy0
オブジェクト指向をわかりやすく説明した本は、世界中にない。
だから「スッキリJava」が出た 2011年は、オブジェクト指向にとって、エポックの年

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

他国では、もっと苦労してるはず。
まあ、漏れの勝手な意見だけど
0092デフォルトの名無しさん (ワッチョイ 8746-TjkM)
垢版 |
2017/11/27(月) 12:03:50.36ID:pjE3KxE70
例の約一名入ってることがおかしくて
まず初心者というか入門で、C++の文法などを覚えたいという話なのに
コンピュータリテラシーが無いと現場では使えない、とか
今それ関係ないし
0099デフォルトの名無しさん (ワッチョイ 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に至ってはこの点、どっちでもいいです、という仕様にしてしまっているし)
0100デフォルトの名無しさん (ワッチョイ 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だし。(あれは双方の言い分も分かるが)
■ このスレッドは過去ログ倉庫に格納されています

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