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だもんな・・・
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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