次スレを立てる時は本文の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
探検
C++相談室 part133
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん (ワッチョイ 1fcf-H1rY)
2017/11/24(金) 16:52:50.43ID:WoNXR2ax02デフォルトの名無しさん (ワッチョイ 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>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
---- テンプレ ここまで ----
環境によるだろ。
俺は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セマンティクス無いし
しかし、どうであれ、どのみち質問には関係が無い
だって今回の話は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
https://mevius.5ch.net/test/read.cgi/tech/1507561894/995
おまえは何を言っているんだ?
= delete;が03でNGになるのは当たり前だろ
https://mevius.5ch.net/test/read.cgi/tech/1507561894/995
おまえは何を言っているんだ?
= delete;が03でNGになるのは当たり前だろ
9デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)
2017/11/24(金) 23:01:10.76ID:9/UAKu4i010デフォルトの名無しさん (ワッチョイ 8746-TjkM)
2017/11/24(金) 23:25:11.19ID:tVS6N6Kc0 前スレのおバカさんか
>このときoperator deleteが呼び出されるが
>operator deleteがどのようなタイミングで解放しているかには依存すべきでない
>我々が関心を持つべきはoperator deleteが呼び出されるタイミングで実装の詳細ではない
↑これの説明してみ?
好意的に解釈することもできるが、どのみち意味不明すぎる
>このときoperator deleteが呼び出されるが
>operator deleteがどのようなタイミングで解放しているかには依存すべきでない
>我々が関心を持つべきはoperator deleteが呼び出されるタイミングで実装の詳細ではない
↑これの説明してみ?
好意的に解釈することもできるが、どのみち意味不明すぎる
11はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)
2017/11/24(金) 23:43:36.87ID:lG8HVUMw012デフォルトの名無しさん (ワッチョイ 8746-TjkM)
2017/11/24(金) 23:59:00.33ID:tVS6N6Kc0 まぁ、>>10の意味不明な文章の解釈などどっちでも良いんだが
質問者はvectorな自動変数の寿命に関して、RAIIが正しく行われるか
不安だから聞いているだけなのに、moveがどうとかドヤッた挙句
RVOが働いたらmoveされないんじゃね?ってのはお粗末すぎる
return vec;で、RVOが働くか、ムーブコンストラクタになるか、コピーコンストラクタになるか、は
コンパイラの銘柄とバージョンと最適化のオプションによるだろうし
もしかしたら、コンパイラの気分で変わるかもしれないし
なんだったら、関数がインライン展開されたらまた前提が変わってくるだろうよ
なんで、こんなことは考えるだけ無意味であるし
というか、考えなくてよいように作ってあるし
むしろ、考えてはダメというか、依存させてはいけないという意味で
余計なこと(悪いこと)は考えないほうが良いし
結局、質問者には
vectorな自動変数はスコープを抜けると寿命が尽きてデストラクタが呼ばれて解放される
というC++の根底のDNAである、RAIIのルールだけ言えばよいわけで
質問者は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型として宣言された自動変数 のこと・・
まぁ、vector型として宣言された自動変数 のこと・・
14デフォルトの名無しさん (オッペケ Srfb-gBtc)
2017/11/25(土) 00:10:16.37ID:5IwBrrUdr 「コンパイラの銘柄とバージョンと最適化のオプションによる」
少なくとも991の置いたC++17の前提ではムーブコンストラクターやコピーコンストラクターは有り得ないのだが、
ひょっとして前提をすり替えられたのだろうか
少なくとも991の置いたC++17の前提ではムーブコンストラクターやコピーコンストラクターは有り得ないのだが、
ひょっとして前提をすり替えられたのだろうか
15デフォルトの名無しさん (ワッチョイ 8746-TjkM)
2017/11/25(土) 00:27:25.13ID:gBFdbUKG0 それは>>991が言ってるだけで
質問者はC++17とは言ってない
質問者に対して、もしC++17の場合は必ずRVOになるので〜〜という説明をしたとして
これもあまり意味が無いというか、関係が無い
質問者はvectorがRAIIを徹底していのるか心配になったから聞いているだけ
その意味ではRVOだろうがムーブだろうがコピーだろうが、関係が無い
質問者は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)とかするの?
const auto&とか書かなきゃいけないの?
それともdecltype(auto)とかするの?
19デフォルトの名無しさん (ワッチョイ 5fbd-hcjg)
2017/11/25(土) 23:24:46.27ID:afKc1pIZ0 ↑嘔吐するから漏れには関係ない
それよか想定上はconstメソッドなのだが実際のところ実装がどうされるかわからない抽象仮想関数にconstをつけて良いものかどうか
いつも悩む
それよか想定上は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:DFCtUaBX023デフォルトの名無しさん (ワッチョイ 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:Dn1yAmWU027デフォルトの名無しさん (ワッチョイ 07b3-5mWG)
2017/11/26(日) 09:12:00.52ID:8WHK08hV0 >>23
(x-1)/10
(x-1)/10
28デフォルトの名無しさん (ブーイモ MMcf-V9cG)
2017/11/26(日) 10:40:50.63ID:q1KSvIhfM29デフォルトの名無しさん (ブーイモ 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();
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:DaGrByo8036デフォルトの名無しさん (ワッチョイ 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対応版だしすぐに古くなる
でも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でプログラミングは経験したのでプログラミング初学者ではないです。
43デフォルトの名無しさん (スップ Sdff-2b6l)
2017/11/26(日) 18:09:43.82ID:wYDDxvKDd 今は規格から追ってった方がいいと思う
規格書そのものの通読は大変だろうから、cpprefjpとか眺めてわからなくなったら規格に当たってコード書いて試してが一番早いよ
プログラミング完全初心者はそうも行かないだろうけどPython知ってるなら大丈夫だろ
規格書そのものの通読は大変だろうから、cpprefjpとか眺めてわからなくなったら規格に当たってコード書いて試してが一番早いよ
プログラミング完全初心者はそうも行かないだろうけどPython知ってるなら大丈夫だろ
44デフォルトの名無しさん (ワッチョイ bf4b-g2WY)
2017/11/26(日) 18:12:38.67ID:rgo+yBBa045デフォルトの名無しさん (ワッチョイ bf4b-g2WY)
2017/11/26(日) 18:14:59.44ID:rgo+yBBa046デフォルトの名無しさん (ブーイモ 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
これは、ちょっと古めの本だけど、
ドワンゴ江添などの新しい規格の本は、古い規格を知っていないと読めない
猫でもわかるC++プログラミング 第2版
数言語知っているなら、簡略なこの手の本で、お茶を濁す
とにかく、C++は言語の最高峰だから、
スッキリJava で、オブジェクト指向をマスターしていないと、取得できない。
理解できるまでに数年以上掛かる
まずこの本で、オブジェクト指向を学ぶ
スッキリわかる Java入門 第2版、2014
その後、この2冊をこの順に読む
たのしいRuby 第5版、2016
みんなのPython 第4版、2017
49デフォルトの名無しさん (ブーイモ MM4b-N4rA)
2017/11/26(日) 20:52:23.29ID:I1XRhGjPM >>30
thx!
thx!
50デフォルトの名無しさん (ワッチョイ 7f80-xsLR)
2017/11/26(日) 20:54:50.87ID:po9rLop30 関数型は、コンセプトが難しいだけだが、
Elixir みたいに分かりやすい言語もある
一方、C++ はポインタとか、実装が難しい。
実装に直面させられるから
Rust では、実装の詳細をどう回避しようとしてるのか、よくわかる
Elixir みたいに分かりやすい言語もある
一方、C++ はポインタとか、実装が難しい。
実装に直面させられるから
Rust では、実装の詳細をどう回避しようとしてるのか、よくわかる
51はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)
2017/11/26(日) 21:10:38.95ID:lLN9GSgU0 >>48
うーん、 Scheme スレ住人の私からすると、 LISP はS式表現の考え方で引っかかってる人の方が多い印象があるな。
関数型たって、副作用にややこしい手順が必要なのは Haskell くらいで、 LISP に「関数型」であるが故の難しさはそんなにない。
うーん、 Scheme スレ住人の私からすると、 LISP はS式表現の考え方で引っかかってる人の方が多い印象があるな。
関数型たって、副作用にややこしい手順が必要なのは Haskell くらいで、 LISP に「関数型」であるが故の難しさはそんなにない。
52デフォルトの名無しさん (アウアウカー Sadb-Fzm/)
2017/11/26(日) 21:13:13.79ID:T8jkbpd5a >>47
なんでc++の勉強するのになんでrubyやpythonの本を読まなきゃいけないんだよ?
なんでc++の勉強するのになんでrubyやpythonの本を読まなきゃいけないんだよ?
53はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq)
2017/11/26(日) 21:17:17.78ID:lLN9GSgU054デフォルトの名無しさん (ワッチョイ 7f80-xsLR)
2017/11/26(日) 21:38:23.19ID:po9rLop30 C++ は、エベレストみたいなもの。
まず、色々な山で練習しろってこと
スクエニなんて、社員が何千人もいるのに、C++ を募集してるだろ。
社員の平均勤続年数は、7年だけど誰もできない
最近では、言語の募集をしても、全然できない。
言語を知っていても、何もできない
コンピューターリテラシー、つまり環境・OS を含めて、
すべてを知ってる人でないと、無理
C++ では、Ruby などの関数型とか、勉強できない。
ビジネスロジックの話ができない。
メモリとか、余計なものが付きまとってくるから
C++ で勉強していると、ものすごい時間が掛かって、非効率
まず、色々な山で練習しろってこと
スクエニなんて、社員が何千人もいるのに、C++ を募集してるだろ。
社員の平均勤続年数は、7年だけど誰もできない
最近では、言語の募集をしても、全然できない。
言語を知っていても、何もできない
コンピューターリテラシー、つまり環境・OS を含めて、
すべてを知ってる人でないと、無理
C++ では、Ruby などの関数型とか、勉強できない。
ビジネスロジックの話ができない。
メモリとか、余計なものが付きまとってくるから
C++ で勉強していると、ものすごい時間が掛かって、非効率
55デフォルトの名無しさん (アウアウカー Sadb-Fzm/)
2017/11/26(日) 21:40:21.18ID:T8jkbpd5a56デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)
2017/11/26(日) 21:46:20.31ID:SBifPocB0 >>54
足切り点がちょっと高めで、落ちるやつは容赦なく落ちるというだけ
いつぞや足切り点を低くしようというCOBOLとかいう試みがあったが
結果は周知のとおり
落ちたやつにはエベレストに見えるのかw
足切り点がちょっと高めで、落ちるやつは容赦なく落ちるというだけ
いつぞや足切り点を低くしようというCOBOLとかいう試みがあったが
結果は周知のとおり
落ちたやつにはエベレストに見えるのかw
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++ のオブジェクト指向で、討ち死にしてる
Vagrant, Chef で、仮想OS もできるし
Python は、AI とか数値計算用。
次世代は、Elixir, Rust の2択
社員数何千人の大企業が、C++ を募集すること自体が、そもそもおかしいだろ。
何千人もいて、できる奴が、1人も見つからないなんて
そもそも、そんなに簡単だったら、皆、こんなに挫折しないって。
こんなに本屋に、難しい本が並ばないから
何十年も、C で手続き型をやってる老害どもが皆、
C++ のオブジェクト指向で、討ち死にしてる
>>58
いやいや 言語自体の話ではなくて、応用例の話で
いまはまっているのは https://www.amazon.co.jp/dp/4627847610 で、こういうのを読むと c/c++ で書いてみたくなるという…
いやいや 言語自体の話ではなくて、応用例の話で
いまはまっているのは 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 とかを見れば、どの概念を抽象化したのか、よくわかる
C から、C++ へ移行できない、老害と同じ
一方、Elixir, Rust とかを見れば、どの概念を抽象化したのか、よくわかる
62デフォルトの名無しさん (ワッチョイ 7f80-xsLR)
2017/11/26(日) 22:21:12.28ID:po9rLop30 C++, Rust を比較すれば良い。
どの概念を抽象化したのか、よくわかる
ニコ生も今、Rust で作り直してる最中
どの概念を抽象化したのか、よくわかる
ニコ生も今、Rust で作り直してる最中
63デフォルトの名無しさん (アウアウウー Sacb-DWFp)
2017/11/26(日) 22:26:56.58ID:tkabk1y3a C++を勉強したいという人にrubyやpython,javaの本をすすめるなんて
遠回りな事言うんだなと思ったら>>59だもんな・・・
遠回りな事言うんだなと思ったら>>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++ は全くできないし
レベル5 の冒険者が、レベル50 のモンスターを倒せない。
小学生が大学数学を解けない
実際に大企業では、プログラマーが何十人来ても、即日サヨナラが続いてる
漏れは、C++ のプロジェクトに採用された事があるけど、
派遣から来ても、ほとんどが即日サヨナラ
何十年も、C をやってる老害でも、C++ は全くできないし
66デフォルトの名無しさん (ワッチョイ 47b3-lrN+)
2017/11/26(日) 22:37:49.56ID:okic0QgR0 できるとかできないとかどのくらいのレベルのことを言っているのか気になる
>>65
どのくらいの C++ スキルが必要とされるの?
どのくらいの C++ スキルが必要とされるの?
68デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)
2017/11/26(日) 22:48:32.43ID:SBifPocB0 >>26
うーん、auto、よくわからんなあ…
うーん、auto、よくわからんなあ…
70デフォルトの名無しさん (ワッチョイ 47b3-lrN+)
2017/11/26(日) 23:35:44.48ID:okic0QgR0 >>68
例えが分かりにくいのでC++で例えてほしい
例えが分かりにくいのでC++で例えてほしい
71デフォルトの名無しさん (ワッチョイ 7f80-xsLR)
2017/11/26(日) 23:39:50.10ID:po9rLop30 最近の大企業では、言語の募集をしても、全然できない人が来る。
言語を知っていても、何もできない
だから、コンピューターリテラシー、
つまり環境・OS・アルゴリズムなど、すべてを含めて必須
OS のコマンドを知らないとか、アルゴリズムを知らないとか、
仮想OS を構築できないとか、Vagrant, Chef, Docker を知らないとか、
LLVM, MFC を知らないとか
C++ なんて、ほぼすべてが必須だろ。
だから求人票には、コンピューターリテラシー必須って書いてある
言語の知識ぐらいでは、何もできないから、派遣から来ても、即日サヨナラとなる
Emacs を使えない人は、お断りっていう会社もあるほどw
プロなら、自分が使うツールにも、こだわりがあるはずだから
言語を知っていても、何もできない
だから、コンピューターリテラシー、
つまり環境・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になるよ
この場合はstd::inializer_listになるよ
74デフォルトの名無しさん (ワッチョイ 5fcf-H1rY)
2017/11/27(月) 00:34:52.25ID:1bUH4ri10 ◯std::initilizer_list
だからstd::beginとかstd::endが使える
だからstd::beginとかstd::endが使える
75デフォルトの名無しさん (アウアウウー Sacb-Fzm/)
2017/11/27(月) 01:16:09.67ID:4bHQN/8na >>71
趣味でやってるから企業の事などさっぱりだがそれはc++以外だと不要なのか?
趣味でやってるから企業の事などさっぱりだがそれはc++以外だと不要なのか?
77デフォルトの名無しさん (ワッチョイ 7f80-xsLR)
2017/11/27(月) 01:52:56.54ID:x+zk8UEy0 最近の大企業では、言語の募集をしても、全然できない人が来る。
言語を知っていても、何もできない
だから、コンピューターリテラシー、
つまり環境・OS・アルゴリズムなど、すべてを含めて必須
だから募集要件が、コンピューターリテラシーがある人になる
確かに、何の言語でも、そうなる
言語を知っていても、何もできない
だから、コンピューターリテラシー、
つまり環境・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進数知らない人とか来るもんね
C言語できますって言って2進数知らない人とか来るもんね
80デフォルトの名無しさん (ワッチョイ 7f80-xsLR)
2017/11/27(月) 03:58:40.54ID:x+zk8UEy0 まあ簡潔に言えば、C++ を学びたい場合、直接C++ を学ぼうとしても無理。
文法だけを学んでも、全く何もできない
周辺知識(コンピューターリテラシー)から埋めていかないと、どうにもならない
高山列車が直接、真上に進めないのと同じ。
切り返ししながら、徐々に上がっていく感じ
何十年も、手続き型言語のC をやってる老害が、
オブジェクト指向に移行できないのも、そう
平山尚のセガ本もあるけど、文法を学んでも、オブジェクト指向が理解できない。
やっぱり「スッキリJava」から始める必要がある
文法だけを学んでも、全く何もできない
周辺知識(コンピューターリテラシー)から埋めていかないと、どうにもならない
高山列車が直接、真上に進めないのと同じ。
切り返ししながら、徐々に上がっていく感じ
何十年も、手続き型言語の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も
Javaもrubyもpythonも
83デフォルトの名無しさん (ワッチョイ 0793-C/lT)
2017/11/27(月) 06:30:05.16ID:O6svWDNK0 C++を使うのにオブジェクト指向に対する理解が必要、という意見にはある程度賛成できる。
しかしながら、そのために先にJavaの本を読め、てのはどうなんだろ。
C++の入門書でオブジェクト指向の解説までカバーした本、てのは存在しないのかな。
C++の本を書くような人はオブジェクト指向の説明をするのは沽券に関わると思っているのか、
あるいは「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」から始めるという道筋ができた。
この道筋で学べるのは、日本だけ
他国では、もっと苦労してるはず。
まあ、漏れの勝手な意見だけど
だから「スッキリ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 には大体取り込まれてるみたいだけど。
まあ最近の C には大体取り込まれてるみたいだけど。
92デフォルトの名無しさん (ワッチョイ 8746-TjkM)
2017/11/27(月) 12:03:50.36ID:pjE3KxE70 例の約一名入ってることがおかしくて
まず初心者というか入門で、C++の文法などを覚えたいという話なのに
コンピュータリテラシーが無いと現場では使えない、とか
今それ関係ないし
まず初心者というか入門で、C++の文法などを覚えたいという話なのに
コンピュータリテラシーが無いと現場では使えない、とか
今それ関係ないし
93デフォルトの名無しさん (アウアウカー Sadb-Fzm/)
2017/11/27(月) 12:14:01.72ID:889bi2PQa 他の言語の本は無しとしてオススメの本ある?
c++11以前だったら独習C++が良かった。
c++11以前だったら独習C++が良かった。
94デフォルトの名無しさん (オイコラミネオ MM0b-d/GA)
2017/11/27(月) 12:45:48.74ID:O7ueEetiM c++ プライマー第5版くらいしかないと思う。
c++の基本的な文法から解説してあってc++11対応。他の言語を学んでいるなら読めると思う。
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
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に至ってはこの点、どっちでもいいです、という仕様にしてしまっているし)
> 入門書でオブジェクト指向の解説
ここがそもそも間違っている。
オブジェクト指向は肥大化(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だし。(あれは双方の言い分も分かるが)
これ自体がオブジェクト指向そのものだ。
ただし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で文法的には取り入れられたものの、おそらく大半の職場では相当期間制限されるはず。
だから新人が戸惑ってしまうのも分かるし、無駄に覚えることも多すぎる。
例えば、継承した場合に隠蔽できるが、あれなんてマジで要らないだろ。
(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は向いているが。
(俺は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/0104デフォルトの名無しさん (ワッチョイ 67c3-+V5r)
2017/11/27(月) 20:46:19.07ID:FoS8Dw4c0 全くの初心者なら、まずはC言語の勉強をしてから>>94のc++ プライマー第5版などを読むのがいいかもしれないね
俺の知っているC言語の本で一番分かりやすかったのは、アスキーラーニングシステムの「入門C言語 新装版」と「実習C言語 新装版」だけど、さすがに古いかな?
同じ著者の本で2008年に出ている「Cプログラミング講座」というのもあるけど、これは読んだことがないな
というか、こっちもすでに絶版になっているっぽいな...
俺の知っている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未満は、単純に振るい落とされるだけ。
日本のように、学ぶことはできない
この本は賞を取ってるけど、セガの平山は、
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ってのも分からなくもない展開だ。
ただ、持ち上げている連中の非力感は否めない。
あれは関数型()と同様に大騒ぎしてポシャる可能性もあると思う。
あれは言っちゃあ悪いがC++のオブジェクト指向が暴走した反動だよ。
C++が無駄に複雑化しなければ全くのゴミだったはず。
それ以前にC++はGC嫌いが宗教じみてる。
無駄にスマポで頑張るのではなく、VC++/CLIのgcnewを導入した方がましだったと思うよ。
Goは全く新しい機能がなくてびっくりした。
ただ、C++が複雑化しすぎてWeb系(というかバックグラウンドがない初心者)に厳しいのは事実。
そしてゆとり版C++=Goってのも分からなくもない展開だ。
ただ、持ち上げている連中の非力感は否めない。
あれは関数型()と同様に大騒ぎしてポシャる可能性もあると思う。
>>93
独習c++ いいね、ハーバード・シルトは要点を押さえてさえている、独習Java がダメダメだったのとは一線を隔しているね
演習問題に std::string を再実装する、という山場があるが、それを乗り越えると c++ の初級者になれると思う
独習c++ いいね、ハーバード・シルトは要点を押さえてさえている、独習Java がダメダメだったのとは一線を隔しているね
演習問題に std::string を再実装する、という山場があるが、それを乗り越えると c++ の初級者になれると思う
109デフォルトの名無しさん (アウアウカー Sadb-NhOl)
2017/11/27(月) 22:38:46.80ID:c8zZNJxQa >>99
Java のいいところは、一文字一文字丁寧に読んでいければだれでもわかるように書けるところにあるのでは?
それは一つの到達点だと思う
BigInteger.ONE とか、ちょっと嫌だな、と思う書き方はあるが、仕方がない
(gmp なら 普通に 1 と書けば文脈を読んで BigInteger(1) というコンストラクタが働くのだが、昔の Java はそもそもオートボクシングがなかったくらいだし)
C/C++ ならスタックにデータを置けても規模が大きくなると、new/delete する方向になるのを見込んで、Java が最初からクラスをスタックに置かないことに徹したのも、
定石どおりでいい感じ、Java は尖がったところがないので好感をもっている
昔はアルゴリズムの教科書といえば pascal で記述されたものだが、最近は Java で記述されているものもよくみかける
私は Java を非難したくはないな…
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:u8FYnIqP0113デフォルトの名無しさん (ワッチョイ 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# では単一継承だけになった
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++は。
だから書いたろ。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++にそんなもん混ぜんな
崇高なC++にそんなもん混ぜんな
119デフォルトの名無しさん (ワッチョイ 7f81-fNTp)
2017/11/27(月) 23:39:22.69ID:gwom9yQZ0120デフォルトの名無しさん (ワッチョイ 474f-2aMW)
2017/11/28(火) 00:15:26.24ID:MNvbCMHv0 >>111
c++プライマー第5版で解説してる。
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に対してかなり出遅れている感じは否めない。
ここら辺は結果論でしかないが、分からん物だね。
単純にいい言語が繁栄するわけでもないし。
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:VD3vPh0F0128デフォルトの名無しさん (ワッチョイ 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鹿」って言い回しは気に入った。
意識して書いたか分からないけど、ウマくかかってる。
マトモに議論(賛成にしろ反論にしろ)できるほど理解できなかったわ。
自分の読解力というか、多くのプログラミング言語を比較評価できるだけの
知識の欠如が原因で、投稿者を批判するわけじゃないんだが。
ただ一応は読んだ、という証拠を示す意味で一言。
>>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をしてる
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))
}
見直して意味わからんかったので直しました
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 もあり
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は関数だからテンプレート引数は省略できるよ
でも1つしか無かった場合もmapに入れたいのかエラーにしたいのか??
あとmake_pairは関数だからテンプレート引数は省略できるよ
143デフォルトの名無しさん (ワッチョイ 079f-5mWG)
2017/11/28(火) 21:59:35.14ID:S7QzL+/B0144デフォルトの名無しさん (ブーイモ MMcf-N4rA)
2017/11/28(火) 22:39:29.70ID:lP6TeLLOM145デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq)
2017/11/28(火) 22:45:01.20ID:VD3vPh0F0146デフォルトの名無しさん (ワッチョイ 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++の専門家には』オブジェクト指向を」ってのも論理的におかしい。
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++で語る意味はなかったし、
他お手軽系言語が乱立している現在、さらに輪をかけてその必要性がなくなっている。
実際のところは、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教でオブジェクト指向を学ぶのは、邪教というか、
邪オブジェクト指向を学ばされる可能性がかなり高いのでオススメしない。
俺個人は「まず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鹿」にしてるが。
そしてそれは涅槃の境地で解脱しろ、みたいな崇高なものではまったくなく、
「この交差点、信号無いと危なくね?」位の、普通に運転してりゃ分かるだろ、程度の物でしかない。
だからわざわざ解説するほどのことでもないんだが、結果的に、
「オブジェクト指向しろ」と言われる割には解説本がなく、初心者にとってはなんだかよく分からん状況になっている。
そしてお前みたいな馬鹿は「幼稚園で『どこに信号を立てるべきか』きっちり教えるべきだ!
俺は教わっていないから分からない!教えられる先生もいないのか!」
と主張するわけだが、完全にモンペ通り越してキチガイだろ。
オブジェクト指向は幼稚園で教えるべき内容ではないし、教えなくとも自然と理解できる物だし、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:jItlzFQF0159デフォルトの名無しさん (ワッチョイ 47b3-lrN+)
2017/11/29(水) 00:19:11.17ID:gRQoJ5CS0 ttp://nekko1119.hatenablog.com/entry/20120625/1340602468
main関数の最後にあるstringへのキャストでエラーがでるのですがなぜですか。
エラー C2440 '型キャスト': 'Any' から 'std::string' に変換できません。
コンパイラはvc++2017です。
main関数の最後にあるstringへのキャストでエラーがでるのですがなぜですか。
エラー C2440 '型キャスト': 'Any' から 'std::string' に変換できません。
コンパイラはvc++2017です。
160デフォルトの名無しさん (ワッチョイ 079f-5mWG)
2017/11/29(水) 00:22:57.10ID:LrQLLGRZ0161デフォルトの名無しさん (ワッチョイ 7f81-fNTp)
2017/11/29(水) 00:29:49.23ID:+gz4D8Lj0 >>159
(string)をany_cast<std::string>にすれば通りそうだが
(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に対してだけうまくいかない理由はなぜかが知りたいです。
通す方法ではなくてなぜ通らないのかが聞きたいのですが
template<Type>
operator Type()
で暗黙の型変換のオーバーロードを定義しており、
int型やHoge型に対して代入する際にそれが使われているのに
std::stringに対してだけうまくいかない理由はなぜかが知りたいです。
163デフォルトの名無しさん (ワッチョイ 7f81-fNTp)
2017/11/29(水) 00:44:30.01ID:+gz4D8Lj0164デフォルトの名無しさん (ワッチョイ 47b3-lrN+)
2017/11/29(水) 00:45:54.72ID:gRQoJ5CS0165デフォルトの名無しさん (ワッチョイ 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でも通った。
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は通りました。
前者と後者の違いは分からないですが。
(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 など数種類あるキャストの書き方の中から、
キャストの種類を指定してキャストする
君は、入門書を読んでいないだろ
(int)val
普通、こういうキャストの書き方は、しない
static_cast など数種類あるキャストの書き方の中から、
キャストの種類を指定してキャストする
君は、入門書を読んでいないだろ
168デフォルトの名無しさん (ワッチョイ c780-U9VW)
2017/11/29(水) 02:04:04.04ID:qCLwkY6K0 >>143
newの代わりにmalloc使ってるとか思ってるアホ?
今時new使うやつは以下のどれか
* Javaから来たC++初心者
* 化石コンパイラ使わさせられてる可哀想なやつ
* 自身が化石な可哀想なやつ
* パフォーマンスのために用意されてない構造の実装が必要なライブラリ設計者
お前は1番目と3番目の複合型だろうね。
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
理由は分からないです。分かる方がいたら教えてください。
上をやめて、下の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+D0tpd173デフォルトの名無しさん (スプッッ Sdff-T4vC)
2017/11/29(水) 04:50:10.36ID:llo+D0tpd >>147
まさにそれをしようとしてる
そこのロジック的には空文字入れる予定だから必ず2以上になるのだけど
関数分割していて関数としては何が返ってくるか不明なため
問題が起きたときのコードを記載しようとしてる
vectorのsizeが0や1の時にアクセス違反になってしまうからどうやれば回避できるのかなぁと悩んでる
例としてはこんなん
=value
key=value
key=
==value
まさにそれをしようとしてる
そこのロジック的には空文字入れる予定だから必ず2以上になるのだけど
関数分割していて関数としては何が返ってくるか不明なため
問題が起きたときのコードを記載しようとしてる
vectorのsizeが0や1の時にアクセス違反になってしまうからどうやれば回避できるのかなぁと悩んでる
例としてはこんなん
=value
key=value
key=
==value
174デフォルトの名無しさん (スップ Sd7f-cUxe)
2017/11/29(水) 07:52:20.02ID:o9GGe8w4d175デフォルトの名無しさん (ドコグロ MMdb-CDhT)
2017/11/29(水) 08:27:09.91ID:WoWbjmOBM >>173
> key=value
これは正常ケースだよね
> key=
仕様によるけどvalueに空文字入れときゃいいんじゃね?
> =value
> ==value
エラーでしょ?
例外発生させるなり、ログ採ってnullptr返すなりしなよ
そんなものを無理矢理 map に突っ込もうとするのがおかしいと思うぞ
> 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が飛んでくるから
vectorの要素数が不確定の場合はatで取り出せばいいよ、なんかあったらout_of_rangeが飛んでくるから
177デフォルトの名無しさん (スプッッ Sdff-T4vC)
2017/11/29(水) 09:33:07.40ID:llo+D0tpd178デフォルトの名無しさん (ワッチョイ 8746-TjkM)
2017/11/29(水) 10:42:28.73ID:IulhJnoW0 例外投げるかなにかしとけばよいって
ロジック的に要素数2未満はあり得ないし想定してないんでしょ?
余計なことする必要ないって、以降の処理が余計ややこしくなるだけだから
エラー処理が適切
ロジック的に要素数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
それがあってるかどうかだな
よほど条件に自信があれば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
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:WoWbjmOBM189デフォルトの名無しさん (ワッチョイ 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でファイル存在有無チェック→ファイルオープンとしたのだけど
タイミングが一致してないので刹那のタイミングでのファイル焼失を担保できないと言われている
どうすればファイルがなくて開けないのか、ファイルが壊れていて開けないのかを判断できますか
最終的には呼び出しもとで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()の戻り値見ろ
何のために投げてると思ってるんだ
std::ifstreamならstd::ios_base::failureだからcode()の戻り値見ろ
何のために投げてると思ってるんだ
194デフォルトの名無しさん (ワッチョイ 079f-5mWG)
2017/11/29(水) 20:17:29.87ID:LrQLLGRZ0195デフォルトの名無しさん (ワッチョイ 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セクションを実行したら、そいつ以外の処理結果は無効になる
古いデータに基づいて処理した結果ということになるので・・)
どうやったらプログラムを安全に再開するか考えてた
で、至った考えは、ひとまとまりの一連の処理を二つに分割して
まず前半は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周りはかなり暫定的な感じだが・・・
以上日記
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
実際にスレ汚しとるのはお前だけどな
さすがゆとり、これらが役立つ投稿のつもりらしい。
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つは、離れた場所に持つ
同じデータをコピーして、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++は自前で何でもできるから、無意味なほど精神論で速度を追求するわけだが、
そこらへんをサクッと割り切るあいつらのやり方にも学ぶ物はあるぞ。
そもそも自前でトランザクションを実装するとか、検証の手間まで含めたらありえんだろ。
精神論でゴリゴリではなく、上手く手抜きするコツも覚えるべきだ。
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を設けようというアイデアがまずあって
そうすることでついでに例外安全性も確保できるし
ならばキャンセル処理もできますわなぁという巡り合わさった面白い話
DBなど使わなくとも原本を保存しておけば何があっても元に戻せるのだが
そういう話ではないし
どのみち非同期処理にC#よろしくコルーチンが使いたいわけで
ただしそのままでは並行して細切れに処理が走って危険なので
書き込む前にbarrierを設けようというアイデアがまずあって
そうすることでついでに例外安全性も確保できるし
ならばキャンセル処理もできますわなぁという巡り合わさった面白い話
207デフォルトの名無しさん (スップ Sdea-hmNI)
2017/11/30(木) 06:56:30.13ID:XcXaihxMd208デフォルトの名無しさん (ワッチョイ 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++に導入されるだろうし、予習だと思ってやっとけ。
> 巡り合わさった面白い話
まあ俺は単に張り切りすぎだと思うけど、
そういうところを含めて無駄に熱いのが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あたり読んだ?
禿本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;
}
やってることが非同期処理なので多少ややこしいのは本質的に仕方がない
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
なんか無駄に複雑化してるだけに見えるが、、、
> どのみち非同期処理に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でいうパッケージ的なやつ?
それともそれを使うためのパスワード的なやつですか?
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の機能を追加しただけ
複雑っていうけど、元から非同期処理なんか、どう書いたって複雑だろ
>>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 で これを少し改造
<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って、君の意図しているようにドミノ倒し的に回収できるものなのか?
これは俺が仕様を知らないだけではあるが、普通はコルーチンってそういう使い方しないと思うし。
まず、君が書いているんだから君が好きなようにやるべきだし、
実験的な意味合いも含めて色々やること自体はいいと思うが、、、
非同期にしてるのは何故?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もだいぶ筋が悪いとは感じるね。
正直、あれの使いどころは俺もよくわからないんよなぁ
複数のコルーチンが同時並行で走ったら危ないから結局画面をロックせざるを得ないんじゃないかとか
キャンセルを受け付けられるようにするためには例外安全についても考えないとダメなんじゃないかとか
色々思うところは有るが、実はよく知らん
そういう風にコルーチンを実装した
具体的にはコルーチンのメンバにキャンセルフラグを持たせておいて
コルーチンを外部からキャンセルしたいときはそのフラグを立てる・・・だけ
コルーチンがyieldから再開したら真っ先にそのフラグを読みに行って
もし立ってたら自発的に例外を投げてスレッドを巻き戻す
>そのケースなら、普通にマルチスレッドした方がすっきり書けるはず。
あくまでこれは例だからなぁ
上で書いた内容もそうだけど、ひとつコルーチンがシングルスレッドというのがミソになってて
マルチスレッドだと排他処理が非常に面倒なことになる場面でも
コルーチンはシングルスレッドだから問題にならない
ただ、yieldの前と後ろで時間的につながりが無いことが問題になるので
誰かが何かを書き換える前にbarrier()を設けるルールを作って、他のコルーチンを無効にする
非同期処理なんかまともにやったら頭がおかしくなるに違いないので
横断的に静的に管理したいなぁと
今までコルーチンは全然使わなかったし、完全にマルチスレッド脳だったんだが
コルーチンはかなり脳の負担が少なくてよい
自分が動いているときは必ず他人は止まっているという性質が良い
yieldの前後だけ気を付ければ後は完全にシングルスレッドのノリで排他処理が要らない
ただ逆に同期オブジェクトをLockしたままyieldしたら終わるという
>C#のasyncもだいぶ筋が悪いとは感じるね。
正直、あれの使いどころは俺もよくわからないんよなぁ
複数のコルーチンが同時並行で走ったら危ないから結局画面をロックせざるを得ないんじゃないかとか
キャンセルを受け付けられるようにするためには例外安全についても考えないとダメなんじゃないかとか
色々思うところは有るが、実はよく知らん
218デフォルトの名無しさん (ワッチョイ 8abd-17nN)
2017/11/30(木) 23:00:20.60ID:oM5vIjZA0 >>216
async/awaitのしくみはawaitするタスクの完了時に呼ばれるべきコールバック関数登録の糖衣構文にすぎないとかそんな感じ、
ttps://qiita.com/ryosukes/items/db8b45c8ea42f924f02f
(まんまC#の関数で説明したページもあったはずだがどっかいったのでJavaScriptの例↑
で、ネイティブスレッドX上でasync/await呼び出しをいくつ書いても上記コールバック関数は単一スレッドで実行されるので
Xに対して同期的なデータへのアクセスはロック不要
ウィンドーズホンのGUIをぬるぬる動かすのがほぼ唯一の存在意義
async/awaitのしくみはawaitするタスクの完了時に呼ばれるべきコールバック関数登録の糖衣構文にすぎないとかそんな感じ、
ttps://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されるかわからん
しかし真に同時並行ではなく、同期的
この場合A内のawaitに引き続くのコードと、B内のawaitに引き続くコードのは順不同でどっちが先にresumeされるかわからん
しかし真に同時並行ではなく、同期的
221デフォルトの名無しさん (ワッチョイ b5b3-HgL3)
2017/11/30(木) 23:19:09.22ID:AS96YR/U0 ttps://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ではないですよね。。。
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の前後だけ気を付ければ後は完全にシングルスレッドのノリで排他処理が要らない
コルーチンの方がいいケースについてか。
うーん、どうなんだろうなあ?俺もコルーチンはほぼ使ってきてないが、
マルチスレッドする場合にはほぼ干渉しない場合に限っていたから、
逆に言えば、コルーチンを使えばもっと並列化できるということか?
> あくまでこれは例だからなぁ
もしかしてコルーチンを自動的にマルチスレッド展開して加速させる為のラッパを用意してるってことか?
それならまあそのコードの感じになるのかもしれん。
ちなみに言っておくと、俺が普通に実装したら>>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;
}
なんか結果をみても微妙にずれているのですが...
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のことが同時にかたづいて気持ちが悪い
「これを実行して、終わったらこれを実行してね」
っていうときに、スタックの内容がそのまま残ってるからデータの受け渡しが楽というだけだろう
ただ>>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学校に、まで読んだ
今日もA-10学校に、まで読んだ
226デフォルトの名無しさん (スップ Sdea-hmNI)
2017/12/01(金) 11:05:05.82ID:Y7mfb9sId exec execve などいくつかあるけど
こいつらの違いを理解できない
ここの人たちはmanページを読んで理解できるもんなの?
こいつらの違いを理解できない
ここの人たちはmanページを読んで理解できるもんなの?
227デフォルトの名無しさん (ササクッテロラ Spbd-Wo5e)
2017/12/01(金) 11:40:18.96ID:ZhxOnODbp >>223
https://msdn.microsoft.com/ja-jp/library/cc372887.aspx
これを参考にしてみては
右手系の場合はRH、あと行列の扱い方によっては転置が必要だけど
https://msdn.microsoft.com/ja-jp/library/cc372887.aspx
これを参考にしてみては
右手系の場合はRH、あと行列の扱い方によっては転置が必要だけど
228デフォルトの名無しさん (ワッチョイ fa96-JU5h)
2017/12/01(金) 15:52:06.92ID:Xp3BajG00229デフォルトの名無しさん (オッペケ 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のように、非同期を同期的に書くための物自体ではない。ただしそうとも使えるから流用してるが。
それで話を戻すと、君は非同期部分に一般とは逆の「非同期の結果を普通にキャンセルできる構造」を作ろうとしているようだが、
これは何故?或いは何のメリットがあると考えている?
最終的に何をしたいんだ?
俺にはそこが見えない。
一つずつ詰めると、頭三行
> 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
引数が違うだけで、内部的には、どれも同じだろ。
つまり、ラッパー関数
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 大国
日本は、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王国というのは間違いではない。
しかし、それを生かせなかった。
なんでだろ。
日本がLinux王国というのは間違いではない。
しかし、それを生かせなかった。
なんでだろ。
241デフォルトの名無しさん (ワッチョイ 5d78-ToxZ)
2017/12/02(土) 21:06:05.55ID:IxwO1O770 PC98がMSDOSを採用し続けたせい
>>240
PC98 のリソースが freebsd に注がれ、linux への移植が遅れたため
PC98 のリソースが freebsd に注がれ、linux への移植が遅れたため
243デフォルトの名無しさん (ワッチョイ b5b3-9GJZ)
2017/12/02(土) 21:25:07.65ID:TmTI6KJY0 当時書店でBoWとか売ってたけど、そのせいで遅れたような感じはしなかったけどなあ。
むしろLinuxでX11動かすのに四苦八苦してた頃、すでにコンソールで日本語が使えてたのは、
UNIXの人たちのおかげのような気がする。
むしろLinuxでX11動かすのに四苦八苦してた頃、すでにコンソールで日本語が使えてたのは、
UNIXの人たちのおかげのような気がする。
244デフォルトの名無しさん (ワッチョイ b5b3-9GJZ)
2017/12/02(土) 21:38:52.02ID:TmTI6KJY0 検索してみるとコンパックショックが1994年なんだな。
DOS/V機自作したのが1993年だからもうちょっと前かと思ってたけど。
正規流通前にショップが輸入して売ってたんだろか。
DOS/V機自作したのが1993年だからもうちょっと前かと思ってたけど。
正規流通前にショップが輸入して売ってたんだろか。
245デフォルトの名無しさん (ワッチョイ 6680-9RvO)
2017/12/02(土) 22:17:42.90ID:UE7qzU9L0 その当時、漏れは、Windows 3.1 で、UNIX プログラミングやってた。
テキストエディタ MIFES を使っていた
Oracle で、銀行とか、新幹線とか
テキストエディタ MIFES を使っていた
Oracle で、銀行とか、新幹線とか
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
自由にクラスを設計すればいいよ。
デストラクタを仮想クラスを必ず定義しておかなければならないとか、そんな義務はない。
あらかじめ定義しておくと、仕様変更があった時などで、派生クラスで、デストラクタを使いたい時に、基底クラスをいじらずに定義できるだけだよ。
仮に、複数人で、アプリを作ってるなら、基底クラス担当がいたとして、わざわざ基底クラスをいじりますよーとか連絡しないでいいという利点はあるかもな。
もし、基底クラス担当で、他人に基底クラスを触らせたくないなら定義しておいたほうがいい。
基底クラスをいじられて、変なバグとか追加されても困る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されないようにする方が有意義に時間を使えると思うよ。
規格は知らんが問題が発生するコンパイラは存在しないと思う。が、デストラクタで何もしないというのはデータメンバーも含まれるからね。
派生クラスに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()は呼ばれない
}
>派生クラスに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にしか見えないケース」には該当しない
誤: 実体は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にしか見えないケース」には該当しない
誤: 実体はDerivedなのにコンパイラからはBaseにしか見えないケース
正: 実体はDerivedなのにコンパイラからはBaseにしか見えない状態で当該オブジェクトが破棄されるケース
なお、(規格でどういう言葉使いをしているかわ知らんが、)
Derivedが多態性をきちんと実装してあるなら、Derivedは「コンパイラからはBaseにしか見えないケース」には該当しない
258デフォルトの名無しさん (ワッチョイ a580-o8PC)
2017/12/03(日) 09:57:14.66ID:MtUE51Zo0259デフォルトの名無しさん (ワッチョイ 8abd-17nN)
2017/12/03(日) 09:58:13.14ID:lnc2VqP30 大事なことなので2回ry
まあ一般論として、>>255の問題なやつがプログラム内に存在しないことの確実で安価で
ウザく無い検出方法というものはこの世に存在しないので、
継承関係を使うならデストラクタを見たらvirtualにするパブロフの犬に徹するべきではある
まあ一般論として、>>255の問題なやつがプログラム内に存在しないことの確実で安価で
ウザく無い検出方法というものはこの世に存在しないので、
継承関係を使うならデストラクタを見たらvirtualにするパブロフの犬に徹するべきではある
260デフォルトの名無しさん (ワッチョイ b5b3-HgL3)
2017/12/03(日) 10:48:30.75ID:YKcJD0pm0 >delete p; // Base::~Base()は呼ばれるがDerived::~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デストラクタにする
それ以外はしないってルールでいいだろ
ポリモーフィズムを目的とした基底クラスはvirtualデストラクタにする
それ以外はしないってルールでいいだろ
263デフォルトの名無しさん (オッペケ Srbd-MUmZ)
2017/12/03(日) 11:12:49.55ID:TXqrw7wLr264はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph)
2017/12/03(日) 13:16:36.90ID:15ZXM/fw0 >>260
このあたりで話題になったことがある。
https://echo.5ch.net/test/read.cgi/tech/1478440682/651-
結論から言うと不都合は有る。
少なくとも言語仕様上は未定義に踏み込むのでクラッシュしても泣かない強い心を持ち合わせているのでなければやらない方が良い。
このあたりで話題になったことがある。
https://echo.5ch.net/test/read.cgi/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+Iu8p268デフォルトの名無しさん (ワッチョイ 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にしておけば安全」というのはマッチポンプと言えよう
と考えてしまうような無知な者には理解するのは難しい
他人の作ったものも構わずナマポをdeleteしておいて「virtualにしておけば安全」というのはマッチポンプと言えよう
270デフォルトの名無しさん (ワッチョイ eab3-YtI1)
2017/12/03(日) 16:39:32.89ID:pXIsIngK0 正直何を言いたいのかはよくわからん w
まあ>>251みたいな頓珍漢野郎なんだろう...
まあ>>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することが未定義だから
基底クラスのデストラクタは仮想にしないとダメという理解でよろしいでしょうか。
何も仕事をしないデストラクタはあるが、(空のデストラクタかつメンバ変数なし)
基底クラスのデストラクタだけで派生クラスを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
まあそう思ってりゃいいんじゃね? w
276デフォルトの名無しさん (ワッチョイ b5b3-4T5h)
2017/12/03(日) 19:52:12.45ID:bFUfg9md0 もしかして本当に継承使ったPOD型に思い至ってないのか
277デフォルトの名無しさん (ワッチョイ 8abd-17nN)
2017/12/03(日) 19:55:36.14ID:lnc2VqP30278デフォルトの名無しさん (ワッチョイ 5deb-JjO2)
2017/12/03(日) 20:15:25.15ID:mwO2JS4O0 もうここ完全に初心者様質問無しにしろよ
上級者様もそれで満足だろ
上級者様もそれで満足だろ
>>278
それは困ります…
それは困ります…
280デフォルトの名無しさん (ワッチョイ 8abd-17nN)
2017/12/03(日) 20:21:06.32ID:lnc2VqP30 >>278
漏れのように語りたい初心者は一体どうすれば…orz
漏れのように語りたい初心者は一体どうすれば…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の説明を読むと翻訳単位で共通のアドレスになるって書いてあるのだけど仕様が変わった?
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
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 はう。
accelerated c++ をやっている人いませんか?
今やりなおしているけれども、5年ほど前の自分の回答をなくしてしまった…
4章章末練習問題4-6の回答を、よろしければお見せいただけませんか?
この章、EOLine と EOFile を std::cin の eof フラグ 1 個でなんとかしようとしているのが非常にまずいと分かりましたが
逆に教科書掲載のプログラムでうまくいっているのが不思議です…取り組まれた方のコメントをお待ちしています…
普通 getline() をつかうんだろうけれども、なんでこんなに変てこな実装になっているのだろう?
教科書の内容 https://ideone.com/rdtZWG
>>44-45 悪書を薦めてしまいました、ごめんなさい
今やりなおしているけれども、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 拡張メソッドってデコレータパターンで充分なのに、なんで最近の言語には結構ついてんだろ。
>>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 は多大な努力を強いられる教科書ですので、お勧めです、強くなりたい人はどうぞ
私はもう強くなくてもいいから、この本はもういいです…
教科書をお持ちでない人には関係ない話ですみません
>>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:k2OIwnad0297デフォルトの名無しさん (ワッチョイ 3d04-4NBu)
2017/12/04(月) 21:40:55.38ID:gpGY1qga0 ん?
298デフォルトの名無しさん (ワッチョイ 8abd-17nN)
2017/12/04(月) 22:43:49.08ID:5AQkRrK70 >>151
template の話もお願いしていいですか?
型安全を優先するあまりに instantiate(これいい訳がないね) してまで、という思考と void * を許してしまう思考の両方について、比較していただくとうれしいんですけれども
template の話もお願いしていいですか?
型安全を優先するあまりに instantiate(これいい訳がないね) してまで、という思考と void * を許してしまう思考の両方について、比較していただくとうれしいんですけれども
>>168
std::make_shared はあっても unique 版はない、とかなんとか、そこらへんが徹底されていない、とか、確かあったような気が
std::make_shared はあっても unique 版はない、とかなんとか、そこらへんが徹底されていない、とか、確かあったような気が
>>150-152
ファイルのopen/close とか、RAII /デストラクタが Java にもあればなあ、と思っています。
あと、Java の syncronized って、結局、テキトーなダミー変数を mutex 代わりにしちゃう、とかありません?
ファイルのopen/close とか、RAII /デストラクタが Java にもあればなあ、と思っています。
あと、Java の syncronized って、結局、テキトーなダミー変数を mutex 代わりにしちゃう、とかありません?
>>101
>K&Rも「関数ポインタも使えるよ」としか書いて無い。あれはもっと力説されて然るべきだった。
これが本題かな?
いや、関数ポインタってそんなに特筆すべきものだったかな…むしろ setjmp()/longjmp() の方がインパクトが、ってこれはexception として広く採用されていましたっけね
いや、関数ポインタってコールバック(とvtable)は別として、何か使えるネタが他にあるかなって考えてました、今のところ思いつかないな…
>K&Rも「関数ポインタも使えるよ」としか書いて無い。あれはもっと力説されて然るべきだった。
これが本題かな?
いや、関数ポインタってそんなに特筆すべきものだったかな…むしろ setjmp()/longjmp() の方がインパクトが、ってこれはexception として広く採用されていましたっけね
いや、関数ポインタってコールバック(とvtable)は別として、何か使えるネタが他にあるかなって考えてました、今のところ思いつかないな…
>>99
>(instance.method()とstaticMethod(instance)の実行時の違いがほぼ無い、
うーん、Java で、これでもか、これでもか、と this が null でないことをチェックするのを読んだことがあります。
C++ だと(virtual でなければ)普通に this = 0 にして this->method() できちゃうんですが、この this の null チェックって、広く行われているのでしょうか?http://codepad.org/gtEBWFKR
>(instance.method()とstaticMethod(instance)の実行時の違いがほぼ無い、
うーん、Java で、これでもか、これでもか、と this が null でないことをチェックするのを読んだことがあります。
C++ だと(virtual でなければ)普通に this = 0 にして this->method() できちゃうんですが、この this の null チェックって、広く行われているのでしょうか?http://codepad.org/gtEBWFKR
これでおしまい
try〜catch はいいとして、finally って使いにくい、というか使い方がわからないんですが、finally って意味あるんでしょうか?
try〜catch はいいとして、finally って使いにくい、というか使い方がわからないんですが、finally って意味あるんでしょうか?
306デフォルトの名無しさん (オッペケ Srbd-MUmZ)
2017/12/05(火) 12:10:12.56ID:4pWc4df5r > RAII /デストラクタが Java にもあればなあ、と思っています
RAIIは7年前にジャバに入った筈だが
何を言っているのだろうか
RAIIは7年前にジャバに入った筈だが
何を言っているのだろうか
307はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph)
2017/12/05(火) 18:56:58.67ID:+5IMShlD0 >>305
C++ 的にはなるべくデストラクタで後始末がつくようにやれというスタンスっぽい
C++ 的にはなるべくデストラクタで後始末がつくようにやれというスタンスっぽい
308はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph)
2017/12/05(火) 19:00:20.98ID:+5IMShlD0 >>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チェックも意味がある
だから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の中で再スローしてもとにかくリソースを解放したいとか普通にあるでしょ
catchの中で再スローしてもとにかくリソースを解放したいとか普通にあるでしょ
316デフォルトの名無しさん (ドコグロ MM12-YtI1)
2017/12/05(火) 21:07:41.41ID:njWV82p8M317デフォルトの名無しさん (ワッチョイ 398a-RK4k)
2017/12/05(火) 23:32:01.27ID:U9JLSPtA0 >>315
RAIIを徹底すればそんな危なっかしいことは不要
RAIIを徹底すればそんな危なっかしいことは不要
318デフォルトの名無しさん (ワッチョイ 36fb-MUmZ)
2017/12/05(火) 23:35:55.54ID:+TIDOo7u0319デフォルトの名無しさん (ワッチョイ 398a-RK4k)
2017/12/05(火) 23:52:38.14ID:U9JLSPtA0 >>300
std::make_uniqueがあるだろうが(C++14)
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があれば便利と思うんですけど。今あるか知りませんが
どうなんでしょ?今後の仕様も導入予定なし?
おやすみなさい
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:K0RLdWNW0325はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph)
2017/12/06(水) 02:05:35.10ID:s33DVBsR0 一応 >>324 を解説しておくと、 this が真のときはもちろん真だし、
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への代入があったんだけどね
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
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
}
};
確かにそのようで
ご指摘どうも
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にしか思えない。
何かで「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入れるんだ
そもそもなんで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:yhpve1PE0343デフォルトの名無しさん (ワッチョイ 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を指定するとエラーになるけど
の割にはnullptrを指定するとエラーになるけど
348はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-StTJ)
2017/12/07(木) 02:43:01.31ID:vxJqQn/b0 文脈依存キーワードを導入しちゃったからな。
pure も有りといえば有りな気はしないでもない。
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 でないと思ってるお前が不憫だよ...
この話の流れで virtual pure function でないと思ってるお前が不憫だよ...
352デフォルトの名無しさん (ワッチョイ 9fbd-aiou)
2017/12/07(木) 22:05:02.33ID:lJwR2NaH0 =0は最初ボーランドが勝手に実装した、とどこかで読んだが
じゃあ=0より前のC++には純粋仮想関数は無かったのやろうか…
じゃあ=0より前のC++には純粋仮想関数は無かったのやろうか…
353デフォルトの名無しさん (ワッチョイ 9fbd-aiou)
2017/12/07(木) 22:43:46.61ID:lJwR2NaH0 ていうか
class Foo {
public:
void someMethod() { }
};
と書くしかなかったものが
class Foo {
public:
void someMethod() = 0;
};
になったのだとしたら
文字数的にもバランスがとれた良い追加構文
class Foo {
public:
void someMethod() { }
};
と書くしかなかったものが
class Foo {
public:
void someMethod() = 0;
};
になったのだとしたら
文字数的にもバランスがとれた良い追加構文
354デフォルトの名無しさん (ワッチョイ ff6e-5CBX)
2017/12/08(金) 07:14:19.07ID:zfye+4U00355デフォルトの名無しさん (ワッチョイ bf8a-ufcO)
2017/12/08(金) 08:40:57.49ID:t5VCrWbM0 ダダこねるな
356デフォルトの名無しさん (スップ Sd3f-jN+0)
2017/12/08(金) 10:07:38.22ID:Z3siquAKd publicが嫌ならstructで宣言しろよ
357デフォルトの名無しさん (ササクッテロル Sp8b-AVOn)
2017/12/08(金) 10:07:41.82ID:2Zvn0bTbp >>351
pure virtualだろ?virtual pureってなんだよ
pure virtualだろ?virtual pureってなんだよ
358デフォルトの名無しさん (ワッチョイ 9f34-Xhpf)
2017/12/08(金) 10:10:30.07ID:vOIFbJvh0 ピュアトゥインクル!
359デフォルトの名無しさん (ドコグロ MMdf-45bT)
2017/12/08(金) 13:00:32.45ID:PXTxgSdcM >>357
すまん、そんなアホなところにまで突っ込まないとダメなほど必死だとは思わなかったよ w
すまん、そんなアホなところにまで突っ込まないとダメなほど必死だとは思わなかったよ w
360357 (ワッチョイ 57b3-wJM8)
2017/12/08(金) 18:17:55.92ID:eC9D+0x50 必死なのはお前だろ
誰と同一人物だと思ったんだw
俺この話に参加したの初めてだぞ
誰と同一人物だと思ったんだw
俺この話に参加したの初めてだぞ
361デフォルトの名無しさん (ワッチョイ 57b3-wJM8)
2017/12/08(金) 18:29:46.65ID:eC9D+0x50362デフォルトの名無しさん (ワッチョイ 9f72-QvkH)
2017/12/08(金) 20:49:15.62ID:oKg6KkSA0 質問があります。
コンパイラはMicrosoft(R) C/C++ Optimizing Compiler Version 19.12.25830.2 for x86
class A {
public:
explicit A( void ) {}
};
struct B {
A a;
};
int
main( int, char ** )
{
B b;
B b2( {} );
B b3 = {};
B b4{};
return 0;
}
上記のソースをオプション/std:c++latestを付けるとエラー、つけないとエラー無しになります。
対処だけだったらAのコンストラクタからexplicitを取れば良いのですが、
何故エラーになるのかがイマイチ理解できていません。
C++17の波括弧初期化の型推論の新規則あたりがそれっぽいですがその辺を読んでも理解できていません。
(そもそも引数無しのコンストラクタにexplicitを何故付けるのかって突っ込まれそう)
コンパイラはMicrosoft(R) C/C++ Optimizing Compiler Version 19.12.25830.2 for x86
class A {
public:
explicit A( void ) {}
};
struct B {
A a;
};
int
main( int, char ** )
{
B b;
B b2( {} );
B b3 = {};
B b4{};
return 0;
}
上記のソースをオプション/std:c++latestを付けるとエラー、つけないとエラー無しになります。
対処だけだったらAのコンストラクタからexplicitを取れば良いのですが、
何故エラーになるのかがイマイチ理解できていません。
C++17の波括弧初期化の型推論の新規則あたりがそれっぽいですがその辺を読んでも理解できていません。
(そもそも引数無しのコンストラクタにexplicitを何故付けるのかって突っ込まれそう)
363デフォルトの名無しさん (スップ Sd3f-Hl5D)
2017/12/08(金) 21:05:07.58ID:5s0/Hyw7d 今時なんで32ビットなんて使うんだろ?
364デフォルトの名無しさん (ワッチョイ bf8a-ufcO)
2017/12/08(金) 21:19:10.75ID:t5VCrWbM0 >>362
エラーメッセージ読めねーのか?
エラーメッセージ読めねーのか?
365デフォルトの名無しさん (ワッチョイ 9fb3-Hxc3)
2017/12/08(金) 21:25:34.24ID:2vsjK8u+0 ベイトレのatomが32bitという負債
366320 (ワッチョイ b7e3-qmOZ)
2017/12/08(金) 23:32:07.03ID:uQLcRAb10 前にgetter/setterプロパティ書いた者だす
getter/setterは有効な回答得られず
03→17/20でも、例えば
int& Status() { return m_status; }
const int& Status() { return m_status; } const
の二重定義必要?
おやすみなさい
getter/setterは有効な回答得られず
03→17/20でも、例えば
int& Status() { return m_status; }
const int& Status() { return m_status; } const
の二重定義必要?
おやすみなさい
367デフォルトの名無しさん (ワッチョイ bfe7-F7Qh)
2017/12/08(金) 23:52:39.34ID:IFoyYnlC0 そんな糞みたいなgetter書くくらいならpublic変数にしたほうがまし
368デフォルトの名無しさん (ワッチョイ 9fb3-45bT)
2017/12/09(土) 00:00:04.12ID:jyWlwvil0369デフォルトの名無しさん (ワッチョイ 9f34-Xhpf)
2017/12/09(土) 00:06:55.18ID:CGhksCFV0 プロパティー使いたいならエンバカ
370デフォルトの名無しさん (ワッチョイ ff81-WAMQ)
2017/12/09(土) 00:30:19.70ID:/OGT/7c/0 そもそもプロパティをそのまま露出すんなって
371デフォルトの名無しさん (ワッチョイ 5778-T1Xs)
2017/12/09(土) 00:37:11.06ID:t6DuUCjM0 hage.sizeof みたいな書き方があってもいいけど、別になくてもいいからな
話は上がっているんだろうけど、優先順位はかなり低いと思うね
話は上がっているんだろうけど、優先順位はかなり低いと思うね
372デフォルトの名無しさん (ワッチョイ 5704-IpD3)
2017/12/09(土) 00:48:53.78ID:/xTkL2Yo0373デフォルトの名無しさん (ワッチョイ 57b3-wlc6)
2017/12/09(土) 02:05:41.93ID:X5cpE3G30374デフォルトの名無しさん (ワッチョイ 9fb3-45bT)
2017/12/09(土) 08:40:17.40ID:jyWlwvil0 夜中まで粘着 w
375デフォルトの名無しさん (ワッチョイ 9fbd-aiou)
2017/12/09(土) 11:10:57.47ID:VQtjhM8H0376デフォルトの名無しさん (ワッチョイ 9fbd-aiou)
2017/12/09(土) 11:13:16.09ID:VQtjhM8H0377デフォルトの名無しさん (ワッチョイ ff56-Nf6k)
2017/12/09(土) 12:28:24.94ID:IHtyR51x0378デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/09(土) 13:28:08.16ID:xT8UfS000379デフォルトの名無しさん (ワッチョイ bf8a-ufcO)
2017/12/09(土) 13:40:30.88ID:JczXMZr10 ここでgetter/setter言ってるのは例外なくどうしようもない低能だから無視してあげて下さい
380片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-n3/l)
2017/12/09(土) 14:04:38.96ID:Mc+Fg8lHd int mydata() const; // getter
void mydata(int data); // setter
こういう感じの下駄瀬田は道南?
void mydata(int data); // setter
こういう感じの下駄瀬田は道南?
381デフォルトの名無しさん (ワッチョイ 9fbd-aiou)
2017/12/09(土) 14:29:29.91ID:VQtjhM8H0 >>366のgetterの&を見落としていたorz
m_dataへのmutableなポインタを返すのではm_dataのgetterとは言えぬ
m_dataへのmutableなポインタを返すのではm_dataのgetterとは言えぬ
382デフォルトの名無しさん (ワッチョイ bfe7-F7Qh)
2017/12/09(土) 16:16:46.64ID:85CJr7Ot0 メンバ変数hogeにgetHoge,setHogeなんて名前の下駄雪駄を
機械的に作ろうとしてる事自体が間違いの可能性を考えろ
class Window
{
int width, height;
...
//まちがい
int getWidth() const;
int getHeight() const;
void setWidth(int w);
void setHeight(int h);
//せいかい
Size getCurrentFrameSize() const;
void resize(int width, int height);
};
機械的に作ろうとしてる事自体が間違いの可能性を考えろ
class Window
{
int width, height;
...
//まちがい
int getWidth() const;
int getHeight() const;
void setWidth(int w);
void setHeight(int h);
//せいかい
Size getCurrentFrameSize() const;
void resize(int width, int height);
};
383デフォルトの名無しさん (ワッチョイ bf9f-wlc6)
2017/12/09(土) 16:31:11.01ID:eDExTF/q0384デフォルトの名無しさん (ワッチョイ bfe7-F7Qh)
2017/12/09(土) 16:38:09.40ID:85CJr7Ot0 クラス内部状態の変更は意味のある操作単位として外部に公開すべきであって
むやみに内部の変数を下駄雪駄として露出すんなっていうつもりだったんだが難しかったかな?
むやみに内部の変数を下駄雪駄として露出すんなっていうつもりだったんだが難しかったかな?
385デフォルトの名無しさん (ワッチョイ bf9f-wlc6)
2017/12/09(土) 16:56:33.96ID:eDExTF/q0 >>384
そんな分かりきったことを議論することではないだろ。
C++の規格が新しくなってsetter/getterは従来道理なの?が質問。
set/getするときは、直の変数の読み書きの代用だけではななく、何かの処理をしたりして公開/制限付き公開するものじゃねーの?
そんな分かりきったことを議論することではないだろ。
C++の規格が新しくなってsetter/getterは従来道理なの?が質問。
set/getするときは、直の変数の読み書きの代用だけではななく、何かの処理をしたりして公開/制限付き公開するものじゃねーの?
386デフォルトの名無しさん (ドコグロ MMdf-45bT)
2017/12/09(土) 17:16:31.79ID:rvn5Lgi+M387デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/09(土) 17:25:01.50ID:xT8UfS000388デフォルトの名無しさん (スプッッ Sd3f-q8ec)
2017/12/09(土) 18:54:12.14ID:WISiBPL1d 昔どっかで下駄雪駄をクラスにして公開する方法が書いてあったな。
面白そうだったけと使おうとした事はなかった。
面白そうだったけと使おうとした事はなかった。
389デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/09(土) 19:16:55.95ID:xT8UfS000 単にデータメンバー指定したらgetter setter相当のメンバー関数を自動生成するような機能が欲しいというなら他のやつが言うように思考停止したバカしか欲しがらない機能
EなんとかとかいうIDEには付いてるらしいが
EなんとかとかいうIDEには付いてるらしいが
390デフォルトの名無しさん (ワッチョイ 17b3-G2/9)
2017/12/09(土) 20:17:03.24ID:FTIoFrRr0 理想はわかるけど、ある程度の規模のコードを書けば何だかんだでsetter/getterはけっこう書くだろ
391デフォルトの名無しさん (ワントンキン MM7f-WAMQ)
2017/12/09(土) 20:17:55.36ID:qp4HeFcwM .netのPropertyは実際のオブジェクトがバッキングフィールドってとこに完全隠蔽されることがメリット
C++では自動実装は不可能、同じ効果を得るならばpimplパターンでオブジェクトを隠蔽は可というのが答えではないだろうか
C++では自動実装は不可能、同じ効果を得るならばpimplパターンでオブジェクトを隠蔽は可というのが答えではないだろうか
392デフォルトの名無しさん (ワントンキン MM7f-WAMQ)
2017/12/09(土) 20:18:50.11ID:qp4HeFcwM >>390
getterはともかくsetterは書かない
getterはともかくsetterは書かない
393デフォルトの名無しさん (ワッチョイ 9fbd-aiou)
2017/12/09(土) 20:26:30.08ID:VQtjhM8H0 setter/getter批判論者は何を批判しているのかいまいちわからん…
class SomeWidget { // GUIのパーツか何か
Color m_FgColor; // 前景色
Color m_BgColor; // 背景色
...
};
とゆークラスがあったとして、
void SomeWidget::setFgColor(Color color) { m_FgColor = color; }
void SomeWidget::setBgColor(Color color) { m_BgColor = color; }
というのはsetterだからダメで、意味的にまとまりのある
void SomeWidget::setColor(Color fgColor, Color bgColor) { m_FgColor = color; m_BgColor = color; }
とかにしないとダメだとかそーいう主張?
スゲーいらんお世話な気が…
class SomeWidget { // GUIのパーツか何か
Color m_FgColor; // 前景色
Color m_BgColor; // 背景色
...
};
とゆークラスがあったとして、
void SomeWidget::setFgColor(Color color) { m_FgColor = color; }
void SomeWidget::setBgColor(Color color) { m_BgColor = color; }
というのはsetterだからダメで、意味的にまとまりのある
void SomeWidget::setColor(Color fgColor, Color bgColor) { m_FgColor = color; m_BgColor = color; }
とかにしないとダメだとかそーいう主張?
スゲーいらんお世話な気が…
394デフォルトの名無しさん (ワッチョイ 57b3-wlc6)
2017/12/09(土) 20:43:02.98ID:X5cpE3G30 setter/getter自体を批判してんじゃなくて
自動生成をC++に求めるのを間違いだと言ってるだけだと思うが
自動生成をC++に求めるのを間違いだと言ってるだけだと思うが
395デフォルトの名無しさん (ワッチョイ 9fb3-45bT)
2017/12/09(土) 21:05:37.85ID:jyWlwvil0 >>393
> void SomeWidget::setColor(Color fgColor, Color bgColor) { m_FgColor = color; m_BgColor = color; }
> とかにしないとダメ
それを意味的にまとまりがあると考えるお前がおかしい
だからそんな頓珍漢なレスになるんだよ
> void SomeWidget::setColor(Color fgColor, Color bgColor) { m_FgColor = color; m_BgColor = color; }
> とかにしないとダメ
それを意味的にまとまりがあると考えるお前がおかしい
だからそんな頓珍漢なレスになるんだよ
396デフォルトの名無しさん (ワッチョイ bfe7-F7Qh)
2017/12/09(土) 21:10:02.77ID:85CJr7Ot0 クラスにメンバーがいっぱい→それぞれの下駄雪駄をいっぱい作らなきゃ!→楽な書き方ないの?
っていう発想から抜け出せてないんだろうけど
この最初の矢印がそもそも間違いだって言ってんだよ
まずはどんな操作をpublicで公開すべきなのかちゃんと設計しろ、話はそれからだ
結果的にただのgetterとsetterとして実装されるものはもちろんあるだろうし、それが悪いわけじゃないけど、
そんなのが自動生成しなきゃ追いつかないほど大量に出てくるようなら一回設計を疑うべきだ
っていう発想から抜け出せてないんだろうけど
この最初の矢印がそもそも間違いだって言ってんだよ
まずはどんな操作をpublicで公開すべきなのかちゃんと設計しろ、話はそれからだ
結果的にただのgetterとsetterとして実装されるものはもちろんあるだろうし、それが悪いわけじゃないけど、
そんなのが自動生成しなきゃ追いつかないほど大量に出てくるようなら一回設計を疑うべきだ
397デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/09(土) 21:10:22.08ID:xT8UfS000 内部のデータメンバーからインターフェースを作るのではなく、インターフェースから内部実装を書くという当たり前の事を言ってるだけ。
398デフォルトの名無しさん (ブーイモ MMbb-fHNr)
2017/12/09(土) 21:14:57.20ID:Z61PcTBCM >>392
あんたすげーな
あんたすげーな
399デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/09(土) 21:17:58.04ID:xT8UfS000 これC++に限った話じゃないからね。これが理解出来ないようだったら自分のソフトウェアの設計能力はとてつもなく低いと自覚した方がいい
400デフォルトの名無しさん (ワッチョイ ff81-WAMQ)
2017/12/09(土) 23:03:23.79ID:/OGT/7c/0 >>393
なんでコンストラクタで初期化しないの?
なんでコンストラクタで初期化しないの?
401320酔っ払い (ワッチョイ b7e3-qmOZ)
2017/12/09(土) 23:18:04.72ID:2CXK8lIl0402デフォルトの名無しさん (ワッチョイ 5704-IpD3)
2017/12/09(土) 23:20:31.63ID:/xTkL2Yo0403デフォルトの名無しさん (ワッチョイ 579f-F7Qh)
2017/12/09(土) 23:21:13.23ID:as7dcCOb0 >>401
VC++になら最初からpropertyはあるし使えるが。
VC++になら最初からpropertyはあるし使えるが。
404デフォルトの名無しさん (ワッチョイ 9fbd-aiou)
2017/12/09(土) 23:23:36.06ID:VQtjhM8H0 >>400
mutableなオブジェクトとして書きたい(ときもある)から
mutableなオブジェクトとして書きたい(ときもある)から
405デフォルトの名無しさん (ワッチョイ 5704-IpD3)
2017/12/09(土) 23:26:04.82ID:/xTkL2Yo0 >>403
それ、独自拡張かなんかでしょ?
それ、独自拡張かなんかでしょ?
406デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ)
2017/12/09(土) 23:27:21.61ID:fRg177Ch0 プロパティ厨しつこい
C#使ってろよ
public変数使う言い訳探してんじゃねえよ
C#使ってろよ
public変数使う言い訳探してんじゃねえよ
407デフォルトの名無しさん (ワッチョイ 579f-F7Qh)
2017/12/09(土) 23:30:23.37ID:as7dcCOb0 >>405
もち
もち
408320 (ワッチョイ b7e3-qmOZ)
2017/12/09(土) 23:30:53.06ID:2CXK8lIl0409デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ)
2017/12/09(土) 23:34:15.72ID:fRg177Ch0 間違いが広がっては困るから一応言っておくけど
>>403が言っているのはC++とは全く互換性のないC++/CLIのことな
>>403が言っているのはC++とは全く互換性のないC++/CLIのことな
410デフォルトの名無しさん (ワッチョイ 9fbd-aiou)
2017/12/09(土) 23:35:31.46ID:VQtjhM8H0 >>409
ウィンドーズホン御用達言語のC++CXにもあるわ;
ウィンドーズホン御用達言語のC++CXにもあるわ;
411デフォルトの名無しさん (ワッチョイ 579f-F7Qh)
2017/12/09(土) 23:42:11.37ID:as7dcCOb0 >>408
覚えるも糞もあるかよ。C#のがそのままだよ。
というか、C#≒.NET≒VC++だから、C#の機能はVC++/CLIでは大概ほぼ使えるはずだが。
https://msdn.microsoft.com/ja-jp/library/2f1ec0b1.aspx
なお死ねには同意。
C#が良ければC#を使えばいいだけ、C#ライクなC++が欲しいならVC++/CLIを使えばいいだけ。
覚えるも糞もあるかよ。C#のがそのままだよ。
というか、C#≒.NET≒VC++だから、C#の機能はVC++/CLIでは大概ほぼ使えるはずだが。
https://msdn.microsoft.com/ja-jp/library/2f1ec0b1.aspx
なお死ねには同意。
C#が良ければC#を使えばいいだけ、C#ライクなC++が欲しいならVC++/CLIを使えばいいだけ。
412デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/09(土) 23:43:07.64ID:xT8UfS000 >>410
お前死んだやろ…
お前死んだやろ…
413デフォルトの名無しさん (スププ Sdbf-dpgO)
2017/12/09(土) 23:47:47.55ID:UFGZ9ZWld >>406
一時期流行ってたprivate厨さんちーす
一時期流行ってたprivate厨さんちーす
414デフォルトの名無しさん (ワッチョイ 9fbd-aiou)
2017/12/09(土) 23:48:58.02ID:VQtjhM8H0 >>412
ウィンドーズホンでネイティブC++を呼び出すための唯一の手段なので死んではいないハズ…
ttps://docs.microsoft.com/ja-jp/windows/uwp/winrt-components/creating-windows-runtime-components-in-cpp
ウィンドーズホンでネイティブC++を呼び出すための唯一の手段なので死んではいないハズ…
ttps://docs.microsoft.com/ja-jp/windows/uwp/winrt-components/creating-windows-runtime-components-in-cpp
415デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ)
2017/12/10(日) 00:02:10.31ID:dss2es1x0 C++/CLIのことをVC++っていうのやめろよ
それにC++風ですらないし
それにC++風ですらないし
416デフォルトの名無しさん (ワッチョイ ffe9-+LjN)
2017/12/10(日) 00:11:55.72ID:MJKB1Uts0 それは.netへの過渡期中の言語ですね
417デフォルトの名無しさん (ワッチョイ 579f-F7Qh)
2017/12/10(日) 00:13:30.39ID:Rt5tAWZZ0418デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ)
2017/12/10(日) 00:25:29.55ID:dss2es1x0419デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/10(日) 00:27:56.18ID:Earl4FxN0420デフォルトの名無しさん (ワッチョイ 579f-F7Qh)
2017/12/10(日) 00:52:59.90ID:Rt5tAWZZ0 >>418
なるほど君は知らないんだな。VC++/CLIは混ぜられるんだよ。
君が言っているのはmanagedで、俺が言っているのはunmanaged。
まあ、どうせ君は使わないのだろうし、深く知る必要はないが。
なるほど君は知らないんだな。VC++/CLIは混ぜられるんだよ。
君が言っているのはmanagedで、俺が言っているのはunmanaged。
まあ、どうせ君は使わないのだろうし、深く知る必要はないが。
421デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ)
2017/12/10(日) 00:58:12.05ID:dss2es1x0 ID:Rt5tAWZZ0 こいつ話噛み合わなさすぎてやべえぞ
422デフォルトの名無しさん (ワッチョイ bfe7-F7Qh)
2017/12/10(日) 06:32:52.80ID:dE7pgqu30 >>401
protectedこそちゃんと設計しないとメタメタになるだろうが
publicもprotectedもコードの利用者が自由に使えることには変わらんから公開インターフェースには変わらんぞ
お前もしかして「protectedだしメンバ全部下駄雪駄付けて継承先に丸出しするおー(^q^)」ってやってんの?
誰がどんな派生クラス作ってどんなふうにいじくって親クラスのふりして混入させてくるかわからないのに?
世界に発信しないからどうでもいいって?同僚や1年後の自分はたまったもんじゃねえな
protectedこそちゃんと設計しないとメタメタになるだろうが
publicもprotectedもコードの利用者が自由に使えることには変わらんから公開インターフェースには変わらんぞ
お前もしかして「protectedだしメンバ全部下駄雪駄付けて継承先に丸出しするおー(^q^)」ってやってんの?
誰がどんな派生クラス作ってどんなふうにいじくって親クラスのふりして混入させてくるかわからないのに?
世界に発信しないからどうでもいいって?同僚や1年後の自分はたまったもんじゃねえな
423デフォルトの名無しさん (ワッチョイ ff81-WAMQ)
2017/12/10(日) 09:34:29.32ID:H4MY5dOm0 >>404
死んでどうぞ
死んでどうぞ
424デフォルトの名無しさん (ワッチョイ 9fbd-aiou)
2017/12/10(日) 10:23:51.33ID:jGY33Ae80425デフォルトの名無しさん (ワッチョイ ff81-WAMQ)
2017/12/10(日) 11:12:25.71ID:H4MY5dOm0426デフォルトの名無しさん (ワッチョイ 9fbd-aiou)
2017/12/10(日) 12:09:09.67ID:jGY33Ae80427デフォルトの名無しさん (ワッチョイ bfe7-F7Qh)
2017/12/10(日) 12:12:47.79ID:dE7pgqu30 背景色が暗かったら前景色を明るくして見やすくするとかそういう制御はしないのか?
最初はしないつもりでも後から必要になったりリクエストが来たりしたらどうするんだ?
前景背景以外の第3の色のパーツが増えたらどうする?
アルファチャンネルが増えて半透明時はその裏側の色にも合わせて制御する必要が出てきたらどうする?
インターフェースってのは中のデータメンバーの下駄と雪駄とかそんなレベルで決めるもんじゃないんだよ
お前の言ってることは次元が低すぎるんだよ
最初はしないつもりでも後から必要になったりリクエストが来たりしたらどうするんだ?
前景背景以外の第3の色のパーツが増えたらどうする?
アルファチャンネルが増えて半透明時はその裏側の色にも合わせて制御する必要が出てきたらどうする?
インターフェースってのは中のデータメンバーの下駄と雪駄とかそんなレベルで決めるもんじゃないんだよ
お前の言ってることは次元が低すぎるんだよ
428デフォルトの名無しさん (ワッチョイ bfe7-F7Qh)
2017/12/10(日) 12:17:16.01ID:dE7pgqu30 >>426
前景色をいつでも外部から独立に変えて良いオブジェクトならそれで構わないけど
それをforeColorメンバ変数があってそのsetterだから〜みたいな程度の低い議論で決めたんだとしたら
後で大変な苦労をすることになるだろうな
今のお前はしなくてもお前の同僚やユーザーや1年後のお前がな
前景色をいつでも外部から独立に変えて良いオブジェクトならそれで構わないけど
それをforeColorメンバ変数があってそのsetterだから〜みたいな程度の低い議論で決めたんだとしたら
後で大変な苦労をすることになるだろうな
今のお前はしなくてもお前の同僚やユーザーや1年後のお前がな
429デフォルトの名無しさん (ワッチョイ 9fbd-aiou)
2017/12/10(日) 12:22:05.28ID:jGY33Ae80430デフォルトの名無しさん (ワッチョイ bfe7-F7Qh)
2017/12/10(日) 12:28:25.79ID:dE7pgqu30 どういう設計にするかって話じゃなくて
設計を決めるのに最初からデータメンバーと下駄雪駄ありきで考えるのをやめろって言ってるんだが
何一つ伝わってないようで残念だ
設計を決めるのに最初からデータメンバーと下駄雪駄ありきで考えるのをやめろって言ってるんだが
何一つ伝わってないようで残念だ
431デフォルトの名無しさん (ワッチョイ 9fbd-aiou)
2017/12/10(日) 12:35:10.91ID:jGY33Ae80432デフォルトの名無しさん (ワッチョイ bfe7-F7Qh)
2017/12/10(日) 13:12:04.65ID:dE7pgqu30 427は例えば前景背景色を変えるインターフェースを作るときに考慮しなきゃならなそうな事のほんの一例を挙げただけで
詳細設計しろなんて誰も言ってないんだが
最初に考慮すべきことはそもそも何を実現するつもりなのか、そのためにどういう操作を受け付けなきゃならないかであって、
privateのデータメンバーにbgColorがあるとかはどうでもいいし、必要ならそんなもの後から変えたっていいんだよ
それをデータメンバーありきで脳死で下駄雪駄付けてたら、そのメンバーの存在が公開外部仕様になって簡単に変えられなくなるんだよ
お前さんの例で言うと、不用意にsetFgColor()とsetBgColor()を公開したら、ずっとその2つを外部から独立に自由に変えられるようにしなきゃならなくなるの
本当にそうするべきなのかは、それこそオブジェクトの本来の目的次第で判断することでしょ?
「とにかくデータメンバーにbgColorとfgColorがあるんだからひつようなんです(^q^)」とか抜かしてたらバカで無能だと思うだろ?
お前さんは今そう見られてるんだよ
詳細設計しろなんて誰も言ってないんだが
最初に考慮すべきことはそもそも何を実現するつもりなのか、そのためにどういう操作を受け付けなきゃならないかであって、
privateのデータメンバーにbgColorがあるとかはどうでもいいし、必要ならそんなもの後から変えたっていいんだよ
それをデータメンバーありきで脳死で下駄雪駄付けてたら、そのメンバーの存在が公開外部仕様になって簡単に変えられなくなるんだよ
お前さんの例で言うと、不用意にsetFgColor()とsetBgColor()を公開したら、ずっとその2つを外部から独立に自由に変えられるようにしなきゃならなくなるの
本当にそうするべきなのかは、それこそオブジェクトの本来の目的次第で判断することでしょ?
「とにかくデータメンバーにbgColorとfgColorがあるんだからひつようなんです(^q^)」とか抜かしてたらバカで無能だと思うだろ?
お前さんは今そう見られてるんだよ
433デフォルトの名無しさん (ワントンキン MM7f-WAMQ)
2017/12/10(日) 14:15:05.98ID:g5uppkbRM buttonならselectedとかdeselectとか、たぶんそんなインターフェース。
color露出とか正気の沙汰ではない。
color露出とか正気の沙汰ではない。
434デフォルトの名無しさん (ブーイモ MMcf-fHNr)
2017/12/10(日) 15:16:20.19ID:F4es0CSwM setColor()なんてグラフィックコンテキストのIFならありがちだけどな。
435デフォルトの名無しさん (ワントンキン MM7f-WAMQ)
2017/12/10(日) 15:18:46.15ID:g5uppkbRM 世の中のたくさんの組織で使われたりするような汎用ライブラリならね
436デフォルトの名無しさん (ドコグロ MMdf-45bT)
2017/12/10(日) 15:25:40.37ID:NqbakoNJM437デフォルトの名無しさん (ワッチョイ 178a-ufcO)
2017/12/10(日) 15:48:26.65ID:wfBy9YeJ0 別にset〜Colorなんて普通にありだろ
変なふうに頭固いやついるね
変なふうに頭固いやついるね
438デフォルトの名無しさん (ワントンキン MM7f-WAMQ)
2017/12/10(日) 16:44:14.11ID:g5uppkbRM 正直GUI系は納期に晒されやすいということもあってコードが汚くなりがちではある
それが劣っているとか優れてるとかではなく気の毒ではある
それが劣っているとか優れてるとかではなく気の毒ではある
439デフォルトの名無しさん (ワッチョイ 9fb3-45bT)
2017/12/10(日) 18:11:24.37ID:o/NiMYKz0440デフォルトの名無しさん (ワッチョイ 9fbd-aiou)
2017/12/10(日) 18:26:16.47ID:jGY33Ae80 >>432
>最初に考慮すべきことはそもそも何を実現するつもりなのか、そのためにどういう操作を受け付けなきゃならないかであって、
いやまさしくおっしゃるとおりで、
グラフィック部品のforeground colorとbackground colorは通常の表示ハードウェアの元では独立に変えられるブツなのだから
ハードウェア寄りなwrapperレベルの実装だとそれぞれ独立に露出するのが正しいという結論に…
(独立に弄っても内部状態の不整合は起きない。これがgetter/setterを公開してもよい基準である
>お前さんの例で言うと、不用意にsetFgColor()とsetBgColor()を公開したら、ずっとその2つを外部から独立に自由に変えられるようにしなきゃならなくなるの
ならない
階層設計の意味がわかっていない?
漏れのやり方で起きることは、Foreground colorとbackground colorの2つを公開したクラスXのインスタンスをいつでも作れるというだけで、
上位水準で要求される操作のみを受け付けるべくXを利用して実現するクラスYではsetFgColor()とsetBgColor()を隠蔽することができる。
(単にYが使うXのインスタンスをprivateにすれば良い
ていうか話を進める前にID:dE7pgqu30には>>426の2行目にお答えいただいてからにしていただきたいですのう…
(>>400の話が途中から変わっていることには目をつぶって差し上げても良いので
>最初に考慮すべきことはそもそも何を実現するつもりなのか、そのためにどういう操作を受け付けなきゃならないかであって、
いやまさしくおっしゃるとおりで、
グラフィック部品のforeground colorとbackground colorは通常の表示ハードウェアの元では独立に変えられるブツなのだから
ハードウェア寄りなwrapperレベルの実装だとそれぞれ独立に露出するのが正しいという結論に…
(独立に弄っても内部状態の不整合は起きない。これがgetter/setterを公開してもよい基準である
>お前さんの例で言うと、不用意にsetFgColor()とsetBgColor()を公開したら、ずっとその2つを外部から独立に自由に変えられるようにしなきゃならなくなるの
ならない
階層設計の意味がわかっていない?
漏れのやり方で起きることは、Foreground colorとbackground colorの2つを公開したクラスXのインスタンスをいつでも作れるというだけで、
上位水準で要求される操作のみを受け付けるべくXを利用して実現するクラスYではsetFgColor()とsetBgColor()を隠蔽することができる。
(単にYが使うXのインスタンスをprivateにすれば良い
ていうか話を進める前にID:dE7pgqu30には>>426の2行目にお答えいただいてからにしていただきたいですのう…
(>>400の話が途中から変わっていることには目をつぶって差し上げても良いので
441デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ)
2017/12/10(日) 21:00:01.55ID:dss2es1x0 そもそもセッターゲッター書きまくらなきゃいけなくなるんだけどどうすればいいの?っていう話では
442デフォルトの名無しさん (ワッチョイ 9f34-Xhpf)
2017/12/10(日) 22:12:52.74ID:EDTuXCra0 ゲッターロボ発進!
443320 (ワッチョイ b7e3-qmOZ)
2017/12/10(日) 22:58:45.66ID:PwvSHD+00444デフォルトの名無しさん (ワッチョイ 9fa6-ANK3)
2017/12/11(月) 01:44:26.10ID:NuxLjCLE0 >>443
残念ながら標準C++には無いねー。
俺の周りでも結構欲しがる人多いんだけど、何が良いのかいまいちわからないなー。
使うときに、変数を扱うような記法で、関数コールが出来るってだけだよね…
一文字減るだけで何が嬉しいのか…
残念ながら標準C++には無いねー。
俺の周りでも結構欲しがる人多いんだけど、何が良いのかいまいちわからないなー。
使うときに、変数を扱うような記法で、関数コールが出来るってだけだよね…
一文字減るだけで何が嬉しいのか…
44535歳 (ワッチョイ ffb3-5E0R)
2017/12/11(月) 02:10:24.19ID:OsSLt9Cy0 Bronze取りました
446デフォルトの名無しさん (ワッチョイ ffe8-G2/9)
2017/12/11(月) 02:22:58.14ID:EZmt4HgD0 自分は邪道なのを承知でマクロ使っちゃってるよ
447デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/11(月) 03:18:45.90ID:hyRKWo4y0 >>444
それについては
to.setBackgroundColor(from.getTextColor());
より、
to.backgroundColor = from.textColor;
の方が読みやすいから俺は否定はしない
それについては
to.setBackgroundColor(from.getTextColor());
より、
to.backgroundColor = from.textColor;
の方が読みやすいから俺は否定はしない
448デフォルトの名無しさん (ワッチョイ ffe8-G2/9)
2017/12/11(月) 05:56:14.63ID:EZmt4HgD0 >>447
後でカラーが変更されたときに処理を追加したくなったときに面倒
後でカラーが変更されたときに処理を追加したくなったときに面倒
449デフォルトの名無しさん (ワッチョイ ff6e-MWkS)
2017/12/11(月) 06:39:45.71ID:HCkpHsZ20 という、そもそもの話に行き着くだけだな
450デフォルトの名無しさん (ドコグロ MM5b-45bT)
2017/12/11(月) 07:14:44.24ID:WHbaikY8M >>448
話の流れも読めないのかよ...
話の流れも読めないのかよ...
451デフォルトの名無しさん (ワッチョイ ff6e-MWkS)
2017/12/11(月) 09:57:11.02ID:HCkpHsZ20 セッターとゲッターをいちいち作るのかという単純極まる話に流れもへったくれもあるか
452デフォルトの名無しさん (ワッチョイ bfe9-dpgO)
2017/12/11(月) 10:07:16.62ID:hFPLSsub0 だからプロパティが欲しくなるって話なのに……
453デフォルトの名無しさん (ワッチョイ ff6e-MWkS)
2017/12/11(月) 10:33:50.92ID:HCkpHsZ20 欲しけりゃ作れというCいやBから続くハングリー精神を忘れた主張はいくら喚いても無駄だ
454デフォルトの名無しさん (ワッチョイ bfe9-dpgO)
2017/12/11(月) 10:49:40.94ID:hFPLSsub0 話の流れ汲む気ねえな
455デフォルトの名無しさん (ワッチョイ ff6e-MWkS)
2017/12/11(月) 11:08:12.08ID:HCkpHsZ20 そういうおまえさんも、ここ僅か数レスの流れから目を背けているだろうが
456デフォルトの名無しさん (ワッチョイ 9f21-61ea)
2017/12/11(月) 15:05:22.47ID:HQgmyRrm0 不変条件がある→カプセル化(class)
不変条件がない→露出(struct)
では駄目なの?
不変条件がない→露出(struct)
では駄目なの?
457デフォルトの名無しさん (スップ Sd3f-aZj5)
2017/12/11(月) 15:51:19.48ID:iSg/oyC4d ちょっと違う
>>306
try-with-resources/java.lang.AutoCloseable, java.io.Closeable/Java7〜 ですか
try-with-resources/java.lang.AutoCloseable, java.io.Closeable/Java7〜 ですか
459デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/12(火) 01:07:23.70ID:taGmyuVj0460はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-qmOZ)
2017/12/12(火) 02:35:53.90ID:DNRoqyK/0 そうか。
461デフォルトの名無しさん (ワッチョイ bfe9-dpgO)
2017/12/12(火) 02:55:44.93ID:aBOGkUwZ0 >そういうおまえさんも、ここ僅か数レスの流れから目を背けているだろうが
何回読んでもこのレス最強すぎて草生える
何回読んでもこのレス最強すぎて草生える
462デフォルトの名無しさん (ワッチョイ ffe8-G2/9)
2017/12/12(火) 05:03:27.37ID:GtRyHF+60 >>459
何に腹立ててるのかまったくわからん
何に腹立ててるのかまったくわからん
463デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/12(火) 05:49:25.74ID:taGmyuVj0 >>462
いいから読み返してこい。自分がどんなトンチンカンなレス返したのか自覚するまで帰ってくるな。
いいから読み返してこい。自分がどんなトンチンカンなレス返したのか自覚するまで帰ってくるな。
464デフォルトの名無しさん (ワッチョイ ffe8-G2/9)
2017/12/12(火) 06:04:07.77ID:GtRyHF+60465デフォルトの名無しさん (ドコグロ MMeb-45bT)
2017/12/12(火) 07:20:11.15ID:55mcEBCKM >>464
プロパティっつーのは
> to.backgroundColor = from.textColor;
みたいなコードでも.backgroundColorが変更された時の処理が書ける
って話だから
プロパティっつーのは
> to.backgroundColor = from.textColor;
みたいなコードでも.backgroundColorが変更された時の処理が書ける
って話だから
466デフォルトの名無しさん (スッップ Sdbf-6IXG)
2017/12/12(火) 08:10:48.13ID:R9+tEHmjd プロパティが常に左辺値として扱えるってなら面白いけど、ただのシンタックスシュガーなんでしょ?
467デフォルトの名無しさん (ワッチョイ 9f34-Xhpf)
2017/12/12(火) 08:35:44.42ID:CHSzHMzZ0 getsetなんちゃらより視覚的にわかりやすくて見た目がスッキリして汚物感がない
468デフォルトの名無しさん (ワッチョイ bfe9-dpgO)
2017/12/12(火) 08:37:10.49ID:aBOGkUwZ0 あえて無視してるとかじゃなくてガチでわからんのか……
469デフォルトの名無しさん (ワッチョイ 9f34-Xhpf)
2017/12/12(火) 08:43:59.80ID:CHSzHMzZ0 getsetの()が汚物というかオムツ感
470デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ)
2017/12/12(火) 08:47:30.57ID:L7nvt31i0 to.backgroundColor.blue = 100;
みたいに書いても意図通りに動かないからクソ
みたいに書いても意図通りに動かないからクソ
471デフォルトの名無しさん (ワッチョイ bfe7-XaMH)
2017/12/12(火) 09:13:40.57ID:y1kEZ39i0 to.backgroundColor.blue(100);
でいいだろ。
でいいだろ。
472デフォルトの名無しさん (ワッチョイ 9fa4-MWkS)
2017/12/12(火) 11:33:45.81ID:UV42xOWp0 あるデータメンバをpublicにしたほうが合理的と判断したならすればいい
そこでいちいち教条主義にとらわれて見えない不安と戦うアフォは
物事の分別がわかるようになるまでROMってろ
そこでいちいち教条主義にとらわれて見えない不安と戦うアフォは
物事の分別がわかるようになるまでROMってろ
473デフォルトの名無しさん (ドコグロ MMeb-45bT)
2017/12/12(火) 13:18:37.14ID:55mcEBCKM また流れの読めない奴が来たのかよ...
しかもドヤ顔 w
> 物事の分別がわかるようになるまでROMってろ
お前がな
しかもドヤ顔 w
> 物事の分別がわかるようになるまでROMってろ
お前がな
474デフォルトの名無しさん (ワッチョイ 9fa4-MWkS)
2017/12/12(火) 15:47:21.47ID:UV42xOWp0 読むに足る話をしていたつもりなら相当なコレ@だな
475デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/12(火) 16:11:45.84ID:taGmyuVj0 >>470
コンパイルエラーになるなら問題ないやろ
コンパイルエラーになるなら問題ないやろ
476デフォルトの名無しさん (ワッチョイ ffe8-G2/9)
2017/12/12(火) 16:41:48.86ID:GtRyHF+60477デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/12(火) 16:52:53.52ID:taGmyuVj0478デフォルトの名無しさん (ドコグロ MM5b-45bT)
2017/12/12(火) 17:02:23.33ID:WkB3oGfAM479デフォルトの名無しさん (ワッチョイ 9f34-Xhpf)
2017/12/12(火) 17:07:23.51ID:CHSzHMzZ0 どうにかする以前に現状の標準規格ではどうにもならない
480デフォルトの名無しさん (ワッチョイ ffe8-G2/9)
2017/12/12(火) 18:02:57.84ID:GtRyHF+60481デフォルトの名無しさん (ガックシ 068f-dpgO)
2017/12/12(火) 18:23:53.63ID:T04lnVIC6 ID:GtRyHF+60が悪い
482デフォルトの名無しさん (ワッチョイ 9fa4-MWkS)
2017/12/12(火) 18:29:31.41ID:UV42xOWp0 要するに俺様の個人的好みがああだから言語もそれに合わせるべきと言っているだけ
周りと全会一致状態ならともかく批判的な意見に攻撃的な態度をとるだけ
どっから見ても単なる厨二病の自己チュー
周りと全会一致状態ならともかく批判的な意見に攻撃的な態度をとるだけ
どっから見ても単なる厨二病の自己チュー
483デフォルトの名無しさん (ワッチョイ 9fa4-MWkS)
2017/12/12(火) 18:31:17.47ID:UV42xOWp0 まあ言論の自由なんだけどね
やってて恥ずかしおまへんか?
やってて恥ずかしおまへんか?
484デフォルトの名無しさん (ワッチョイ bfe7-F7Qh)
2017/12/12(火) 18:32:23.92ID:bXatM7Na0 setの方はプロキシオブジェクト噛ませば無理矢理できなくもない(やる価値もない)
getはどうやっても無理
getはどうやっても無理
485デフォルトの名無しさん (ガックシ 068f-dpgO)
2017/12/12(火) 18:33:41.16ID:T04lnVIC6 批判的な意見(噛み合ってはいない)
486デフォルトの名無しさん (ドコグロ MM4b-45bT)
2017/12/12(火) 18:45:22.28ID:v/pth21HM487デフォルトの名無しさん (ワッチョイ 9fb3-Hxc3)
2017/12/12(火) 19:01:09.51ID:0sOBySxq0 プロパティはmsvcだと普通に使えるし、実装できない訳じゃないでしょ
つーかclangもマイクロソフト独自のプロパティに対応してるらしいとの噂
つーかclangもマイクロソフト独自のプロパティに対応してるらしいとの噂
488デフォルトの名無しさん (ワッチョイ 9776-aZj5)
2017/12/12(火) 19:45:15.77ID:3ZbnKJrs0 C++と関係ない話題をふっておいて噛み合ってないとか
489デフォルトの名無しさん (ワッチョイ 9776-aZj5)
2017/12/12(火) 19:46:18.45ID:3ZbnKJrs0 本気で疑問なら調べる手段はいくらでもあるのに
490デフォルトの名無しさん (ワッチョイ 9776-aZj5)
2017/12/12(火) 19:47:35.03ID:3ZbnKJrs0 一応、手間を惜しまなければ代入くらいは出来るけど
491デフォルトの名無しさん (ワッチョイ 9776-aZj5)
2017/12/12(火) 19:48:28.11ID:3ZbnKJrs0 代入とか書くと変な勘違いするヤツがいるか
設定
設定
492デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/12(火) 19:55:46.38ID:taGmyuVj0 出来るけどテンプレート引数やautoと相性悪いからあまりオススメしない
493デフォルトの名無しさん (ワッチョイ bfe9-dpgO)
2017/12/12(火) 20:05:47.73ID:aBOGkUwZ0 ヤベー奴怒りの4連投
494デフォルトの名無しさん (ワッチョイ 9776-aZj5)
2017/12/12(火) 20:34:17.86ID:3ZbnKJrs0 おすすめしないのは当然
C++なんだから
C++なんだから
495デフォルトの名無しさん (ワッチョイ 778a-ufcO)
2017/12/12(火) 20:43:27.77ID:9uFqgfKJ0 >>478
バカですか?
バカですか?
496デフォルトの名無しさん (ワッチョイ 778a-ufcO)
2017/12/12(火) 20:46:50.47ID:9uFqgfKJ0 C++でC#みたいなプロパティがサポートされる日は永遠に来ないからもう駄々こねるな
497デフォルトの名無しさん (ワッチョイ 57eb-F7Qh)
2017/12/12(火) 20:55:07.83ID:+86TRiAH0 頭いっちゃってる奴らがサイドショーでもやってんのか?
498デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ)
2017/12/12(火) 22:04:04.36ID:L7nvt31i0 C#以外のメジャーな言語に採用されたら有用性を認めてやる
499デフォルトの名無しさん (ワッチョイ 579f-F7Qh)
2017/12/12(火) 22:20:18.74ID:4svaTAZj0500デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/12(火) 22:24:39.30ID:taGmyuVj0 >>498
Python Kotlin Swift
Python Kotlin Swift
501デフォルトの名無しさん (ワンミングク MM7f-WAMQ)
2017/12/12(火) 22:27:11.88ID:jXjdcIPTM502デフォルトの名無しさん (ワッチョイ 9780-yV1O)
2017/12/12(火) 22:30:05.03ID:taGmyuVj0503デフォルトの名無しさん (ワッチョイ 9fb3-45bT)
2017/12/12(火) 22:32:20.45ID:Vo2kP02L0504デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ)
2017/12/12(火) 22:32:51.93ID:L7nvt31i0 C#のプロパティはカプセル化の範疇を超えた使い方する奴が出てきてからクソだと思い始めた
505デフォルトの名無しさん (ワッチョイ 579f-F7Qh)
2017/12/12(火) 22:43:30.63ID:4svaTAZj0 >>504
可能であれば例よろしく。URLでいい。
可能であれば例よろしく。URLでいい。
506はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-qmOZ)
2017/12/12(火) 22:44:50.18ID:DNRoqyK/0 いや、どんな機能もクソな使い方をする奴は少なからずいるよ。
そんなもんだよ。
そんなもんだよ。
507デフォルトの名無しさん (ワッチョイ 5704-IpD3)
2017/12/12(火) 22:48:51.09ID:qpuoD4bc0 C言語にバックポートしてほしい機能はテンプレート一択。
何を言っているのかわからないと思うが。。。
何を言っているのかわからないと思うが。。。
508デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ)
2017/12/12(火) 23:10:28.93ID:L7nvt31i0 >>505
プロパティ便利すぎとか言ってる同僚が書いた200行を超えるゲッターや初回だけ挙動が違うセッターなど
publicな変数も混ざってる環境なため普通の変数だと思ってあっちこっちで参照していたら気づかないうちに激重になっていた
どこがボトルネックになっているのか探すのに時間がかかった
プロパティ便利すぎとか言ってる同僚が書いた200行を超えるゲッターや初回だけ挙動が違うセッターなど
publicな変数も混ざってる環境なため普通の変数だと思ってあっちこっちで参照していたら気づかないうちに激重になっていた
どこがボトルネックになっているのか探すのに時間がかかった
509デフォルトの名無しさん (スププ Sdbf-dpgO)
2017/12/12(火) 23:13:23.41ID:5Fm7w0SJd 仮にもc++使いならばそんなアホみたいな事例を気にする必要はなかろう
510デフォルトの名無しさん (ワッチョイ 579f-F7Qh)
2017/12/12(火) 23:43:37.47ID:4svaTAZj0 >>508
サンクス。
> どこがボトルネックになっているのか探すのに時間がかかった
多分これがC++がプロパティを入れない理由だと俺は思っているが、
今のC++の勢いならどうせいつか入れるのだろうとも思っている。
> 200行を超えるゲッター
これはあまり行儀はよくないが、
メソッドとフィールドの文法的区別をなくすのがgetterでもあるから、
正しいといえば正しい。
> 初回だけ挙動が違うセッター
これはコンストラクタでやるべきものをセッターに持って来たことが悪い。
つまり、セッターの問題ではない。
セッター文法がこれを誘発するかと言えば、関係ないと思うから、プログラマその人の問題だと思う。
で、C++は一応「プログラマは正しくプログラミングできる」という前提だから、
どうせプロパティもいつか入れるんでしょ、と思っている。
その時には、「getterには重い処理を入れない」等の掟が出来るのだと思う。
サンクス。
> どこがボトルネックになっているのか探すのに時間がかかった
多分これがC++がプロパティを入れない理由だと俺は思っているが、
今のC++の勢いならどうせいつか入れるのだろうとも思っている。
> 200行を超えるゲッター
これはあまり行儀はよくないが、
メソッドとフィールドの文法的区別をなくすのがgetterでもあるから、
正しいといえば正しい。
> 初回だけ挙動が違うセッター
これはコンストラクタでやるべきものをセッターに持って来たことが悪い。
つまり、セッターの問題ではない。
セッター文法がこれを誘発するかと言えば、関係ないと思うから、プログラマその人の問題だと思う。
で、C++は一応「プログラマは正しくプログラミングできる」という前提だから、
どうせプロパティもいつか入れるんでしょ、と思っている。
その時には、「getterには重い処理を入れない」等の掟が出来るのだと思う。
511デフォルトの名無しさん (ワッチョイ 9f12-F7Qh)
2017/12/13(水) 00:53:04.54ID:3t1TagYk0 =での演算子のオーバーロードがsetterに相当する
その辺りを自動でやってほしい
他、+=やらの演算子も余りにも面倒なのでどうにかしてほしい
pythonではそういう軟弱な特殊メソッドがあるが軟弱なのでC++の感触には合わない
さらに困難で不可解な記述方法を編み出すべきだ
その辺りを自動でやってほしい
他、+=やらの演算子も余りにも面倒なのでどうにかしてほしい
pythonではそういう軟弱な特殊メソッドがあるが軟弱なのでC++の感触には合わない
さらに困難で不可解な記述方法を編み出すべきだ
512デフォルトの名無しさん (ワッチョイ 5704-IpD3)
2017/12/13(水) 00:56:28.78ID:SIeP7pZg0 どういうポリシーだよ。
513デフォルトの名無しさん (ワッチョイ 57b3-wlc6)
2017/12/13(水) 01:04:25.30ID:VGyxWnO70 C#についてはサッパリだけど、調べたらかなり便利そうな機能だね、処理を差し挟めるというか?
C++で「stringのように振る舞う値」を作ろうとするとまずその型から定義しなきゃならないし
継承でやっつけることも可能だけど、問題点もある
さらに「intのように振る舞う値」となると継承不可だし、各種演算子をいちいち定義しないといけない
型を定義したいわけじゃなく、ある型のインターフェースを持ちつつアクセス時の処理を入れたいだけ、ってのは
確かにC++にも欲しくなるね
大した例えじゃないと思うけど、いずれ似たようなことが出来るようになったらいいなぁ
C++で「stringのように振る舞う値」を作ろうとするとまずその型から定義しなきゃならないし
継承でやっつけることも可能だけど、問題点もある
さらに「intのように振る舞う値」となると継承不可だし、各種演算子をいちいち定義しないといけない
型を定義したいわけじゃなく、ある型のインターフェースを持ちつつアクセス時の処理を入れたいだけ、ってのは
確かにC++にも欲しくなるね
大した例えじゃないと思うけど、いずれ似たようなことが出来るようになったらいいなぁ
514デフォルトの名無しさん (ワッチョイ 5704-IpD3)
2017/12/13(水) 01:07:04.42ID:SIeP7pZg0 プロパティって要するに、セッターは1引数の関数って場合が多いような。ゲッターは引数無しの関数。
カッコつけないだけで可読性がそこまで上がるもんかと思う。
カッコつけないだけで可読性がそこまで上がるもんかと思う。
515デフォルトの名無しさん (ワッチョイ 77c3-Jck7)
2017/12/13(水) 01:13:16.30ID:YFiH9SDO0 window.SetSize(display.GetSize() * 0.5);
よりは
window.size = display.size * 0.5;
の方が読みやすいとは思う
よりは
window.size = display.size * 0.5;
の方が読みやすいとは思う
516デフォルトの名無しさん (ワッチョイ 5704-IpD3)
2017/12/13(水) 01:21:21.53ID:SIeP7pZg0 んー。まぁそうかも。
517デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ)
2017/12/13(水) 02:17:03.25ID:65/6bu6P0 ゲッターのポインタをどうやって取るつもりだよ
518デフォルトの名無しさん (ワッチョイ 5704-IpD3)
2017/12/13(水) 02:38:27.29ID:SIeP7pZg0 なぜそんな使い方をするのかよくわからん。
参照でパクってくるのはできないの?
参照でパクってくるのはできないの?
519デフォルトの名無しさん (ワッチョイ 5704-IpD3)
2017/12/13(水) 02:39:20.43ID:SIeP7pZg0 あー、あーるばりゅーに&つけるのってダメなんだっけ?
520デフォルトの名無しさん (ワッチョイ 9f34-Xhpf)
2017/12/13(水) 02:47:06.16ID:4G0mfW720 そうそう、汚物感が皆無なのよねえ
521デフォルトの名無しさん (スププ Sdbf-LVSJ)
2017/12/13(水) 04:41:15.27ID:pnzC2QZad522デフォルトの名無しさん (ワッチョイ 9fb3-45bT)
2017/12/13(水) 04:58:13.06ID:0JTwiv230523デフォルトの名無しさん (ワッチョイ ffb4-Nf6k)
2017/12/13(水) 05:38:19.00ID:qfWT6RzB0 ここで議論してる人って、↓の話は当然理解してるんだよね。
http://ufcpp.net/study/miscprog/accessor.html#proxy
http://ufcpp.net/study/miscprog/accessor.html#proxy
524デフォルトの名無しさん (ドコグロ MMdf-45bT)
2017/12/13(水) 06:53:58.70ID:55R6yVv7M525デフォルトの名無しさん (ワッチョイ 5704-IpD3)
2017/12/13(水) 07:47:58.27ID:SIeP7pZg0 https://ideone.com/x4WLWF
これを見てくれ、こいつをどう思う?
大分前にここにも上げたやつ。
こういうこともできなくないけど、標準で持ってほしいのはわからんでもない。
まぁ、カッコ一個減ったくらいでそんなに変わるかどうかはビミョーなところ。
これを見てくれ、こいつをどう思う?
大分前にここにも上げたやつ。
こういうこともできなくないけど、標準で持ってほしいのはわからんでもない。
まぁ、カッコ一個減ったくらいでそんなに変わるかどうかはビミョーなところ。
526デフォルトの名無しさん (ワッチョイ ff81-WAMQ)
2017/12/13(水) 07:51:32.20ID:DfK3Pc7X0 >>502
Storedとも違う
Storedとも違う
527デフォルトの名無しさん (ワッチョイ 57b3-wlc6)
2017/12/13(水) 13:46:22.45ID:VGyxWnO70 >>525
プロパティっぽいことは実現できてると思うんだけど、
いかんせん型が違うから、例えばstringのメンバ関数呼び出しは出来ないし
暗黙のキャストが効かない場面でエラーになるんじゃないかな
やっぱ言語でサポートしてくれないと限度がある
と思ったけどT.P + T.Pとかが通って吹いた
プロパティっぽいことは実現できてると思うんだけど、
いかんせん型が違うから、例えばstringのメンバ関数呼び出しは出来ないし
暗黙のキャストが効かない場面でエラーになるんじゃないかな
やっぱ言語でサポートしてくれないと限度がある
と思ったけどT.P + T.Pとかが通って吹いた
528デフォルトの名無しさん (ワッチョイ 9f6e-MWkS)
2017/12/13(水) 13:59:38.92ID:VOF5ieE50 リファレンサなんか大昔からみんなやってることじゃん
誰かがいみじくも言っていたようにカッコ1つ減らすためだけに
そんな馬鹿げた努力(言語の複雑化も含む)がしたいのか
誰かがいみじくも言っていたようにカッコ1つ減らすためだけに
そんな馬鹿げた努力(言語の複雑化も含む)がしたいのか
529デフォルトの名無しさん (ガックシ 068f-dpgO)
2017/12/13(水) 15:06:44.35ID:QqhuUsRS6 努力はしたくないけど言語の複雑化は構わんなあ
もっと複雑な機能いっぱいあるし、プロパティなんてかわいいもんでしょ
もっと複雑な機能いっぱいあるし、プロパティなんてかわいいもんでしょ
530デフォルトの名無しさん (ワッチョイ 57b3-wlc6)
2017/12/13(水) 15:21:57.42ID:VGyxWnO70531デフォルトの名無しさん (ワッチョイ 9f6e-MWkS)
2017/12/13(水) 16:32:25.04ID:VOF5ieE50532デフォルトの名無しさん (ワッチョイ 17b3-qmOZ)
2017/12/13(水) 19:43:44.26ID:YreXArfE0 [][][] [][][] [] [][][][] [][] [][][][][] [][] [][] [] [][][][][]
[] [][][][ [][][][][] [][ [][] [] [][][] [] [][][] []
[][][][] [] [] [][][][][][ [] [][][] [][] [][] []
[] [][][][ [][][][][] [][ [][] [] [][][] [] [][][] []
[][][][] [] [] [][][][][][ [] [][][] [][] [][] []
533デフォルトの名無しさん (ワッチョイ 5704-IpD3)
2017/12/13(水) 20:46:34.93ID:SIeP7pZg0 >>527
えー?stringのメンバ呼べない?const参照してるだけだから呼べない道理はないはずだけど。
まぁ、マズそうなら一回static_castかませないとダメなんだっけ?うーむ。
まぁ、難しいことは考えずサンプルとして見てくれ。
えー?stringのメンバ呼べない?const参照してるだけだから呼べない道理はないはずだけど。
まぁ、マズそうなら一回static_castかませないとダメなんだっけ?うーむ。
まぁ、難しいことは考えずサンプルとして見てくれ。
534デフォルトの名無しさん (ドコグロ MM4b-45bT)
2017/12/13(水) 21:13:48.92ID:S9dgblRYM535デフォルトの名無しさん (ワッチョイ 57b3-wlc6)
2017/12/13(水) 21:31:45.92ID:VGyxWnO70 >>533
Test<std::string> T;
size_t a = T.P.size();
とかやった場合の話ね(もちろん明示・暗黙に関わらずキャストされたらいける
継承使えばメンバ関数もいけるだろうけど・・・・そうすると多分、スライシング等の問題が・・・・
そんなこんなでプロパティか、それに近い機能入ってもいんじゃね?と思っただけw
Test<std::string> T;
size_t a = T.P.size();
とかやった場合の話ね(もちろん明示・暗黙に関わらずキャストされたらいける
継承使えばメンバ関数もいけるだろうけど・・・・そうすると多分、スライシング等の問題が・・・・
そんなこんなでプロパティか、それに近い機能入ってもいんじゃね?と思っただけw
536デフォルトの名無しさん (ワッチョイ 5704-IpD3)
2017/12/13(水) 21:44:08.48ID:SIeP7pZg0537デフォルトの名無しさん (ワッチョイ 579f-F7Qh)
2017/12/13(水) 22:11:05.97ID:uoR9h+SG0 つかな、使ってもないのに使用感を予想で語るの止めい。
そりゃ話がループする。
他言語には普通にあるんだし、使ってる奴のレポートを待てばいいんだよ。
利点は、フィールド←→メソッドを変更するときに、記述変更が少なくて済むことだ。
場合によっては戻すこともあるから、その時も助かる。
従って、アジャイルで既に動いているコードを変更しまくるときには便利だが、
ウォーターフォールで基本書いて終わりなら大してメリットはない。()が付くだけだ。
これとは別に、JavaScriptの場合はフィールドとメソッドを区別してないので、オーバーヘッド無しの遅延評価にも使える。
(プロパティ《関数ポインタ、ここで遅延評価する》をフィールド《遅延評価の結果》で直接上書きできる)
C++でこれをやる場合、オーバーヘッドが生じるし、そもそもメソッドコールでいい。
結果、C++には記述上のメリットしかなく、
これはIDEが進歩してリファクタリング出来るようになれば解消する話でもある。
だからそれを待つ、という作戦もありだろうし、
それ以前にIDE側のプリプロセッサでpropertyをサポートしてしまえ、ってのもありだと思う。
まあ、あれば便利程度で、あまり本質的ではない機能なのも事実だ。
そりゃ話がループする。
他言語には普通にあるんだし、使ってる奴のレポートを待てばいいんだよ。
利点は、フィールド←→メソッドを変更するときに、記述変更が少なくて済むことだ。
場合によっては戻すこともあるから、その時も助かる。
従って、アジャイルで既に動いているコードを変更しまくるときには便利だが、
ウォーターフォールで基本書いて終わりなら大してメリットはない。()が付くだけだ。
これとは別に、JavaScriptの場合はフィールドとメソッドを区別してないので、オーバーヘッド無しの遅延評価にも使える。
(プロパティ《関数ポインタ、ここで遅延評価する》をフィールド《遅延評価の結果》で直接上書きできる)
C++でこれをやる場合、オーバーヘッドが生じるし、そもそもメソッドコールでいい。
結果、C++には記述上のメリットしかなく、
これはIDEが進歩してリファクタリング出来るようになれば解消する話でもある。
だからそれを待つ、という作戦もありだろうし、
それ以前にIDE側のプリプロセッサでpropertyをサポートしてしまえ、ってのもありだと思う。
まあ、あれば便利程度で、あまり本質的ではない機能なのも事実だ。
538デフォルトの名無しさん (ワッチョイ 1234-lyuv)
2017/12/14(木) 00:16:08.20ID:Sy/1Y7rD0 お前がそう思うならそうなんだろう
お前の頭の中ではな
貴様の意見も机上の空論でしかない
お前の頭の中ではな
貴様の意見も机上の空論でしかない
539デフォルトの名無しさん (ワッチョイ 1f04-j1NZ)
2017/12/14(木) 00:18:30.33ID:NkgoJhJp0 そんなにつぶし合いしたいかね。
収集しようとしてるのに。
収集しようとしてるのに。
540デフォルトの名無しさん (ワッチョイ 926e-zS+j)
2017/12/14(木) 05:16:24.25ID:fPDEs5uN0541デフォルトの名無しさん (ドコグロ MM32-jdna)
2017/12/14(木) 06:45:49.20ID:TMq/DGv/M >>537
なぜ爺は終わった話をクドクド繰り返すのか
なぜ爺は終わった話をクドクド繰り返すのか
542デフォルトの名無しさん (ワッチョイ dee7-c48R)
2017/12/14(木) 08:20:19.27ID:pBHCaQE50 c++でIF公開するときはメソッドに統一する、でおしまいの話なのにな。
543デフォルトの名無しさん (ワッチョイ de9f-X0LG)
2017/12/14(木) 09:02:11.18ID:pZXI1dL80 文句だらだらなら、GCCを自分で仕様を追加しちゃえよ!
544デフォルトの名無しさん (ワッチョイ 926e-zS+j)
2017/12/14(木) 09:19:33.65ID:fPDEs5uN0 かつて禿がcfrontを作ったようにか
545デフォルトの名無しさん (スププ Sd32-gSDb)
2017/12/14(木) 09:28:38.36ID:GokG4kFPd 自分で仕様を追加したGCCとか>>540のマクロとたいして変わらんくない?
いや公式GCCにアクセプトされるなら話は別だけど
いや公式GCCにアクセプトされるなら話は別だけど
546デフォルトの名無しさん (ワッチョイ 926e-zS+j)
2017/12/14(木) 09:38:06.70ID:fPDEs5uN0 追加する仕様によるな
禿がCに「追加した」機能はマクロじゃ済まない
禿がCに「追加した」機能はマクロじゃ済まない
547デフォルトの名無しさん (スプッッ Sd97-xd0q)
2017/12/14(木) 16:58:09.71ID:WeKtNL6id そんなにプロパティ欲しいとは思わんが、単純な値操作ならメンバの参照返すメソッド作れば事足りるんじゃね?
それよりconst地獄ってホントにあるの?
const使いまくってて体感したことないんだけと。
それよりconst地獄ってホントにあるの?
const使いまくってて体感したことないんだけと。
548デフォルトの名無しさん (ワッチョイ 926e-zS+j)
2017/12/14(木) 17:04:38.91ID:fPDEs5uN0 メンバの参照を返したらprivateにしている意味が完全に失われるぞ
>>547
上流が const を渡してきたら、下流は逆らえない、ってことでは?
上流が const を渡してきたら、下流は逆らえない、ってことでは?
550デフォルトの名無しさん (ワッチョイ 9ee7-iA8U)
2017/12/14(木) 19:25:05.92ID:xcUKDly80 自作クラスのメンバ関数にconst全く付けてないタコが聞きかじりで中途半端に付け始めて
「メソッド呼べない!ムキー!このconstってやつ使えねー」ってパターンが大半だと思ってる
「メソッド呼べない!ムキー!このconstってやつ使えねー」ってパターンが大半だと思ってる
551デフォルトの名無しさん (ワッチョイ 1f7f-mLIQ)
2017/12/14(木) 19:27:31.22ID:gH71C6kZ0 const地獄になるってことはそのコードが間違ってるって事だからな
全部直せ
全部直せ
552デフォルトの名無しさん (スップ Sd52-JSy5)
2017/12/14(木) 20:46:09.64ID:j4kcZFN2d >>547
本気で言ってるなら、それは経験が足りない
本気で言ってるなら、それは経験が足りない
553デフォルトの名無しさん (ワッチョイ c27e-mLIQ)
2017/12/14(木) 20:54:50.42ID:5ihghoP20 副作用の少ないきれいな設計ならconstだらけになるはずだが
554デフォルトの名無しさん (ワッチョイ 1681-J6jR)
2017/12/14(木) 20:59:02.63ID:tSRk6cie0 >>553
これ
これ
555デフォルトの名無しさん (ワッチョイ dfb3-hRZ1)
2017/12/14(木) 21:01:34.68ID:jk+byjKr0 No.1
1 2 3 4 5
2 3 4 5 6
No.2
1 2 3 4 5
2 2 2 2 2
3 3 3 3 3
No.3
3 4 5 6 7
:
:
No.n
というtxtファイルがあり。No.〇の次の行に整数が記入されている(何行あるかわからない)
整数の左からx1[ i ][ k ]、y1[ i ][ k ]、x2[ i ][ k ]、y2[ i ][ k ]、A[ i ][ k ]の配列にそれぞれ書き込み
もし次の行整数があればi+1をしまたそれぞれの配列に整数を書き込む
もし次の行に整数がなければ(No.の行)k+1を次の行にいき整数をそれぞれの配列に書き込む。
これをNo.nまで繰り返す。
このプログラムをfopenを使ってプログラムどなたかつくってくれませんかー?
1 2 3 4 5
2 3 4 5 6
No.2
1 2 3 4 5
2 2 2 2 2
3 3 3 3 3
No.3
3 4 5 6 7
:
:
No.n
というtxtファイルがあり。No.〇の次の行に整数が記入されている(何行あるかわからない)
整数の左からx1[ i ][ k ]、y1[ i ][ k ]、x2[ i ][ k ]、y2[ i ][ k ]、A[ i ][ k ]の配列にそれぞれ書き込み
もし次の行整数があればi+1をしまたそれぞれの配列に整数を書き込む
もし次の行に整数がなければ(No.の行)k+1を次の行にいき整数をそれぞれの配列に書き込む。
これをNo.nまで繰り返す。
このプログラムをfopenを使ってプログラムどなたかつくってくれませんかー?
556デフォルトの名無しさん (ワッチョイ 1234-lyuv)
2017/12/14(木) 21:33:16.59ID:x8KqPZST0 宿題くらい自力でこなせ脳筋
557デフォルトの名無しさん (ワッチョイ 1f04-j1NZ)
2017/12/14(木) 21:45:38.41ID:NkgoJhJp0 ヒント。
いずあるふぁっていう関数どっかにあるから、先頭にアルファベットがあったらスキップや。
それと宿題スレって落ちたの?
いずあるふぁっていう関数どっかにあるから、先頭にアルファベットがあったらスキップや。
それと宿題スレって落ちたの?
559デフォルトの名無しさん (ワッチョイ 12e7-X0LG)
2017/12/15(金) 00:18:39.45ID:sms7d93l0 const指定って下流が対応してないのに上流からやり始めるのは愚だよね
560デフォルトの名無しさん (ワッチョイ 92a6-ak+6)
2017/12/15(金) 09:14:14.38ID:2/eH7rfa0 >>559
どういう意味?
どういう意味?
561デフォルトの名無しさん (ドコグロ MMea-c48R)
2017/12/15(金) 11:53:03.91ID:H37RU5hVM プロパティよりも、deleteするとコンパイルエラーになるポインタが欲しい。
562デフォルトの名無しさん (ワッチョイ 926e-zS+j)
2017/12/15(金) 11:55:37.18ID:GBd6F7vt0563デフォルトの名無しさん (ワッチョイ c27e-mLIQ)
2017/12/15(金) 12:49:17.55ID:kmVVqq510 >>561
あるじゃん
あるじゃん
564デフォルトの名無しさん (ドコグロ MMea-c48R)
2017/12/15(金) 15:39:48.05ID:H37RU5hVM >>562
int*に代入できたっけ?
int*に代入できたっけ?
565デフォルトの名無しさん (ワッチョイ 926e-zS+j)
2017/12/15(金) 16:14:46.51ID:GBd6F7vt0 >>564
後出しはきたねえよ
後出しはきたねえよ
566デフォルトの名無しさん (ドコグロ MMea-c48R)
2017/12/15(金) 18:44:29.20ID:H37RU5hVM スマポも「ポインタ」とは言うけどさぁ
deleteの文脈で言っているんだから、オブジェクトは想定外だわ。
deleteの文脈で言っているんだから、オブジェクトは想定外だわ。
567デフォルトの名無しさん (ワンミングク MM42-B5ak)
2017/12/15(金) 18:52:20.56ID:6JtV0wHMM そんなもん何の役にたつのか解らんわ
568デフォルトの名無しさん (ワッチョイ 9ee7-iA8U)
2017/12/16(土) 06:47:52.76ID:7q5uIVqU0 所有権のないスマポ(?)ならstd::observer_ptrがもうすぐ入るから待っとけ
569デフォルトの名無しさん (ワッチョイ 9ee7-iA8U)
2017/12/16(土) 06:55:04.26ID:7q5uIVqU0 ところでスマポのコンストラクタの書き方ってどっちがいいの?
class Foo
{
std::shared_ptr<Bar> bar;
Foo(): bar(new Bar(42, 100.5, "xxx")){}
Foo(): bar(std::make_shared<Bar>(42, 100.5, "xxx")){}
};
下の書き方されてるのよく見るけどこれって
「newがあるのにdeleteがない!111」って発狂するアホコードチェッカを黙らせる以外にメリットなんかあるの?
class Foo
{
std::shared_ptr<Bar> bar;
Foo(): bar(new Bar(42, 100.5, "xxx")){}
Foo(): bar(std::make_shared<Bar>(42, 100.5, "xxx")){}
};
下の書き方されてるのよく見るけどこれって
「newがあるのにdeleteがない!111」って発狂するアホコードチェッカを黙らせる以外にメリットなんかあるの?
570デフォルトの名無しさん (ワッチョイ d6fa-+wuU)
2017/12/16(土) 07:12:04.23ID:WjCT6x4J0571デフォルトの名無しさん (ワッチョイ 9ee7-iA8U)
2017/12/16(土) 07:21:37.50ID:7q5uIVqU0 あーなるほど
new隠しだけのための砂糖だと思ってましたありがとう
ということはunique_ptrの場合はメリットなしでいいんですかね
new隠しだけのための砂糖だと思ってましたありがとう
ということはunique_ptrの場合はメリットなしでいいんですかね
572デフォルトの名無しさん (ワッチョイ ff78-H+11)
2017/12/16(土) 07:29:56.22ID:O0/bhlaM0 俺もmake_uniqueはいらねーよなぁって思ってたけど使った方が例外安全なんだとよ
573デフォルトの名無しさん (ワッチョイ 1f7f-mLIQ)
2017/12/16(土) 09:33:48.78ID:RDTsLSUc0 むしろmake_uniqueが11に無くてキレた
574デフォルトの名無しさん (ワッチョイ a7b3-mLIQ)
2017/12/16(土) 22:08:09.44ID:d76HZF+i0 point cloud libraryというライブラリを読んでいます。
kdtreeクラスはsearchクラスをパブリック継承しており、
kdtreeクラスの冒頭で、searchクラスのデータメンバやメンバ関数の一部をusingしています。
これはどういう意味があってやっているのか教えて頂けないでしょうか。
kdtreeクラスはsearchクラスをパブリック継承しており、
kdtreeクラスの冒頭で、searchクラスのデータメンバやメンバ関数の一部をusingしています。
これはどういう意味があってやっているのか教えて頂けないでしょうか。
575デフォルトの名無しさん (ワッチョイ 1f04-j1NZ)
2017/12/17(日) 10:02:55.57ID:E0u1MAW90 IO2D楽しみだなー。
ウニファイドコールシンタックス復活しないかなぁ。
ウニファイドコールシンタックス復活しないかなぁ。
576デフォルトの名無しさん (ワッチョイ ef04-RjCm)
2017/12/17(日) 18:17:59.07ID:4ntht7mR0 質問です。
#include "classB.h"
class A{
private:
B* b;
public:
void set(B* b){this->b=b;}
B* get(){return b;}
};
クラスAのメンバーにクラスBのポインタとアクセサがあります。
しかし、set()を使わずに、get()を使ってメンバーにアクセスできてしまいます。
例:a->get()=b;
ポインタではなく、複製したインスタンスを返すことも考えたのですが
クラスBのサイズが非常に大きいため、
可能であれば複製はしたくありません。
どうかご助力をお願い致します。
#include "classB.h"
class A{
private:
B* b;
public:
void set(B* b){this->b=b;}
B* get(){return b;}
};
クラスAのメンバーにクラスBのポインタとアクセサがあります。
しかし、set()を使わずに、get()を使ってメンバーにアクセスできてしまいます。
例:a->get()=b;
ポインタではなく、複製したインスタンスを返すことも考えたのですが
クラスBのサイズが非常に大きいため、
可能であれば複製はしたくありません。
どうかご助力をお願い致します。
577デフォルトの名無しさん (ワッチョイ 1234-lyuv)
2017/12/17(日) 18:32:55.64ID:bOEVzYTT0 const B *get() const {略}
578デフォルトの名無しさん (ワッチョイ 52a2-mLIQ)
2017/12/17(日) 18:33:44.11ID:+uUy0Dc30 get()を消す
579デフォルトの名無しさん (ワッチョイ ff78-H+11)
2017/12/17(日) 18:37:56.02ID:iUXjeeD00 B* b = nullptr;
B* get(){ assert(b != nullptr); return b;}
こうでもしとけばいいよ
B* get(){ assert(b != nullptr); return b;}
こうでもしとけばいいよ
580デフォルトの名無しさん (ワッチョイ c27e-mLIQ)
2017/12/17(日) 18:39:29.53ID:UdjbeEad0581デフォルトの名無しさん (ワッチョイ 1234-lyuv)
2017/12/17(日) 18:41:17.67ID:bOEVzYTT0 エスパーだがポインタみたいな動作させたいなら operatorー>() を定義すりゃいいけど上の説明だとなにがやりたいのか具体的にわからないね
582デフォルトの名無しさん (ワッチョイ 12e7-X0LG)
2017/12/17(日) 18:48:28.66ID:1SGX9IGl0 >>578に賛成
583デフォルトの名無しさん (ワッチョイ ef04-RjCm)
2017/12/17(日) 18:56:03.60ID:4ntht7mR0584デフォルトの名無しさん (ワッチョイ 9ee7-iA8U)
2017/12/17(日) 19:23:44.84ID:KvIrn8eu0 Bがなんだかわからないけどsetがものすごくまずいように見える
585デフォルトの名無しさん (ワッチョイ a7b3-mLIQ)
2017/12/17(日) 19:40:09.05ID:S5+bbMRX0 [][] [] [][][][] [][] [] [][][][][
[ ][] [
[ ][] [
586デフォルトの名無しさん (ワッチョイ 921b-zGdT)
2017/12/17(日) 20:35:52.39ID:eYk9JmcH0 gtkmmググっても英語含めて17ページしかないんだわ(´・ω・`)
587デフォルトの名無しさん (ワッチョイ 72bd-E651)
2017/12/17(日) 20:39:57.73ID:wJJJkdkz0 オブジェクトの内部データへの変更を許すフリーパスを外に与えるようなsetterやgetterはNG、
しかしあまり杓子定規にそれを言い立てるとファイルハンドルとかもgetterで返して良いかどうかビミョーに…
ファイルはオブジェクトの内部データではないお客様という解釈で乗り切る?
しかしあまり杓子定規にそれを言い立てるとファイルハンドルとかもgetterで返して良いかどうかビミョーに…
ファイルはオブジェクトの内部データではないお客様という解釈で乗り切る?
588デフォルトの名無しさん (ワッチョイ af39-zS+j)
2017/12/17(日) 22:46:35.33ID:AbfI68c80 いいわけないだろ
教条主義にとらわれていると
そういうことがわからなくなる
教条主義にとらわれていると
そういうことがわからなくなる
589はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1e6f-mLIQ)
2017/12/17(日) 23:31:57.93ID:vupC7usA0 フレンドクラスに見せるようにする方が例外扱いが明記される分だけマシ
590デフォルトの名無しさん (ワッチョイ 12e7-X0LG)
2017/12/17(日) 23:42:11.90ID:1SGX9IGl0 フレンドはカプセル化を推進する良い子
591デフォルトの名無しさん (ワッチョイ 1f04-j1NZ)
2017/12/17(日) 23:55:34.47ID:E0u1MAW90 クラスオブジェクトソリッド
>>295 >>292
accelerated c++ をぼちぼちやっています。
>>295 にもバグがあり、正しくは
https://ideone.com/sK4aJ2
一行を最後まで読んでしまったのなら、即座にループを抜けないといけない
なんだか最近 while() の使い道がなくなってきたように思えるのです…いつも for(::) { break; } ばかり書くようになってしまった…
accelerated c++ をぼちぼちやっています。
>>295 にもバグがあり、正しくは
https://ideone.com/sK4aJ2
一行を最後まで読んでしまったのなら、即座にループを抜けないといけない
なんだか最近 while() の使い道がなくなってきたように思えるのです…いつも for(::) { break; } ばかり書くようになってしまった…
593デフォルトの名無しさん (ワッチョイ 1f04-j1NZ)
2017/12/18(月) 00:12:01.54ID:3Ix8qMew0 停止性を担保するのは良いことだと思うが。
結局無限ループからのブレークしか使ってないなら頭整理してWHILEに置き換えるようにするなぁ。
結局無限ループからのブレークしか使ってないなら頭整理してWHILEに置き換えるようにするなぁ。
>>593
停止性の確認を行った後、余計なことを一切してはいけない、という制約が加わると
途中判定の break 脱出以外に手がない、と考えています
あまり思い出したくないんですが、DOS/Windows の findfirst/findnext なんかも似た類かと
停止性の確認を行った後、余計なことを一切してはいけない、という制約が加わると
途中判定の break 脱出以外に手がない、と考えています
あまり思い出したくないんですが、DOS/Windows の findfirst/findnext なんかも似た類かと
596デフォルトの名無しさん (ワッチョイ d298-Ll2t)
2017/12/18(月) 02:19:29.29ID:+LmA4Igx0 アプリケーション上で確保されたヒープ領域を追跡したいです。
operator new/delete と allocator を弄ればできると思い調査していたころ
「プログラミング言語C++ 第4版」P997 に
「標準ライブラリのすべてのコンテナは、newによってメモリを確保して、deleteによって解放するデフォルトアロケータを(デフォルトで)もっている」
と書かれていました。つまり、new をグローバルでオーバーロードすれば追跡可能です。
実際、手元のコンパイラでは std::vector のメモリ確保と解放を追跡できました。
ここまでの内容は規格で保証されている事柄ですか?
実際のアプリケーションに組込むことを考えています。
operator new/delete と allocator を弄ればできると思い調査していたころ
「プログラミング言語C++ 第4版」P997 に
「標準ライブラリのすべてのコンテナは、newによってメモリを確保して、deleteによって解放するデフォルトアロケータを(デフォルトで)もっている」
と書かれていました。つまり、new をグローバルでオーバーロードすれば追跡可能です。
実際、手元のコンパイラでは std::vector のメモリ確保と解放を追跡できました。
ここまでの内容は規格で保証されている事柄ですか?
実際のアプリケーションに組込むことを考えています。
597デフォルトの名無しさん (ワッチョイ 1f04-j1NZ)
2017/12/18(月) 02:36:31.34ID:3Ix8qMew0 メモリの確保形式はさすがに実装依存でしょ。
最近リーヌスがブチ切れたらしいけど。
メモリーオーダーコンシウムとかの話は今やってるところ。
最近リーヌスがブチ切れたらしいけど。
メモリーオーダーコンシウムとかの話は今やってるところ。
598デフォルトの名無しさん (ワッチョイ b780-AB+M)
2017/12/18(月) 03:43:10.43ID:vrG0ZJDQ0599デフォルトの名無しさん (ワッチョイ 1233-4pIx)
2017/12/18(月) 07:43:59.76ID:dmyIL21e0 >>596
std::allocator<T> (The default allocator) についての [allocator.members] で規定されてる。
> Remarks: the storage is obtained by calling ::operator new, but it is unspecified when or
> how often this function is called.
標準コンテナにアロケータを指定しなければ std::allocator が使われるから、それでいける。
「実際のアプリケーション」に変なものが混ざってなければね。
std::allocator<T> (The default allocator) についての [allocator.members] で規定されてる。
> Remarks: the storage is obtained by calling ::operator new, but it is unspecified when or
> how often this function is called.
標準コンテナにアロケータを指定しなければ std::allocator が使われるから、それでいける。
「実際のアプリケーション」に変なものが混ざってなければね。
600デフォルトの名無しさん (ワッチョイ 1f04-j1NZ)
2017/12/18(月) 07:50:02.22ID:3Ix8qMew0 アロケータ自作してスパイアロケータとか作ればそれっぽいことはできるね。
標準コンテナに限っては。
標準コンテナに限っては。
601デフォルトの名無しさん (ドコグロ MMb3-c48R)
2017/12/18(月) 09:32:57.28ID:MJYUqHBuM >>576
ポインタを返さずに、ハンドルクラスを定義してそのオブジェクトを返す。
ポインタを返さずに、ハンドルクラスを定義してそのオブジェクトを返す。
602デフォルトの名無しさん (ブーイモ MMdb-ak+6)
2017/12/18(月) 12:58:24.39ID:D6kxD+M8M >>596
グローバルnew/deleteのオーバーロード自体は、規格で許されてるので合法。
ただ、注意深くやらないと吹っ飛ぶ。
とある処理系の標準ライブラリで、ユーザー回避不可能な不具合に当たったこともあった。
グローバルnew/deleteのオーバーロード自体は、規格で許されてるので合法。
ただ、注意深くやらないと吹っ飛ぶ。
とある処理系の標準ライブラリで、ユーザー回避不可能な不具合に当たったこともあった。
603デフォルトの名無しさん (ワッチョイ c623-w1i6)
2017/12/18(月) 22:55:31.76ID:agqFpTM+0 596です
規格での確認と該当箇所のコーディングを確認しました
ありがとうございました!
規格での確認と該当箇所のコーディングを確認しました
ありがとうございました!
604デフォルトの名無しさん (ワッチョイ af36-zS+j)
2017/12/19(火) 13:02:14.85ID:MoA6J0CR0 うむ、ご苦労。
605デフォルトの名無しさん (ワッチョイ af36-zS+j)
2017/12/20(水) 13:42:16.45ID:63AN+5MK0 sleep_untilで「何秒後」ではなく「何時に」という絶対時刻を指定する方法なんだけどさ
mktimeとfrom_time_tを使う方法しかないかね? なんかダサくてやなんだけど
mktimeとfrom_time_tを使う方法しかないかね? なんかダサくてやなんだけど
607デフォルトの名無しさん (ワッチョイ b723-54vE)
2017/12/20(水) 22:19:15.39ID:WOX+3yjn0 IDE:Visual Studio Express 2015 for Windows Desktop
浮動小数点モデル設定:Fast Math
コンパイルモード:Release
wWinMain関数内で
wchar_t str[ 16 ];
DirectX::XMMatrixOrthographicLH( 1.0f, 1.0f, 0.0f, 1.0f );
for( int i = 0;; i++ )
{
float f = i;
if( f > 0.0f ) break;
swprintf_s( str, L"%f", f );
}
と書くと、swprintf_sの結果が、期待される0.0ではなく、-0.0になります。
swprintf_sの行と上のif文の行を入れ替えると、0.0になります。
XMMatrixOrthographicLHがなかったり、Debugモードだったり、
Fast MathではなくデフォルトのPreciseだったりすると、
行の入れ替え関係なく0.0。
-0.0になるときは、何が始ま・・・起こってるんです?
浮動小数点モデル設定:Fast Math
コンパイルモード:Release
wWinMain関数内で
wchar_t str[ 16 ];
DirectX::XMMatrixOrthographicLH( 1.0f, 1.0f, 0.0f, 1.0f );
for( int i = 0;; i++ )
{
float f = i;
if( f > 0.0f ) break;
swprintf_s( str, L"%f", f );
}
と書くと、swprintf_sの結果が、期待される0.0ではなく、-0.0になります。
swprintf_sの行と上のif文の行を入れ替えると、0.0になります。
XMMatrixOrthographicLHがなかったり、Debugモードだったり、
Fast MathではなくデフォルトのPreciseだったりすると、
行の入れ替え関係なく0.0。
-0.0になるときは、何が始ま・・・起こってるんです?
609デフォルトの名無しさん (ワッチョイ c27e-mLIQ)
2017/12/20(水) 23:17:41.47ID:c/xU5Mb/0 コンパイラ固有のことなんか聞かれても誰も分からないと思うぞ
610デフォルトの名無しさん (ワッチョイ cfeb-W85D)
2017/12/21(木) 00:36:33.65ID:0IseKiC90611607 (ワッチョイ 0323-of2o)
2017/12/21(木) 01:46:36.50ID:tbJ2Dsuk0612デフォルトの名無しさん (ワッチョイ cf3f-tRgI)
2017/12/21(木) 08:39:02.54ID:ZD2kjVCM0 >>606
thx
thx
613デフォルトの名無しさん (ワッチョイ ff1b-7a68)
2017/12/21(木) 14:03:31.02ID:T6iOcz130 Gtkmmは4.0も出たのに、詳しい解説ページは2.4のママ・・・(´・ω・`)
でも俺はAPI見ながら頑張るぜ!
でも俺はAPI見ながら頑張るぜ!
614デフォルトの名無しさん (ワッチョイ 6fe7-7LW1)
2017/12/21(木) 18:40:48.26ID:AI7F/oif0 今だとC++でGUIやるならQtがデファクトだと思うからそっちの方がいいんじゃない?
GTK使えと命令されてる立場ならすまん
GTK使えと命令されてる立場ならすまん
615デフォルトの名無しさん (ワッチョイ bf7e-buzn)
2017/12/21(木) 18:46:54.04ID:/u9OILN10 Qtとかでかいしライセンスは高いし謎の独自拡張を使わされるわでかなり使いにくいんだが
そのくせ特別使いやすいわけではない
そのくせ特別使いやすいわけではない
616デフォルトの名無しさん (ワッチョイ 6fe7-7LW1)
2017/12/21(木) 18:49:02.51ID:AI7F/oif0 でもネットや本の情報は多そうじゃない?
まあ用途も聞かずに頭ごなしに勧めるもんではなかったなすまんかった
まあ用途も聞かずに頭ごなしに勧めるもんではなかったなすまんかった
617デフォルトの名無しさん (オッペケ Sr87-HMcx)
2017/12/21(木) 19:13:54.15ID:EBoVfuUTr 俺はwxWidgets派
618デフォルトの名無しさん (ワッチョイ ff98-v0tg)
2017/12/21(木) 20:31:35.72ID:6wHUNN6P0 gtk3一択!
619デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/22(金) 06:33:38.27ID:Mb+deFNF0 io2dまだかー。
ウニファイドコールシンタックス復活せよ〜。
ウニファイドコールシンタックス復活せよ〜。
620デフォルトの名無しさん (スプッッ Sd1f-k/7O)
2017/12/22(金) 06:57:32.16ID:v69hnew3d 基本的な動作について知りたい
msgrcvは、msgsndされた瞬間にキューがたまるから、キューが追加されたと同時に待機状態をやめて動き出す
これであってる??
あと、msgsndする先やmsgrcvで確認する先はmsggetで動的に確保された番号を知らないといけない
こうであってるかな?
msgrcvは、msgsndされた瞬間にキューがたまるから、キューが追加されたと同時に待機状態をやめて動き出す
これであってる??
あと、msgsndする先やmsgrcvで確認する先はmsggetで動的に確保された番号を知らないといけない
こうであってるかな?
621デフォルトの名無しさん (ワッチョイ a378-STQK)
2017/12/22(金) 10:05:15.55ID:H4ZK8i5q0 知らんわその関数の実装者に聞いてくれよ
622デフォルトの名無しさん (ワッチョイ 6fe7-7LW1)
2017/12/22(金) 23:15:32.80ID:lfzRUYy60 システムコールの話ならLinux板にでも行け
なんかのライブラリの話なら知ったこっちゃないわ
なんかのライブラリの話なら知ったこっちゃないわ
623デフォルトの名無しさん (ブーイモ MM67-Wig1)
2017/12/23(土) 00:52:53.65ID:KIhrhFKZM >>620
TRON系のOSかな?
TRON系のOSかな?
624デフォルトの名無しさん (ワッチョイ 339f-mAIl)
2017/12/23(土) 09:50:06.14ID:DCeTZoHD0 これ実行すると0と2が表示されるので一応は問題ないですか?汚いとは思うけど。
int main(void)
{
vector<int> vec;
vec.push_back(0);
vec.push_back(1);
vec.push_back(2);
for(vector<int>::iterator ite = vec.begin(); ite != vec.end();){
if(*ite == 1){
vec.erase(ite++);
printf("num: %d\n", *ite);
}else{
printf("num: %d\n", *ite);
++ite;
}
}
return 0;
}
int main(void)
{
vector<int> vec;
vec.push_back(0);
vec.push_back(1);
vec.push_back(2);
for(vector<int>::iterator ite = vec.begin(); ite != vec.end();){
if(*ite == 1){
vec.erase(ite++);
printf("num: %d\n", *ite);
}else{
printf("num: %d\n", *ite);
++ite;
}
}
return 0;
}
625デフォルトの名無しさん (ワッチョイ 7f25-I6sZ)
2017/12/23(土) 10:06:15.95ID:pfQ4NECA0626デフォルトの名無しさん (ワッチョイ 7f25-I6sZ)
2017/12/23(土) 10:16:01.07ID:pfQ4NECA0 おっと、質問は問題あるかどうかだった。
結論から言うと、問題はある。
0〜2までではなく0〜3までvectorに入れてから実行すれば、
まともに動作していないのは分かるはず。
結論から言うと、問題はある。
0〜2までではなく0〜3までvectorに入れてから実行すれば、
まともに動作していないのは分かるはず。
627デフォルトの名無しさん (ワッチョイ 339f-mAIl)
2017/12/23(土) 11:00:02.97ID:DCeTZoHD0628デフォルトの名無しさん (ワッチョイ 339f-mAIl)
2017/12/23(土) 11:17:57.62ID:DCeTZoHD0 一応はこれでもいけるってことですかね?削除した時は次の要素になるという理解でいいですか?
for(vector<int>::iterator ite = vec.begin(); ite != vec.end();){
if(*ite == 1){
vec.erase(ite);
}else{
++ite;
}
}
for(vector<int>::iterator ite = vec.begin(); ite != vec.end();){
if(*ite == 1){
vec.erase(ite);
}else{
++ite;
}
}
629デフォルトの名無しさん (ワッチョイ c3b3-buzn)
2017/12/23(土) 11:20:42.68ID:hf8FajHG0 eraceの戻り値が次のイテレータでは
630デフォルトの名無しさん (ワッチョイ 339f-mAIl)
2017/12/23(土) 11:40:33.04ID:DCeTZoHD0 これlistとvectorでも違いました。
listだと++しないと正常に動作せず
for(list<int>::iterator ite = lst.begin(); ite != lst.end();){
lst.erase(ite++);
}
vectorだと++すると上手く動作しない
for(vector<int>::iterator ite = vec.begin(); ite != vec.end();){
vec.erase(ite);
}
でもeraseの戻り値取得するのが一番いいですね。
listだと++しないと正常に動作せず
for(list<int>::iterator ite = lst.begin(); ite != lst.end();){
lst.erase(ite++);
}
vectorだと++すると上手く動作しない
for(vector<int>::iterator ite = vec.begin(); ite != vec.end();){
vec.erase(ite);
}
でもeraseの戻り値取得するのが一番いいですね。
631デフォルトの名無しさん (ワッチョイ 7f25-I6sZ)
2017/12/23(土) 11:45:41.24ID:pfQ4NECA0 std::vector::eraseのリファレンスに、こう書いてある。
https://cpprefjp.github.io/reference/vector/erase.html
削除された要素またはそれ以降の要素を指すイテレータや参照は無効になる。
これによると、vec.erase(ite); 実行後にはiteが無効になることになる。
あなたの環境だと、たまたまiteが削除した次の要素になったのかもしれないが、
それがすべての環境で成り立つ保証はない。
https://cpprefjp.github.io/reference/vector/erase.html
削除された要素またはそれ以降の要素を指すイテレータや参照は無効になる。
これによると、vec.erase(ite); 実行後にはiteが無効になることになる。
あなたの環境だと、たまたまiteが削除した次の要素になったのかもしれないが、
それがすべての環境で成り立つ保証はない。
632デフォルトの名無しさん (ワッチョイ 339f-mAIl)
2017/12/23(土) 12:08:32.26ID:DCeTZoHD0 >>631
基本的にはvectorは無効になるということですかね。
基本的にはvectorは無効になるということですかね。
633デフォルトの名無しさん (ワッチョイ f32d-KysX)
2017/12/23(土) 12:13:38.89ID:GP4QGgkb0 >>631
そのinvalidationは既に取得してるiteratorに起こるやつでは?
そのinvalidationは既に取得してるiteratorに起こるやつでは?
634デフォルトの名無しさん (ワッチョイ f378-tRgI)
2017/12/23(土) 12:16:58.11ID:82L7PCHk0 >>631
なんか変な説明だね
vector<int> vec{0, 1, 2};
auto ite = vec.begin();
++ite;
vec.erase(ite);
--ite;
cout << *ite; //これでvec[0]にアクセスできそうに聞こえる
内容的にはこういうことなのに
vec.m_head = realloc(vec.m_head, 2 * sizeof(int));
なんか変な説明だね
vector<int> vec{0, 1, 2};
auto ite = vec.begin();
++ite;
vec.erase(ite);
--ite;
cout << *ite; //これでvec[0]にアクセスできそうに聞こえる
内容的にはこういうことなのに
vec.m_head = realloc(vec.m_head, 2 * sizeof(int));
635デフォルトの名無しさん (ワッチョイ 339f-mAIl)
2017/12/23(土) 12:24:57.38ID:DCeTZoHD0 listだとこれで動くと思っていいのかな
for(list<int>::iterator ite = lst.begin(); ite != lst.end();){
lst.erase(ite++);
}
for(list<int>::iterator ite = lst.begin(); ite != lst.end();){
lst.erase(ite++);
}
636デフォルトの名無しさん (ワッチョイ cf5f-P2tI)
2017/12/23(土) 13:02:30.52ID:ncx5Vmyz0637デフォルトの名無しさん (ワントンキン MM9f-jmlw)
2017/12/23(土) 14:18:11.55ID:qpu4/MTSM そもそもこれ何してんの?
表示とともに要素を消したいならFILOなコンテナ使いなよ
std::stackみたいな
表示とともに要素を消したいならFILOなコンテナ使いなよ
std::stackみたいな
638デフォルトの名無しさん (ワッチョイ 339f-mAIl)
2017/12/23(土) 14:52:01.85ID:DCeTZoHD0639デフォルトの名無しさん (ワッチョイ cf8a-LdUP)
2017/12/23(土) 15:08:47.05ID:FpWOSq2z0 アホか
eraseの戻り値が何のためにあると思ってるんだ
eraseの戻り値が何のためにあると思ってるんだ
640デフォルトの名無しさん (ワッチョイ 339f-mAIl)
2017/12/23(土) 16:15:50.16ID:DCeTZoHD0641はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6f6f-buzn)
2017/12/23(土) 16:23:29.49ID:zbNC77HA0 vector だと要素の再配置が必要になるけど list はそうじゃないって話
642デフォルトの名無しさん (ワッチョイ ff61-Luxy)
2017/12/23(土) 17:51:30.26ID:eg9r3pR90 https://gabekore.org/vscode-c-windows
↑のサイトを見ながらCの開発環境を作っているのですがCの当たりから分からなくなってしまいました‥‥
説明のユーザー設定というものがそもそも無かったです‥‥ただの設定を開いたらこの画面になったのですが、この右に書いたのは合ってるのでしょうか‥‥?
このあとのDからはほんとによく分からなくなってしまいました‥‥この程度が出来ないなら、プログラミングなんて出来ないですよね‥‥(..;)
自分が不甲斐ないです‥‥-_-
https://i.imgur.com/VH9Yt5X.jpg
↑のサイトを見ながらCの開発環境を作っているのですがCの当たりから分からなくなってしまいました‥‥
説明のユーザー設定というものがそもそも無かったです‥‥ただの設定を開いたらこの画面になったのですが、この右に書いたのは合ってるのでしょうか‥‥?
このあとのDからはほんとによく分からなくなってしまいました‥‥この程度が出来ないなら、プログラミングなんて出来ないですよね‥‥(..;)
自分が不甲斐ないです‥‥-_-
https://i.imgur.com/VH9Yt5X.jpg
643デフォルトの名無しさん (ブーイモ MM67-P2tI)
2017/12/23(土) 18:33:23.06ID:wgR30Nr5M >>642
MacでもLinuxでも使えるVisual Studio Code Part2 [無断転載禁止]©2ch.net
http://mevius.5ch.net/test/read.cgi/tech/1494638671/
MacでもLinuxでも使えるVisual Studio Code Part2 [無断転載禁止]©2ch.net
http://mevius.5ch.net/test/read.cgi/tech/1494638671/
644デフォルトの名無しさん (ワッチョイ 6f9f-2x/m)
2017/12/23(土) 19:22:40.52ID:e2jvvoOp0 削除する場合とそうでない場合の処理を分ければOK
forでもwhileでもOK リストでもOK
std::vector<int> vec{ 0, 1, 2 };
auto it = vec.begin();
while (it != vec.end()) { if (*it == 1) it = vec.erase(it); else it++; }
for (auto n : vec) { printf("vec %d\n", n); }
std::list<int> list{ 0, 1, 2 };
auto it2 = list.begin();
while (it2 != list.end()) { if (*it2 == 1) it2 = list.erase(it2); else it2++; }
for (auto n : list) { printf("list %d\n", n); }
forでもwhileでもOK リストでもOK
std::vector<int> vec{ 0, 1, 2 };
auto it = vec.begin();
while (it != vec.end()) { if (*it == 1) it = vec.erase(it); else it++; }
for (auto n : vec) { printf("vec %d\n", n); }
std::list<int> list{ 0, 1, 2 };
auto it2 = list.begin();
while (it2 != list.end()) { if (*it2 == 1) it2 = list.erase(it2); else it2++; }
for (auto n : list) { printf("list %d\n", n); }
645デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/23(土) 20:28:00.26ID:0b4Aycyz0 >>640
根本的に勘違いしていると思うけどな。
× > eraseの戻り値使うのが一番いいのは分かったんですが
○ eraseの戻り値を使わなければならない(そうしないと意味がない)
× > 単にvectorとlistで動作が違うのが気になっただけです。
○ 戻り値を使えば同じソースコードになるように設計されている
何の為にイテレータを使うか分かっておらず、
イテレータ使えば効率が上がると勘違いしているJava鹿程度の知能なんだろ。
Linusが文句言っているのもこういう連中に対してなんだが。
根本的に勘違いしていると思うけどな。
× > eraseの戻り値使うのが一番いいのは分かったんですが
○ eraseの戻り値を使わなければならない(そうしないと意味がない)
× > 単にvectorとlistで動作が違うのが気になっただけです。
○ 戻り値を使えば同じソースコードになるように設計されている
何の為にイテレータを使うか分かっておらず、
イテレータ使えば効率が上がると勘違いしているJava鹿程度の知能なんだろ。
Linusが文句言っているのもこういう連中に対してなんだが。
646デフォルトの名無しさん (アウアウウー Sa67-bqMz)
2017/12/23(土) 20:52:04.70ID:qGqY4/PAa javaとかc#はイテレータで列挙してる最中に要素を削除できない
例外になる
例外になる
647デフォルトの名無しさん (アウアウウー Sa67-bqMz)
2017/12/23(土) 20:59:27.12ID:qGqY4/PAa C++ 使っててもLinusに馬鹿にされてるぞ
C原理主義者(OSつくってるひとたち)はC++を馬鹿にして
C++信者はCを馬鹿にする
滑稽だな
C原理主義者(OSつくってるひとたち)はC++を馬鹿にして
C++信者はCを馬鹿にする
滑稽だな
648デフォルトの名無しさん (ワッチョイ 0f7f-QnTz)
2017/12/23(土) 21:12:36.34ID:rmLkS6yi0 >>634
規格書の文言そのままの説明だと思う。
vec.erase(ite)の段階でiteは無効になるのでそれ以降は未定義だからvec[0]にアクセスできる保証はないという意味になる。
vector::eraseで領域の再確保は発生しないので削除する要素以前のiteratorは無効にならない。
vectorのiteratorをポインタで実装していれば次の要素をさしてそうなものだけど、そうでない実装、例えば削除した分だけ自動的にずらして同じ内容を指し続けてくれたり、例外を投げて間違いを知らせてくれるとかがありうる?
規格書の文言そのままの説明だと思う。
vec.erase(ite)の段階でiteは無効になるのでそれ以降は未定義だからvec[0]にアクセスできる保証はないという意味になる。
vector::eraseで領域の再確保は発生しないので削除する要素以前のiteratorは無効にならない。
vectorのiteratorをポインタで実装していれば次の要素をさしてそうなものだけど、そうでない実装、例えば削除した分だけ自動的にずらして同じ内容を指し続けてくれたり、例外を投げて間違いを知らせてくれるとかがありうる?
649デフォルトの名無しさん (ワッチョイ 6f9f-2x/m)
2017/12/23(土) 21:55:56.77ID:e2jvvoOp0 eraseの戻り値がなぜ必要かが分からないなら、vectorとiteratorの実装コード見て理解したらいいよ。
650デフォルトの名無しさん (ワッチョイ 0f7f-QnTz)
2017/12/23(土) 21:58:27.45ID:rmLkS6yi0 というか特定の値を消したかったらremove_if使おうぜ
651デフォルトの名無しさん (ワッチョイ ff61-Luxy)
2017/12/23(土) 22:28:45.69ID:eg9r3pR90 c++についての質問です。
call by reference あるいは call by value にて引数の受け渡しを行う関数を利用して、乱数発生ルーチンを評価し、評価得点法による最適次数n(<5)を求める場合どのようなプログラミングになるのでしょうか?
教えてください。よろしくお願いします。
ここまではできたんですが、このあとどうすればいいでしょうか?
https://i.imgur.com/XmuQ0Mw.jpg
call by reference あるいは call by value にて引数の受け渡しを行う関数を利用して、乱数発生ルーチンを評価し、評価得点法による最適次数n(<5)を求める場合どのようなプログラミングになるのでしょうか?
教えてください。よろしくお願いします。
ここまではできたんですが、このあとどうすればいいでしょうか?
https://i.imgur.com/XmuQ0Mw.jpg
653デフォルトの名無しさん (ワッチョイ bf7e-buzn)
2017/12/23(土) 23:03:07.74ID:gq/ENgXB0 何故カメラで撮った
654デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/23(土) 23:09:46.07ID:0b4Aycyz0 >>646
まあその実装の方が初心者向けには妥当だな。
C#はそこら辺の「割とどうでもいいが無駄に複雑になる」部分を回避していていいと思う。
ただまあ、この方向(堅牢性、容易さ)のベストは実行時例外ではなくコンパイルエラーであり、
C#もまだそこまでは行けてない、ということだね。
なおJavaScriptはその辺保証してない。「出来るだけ止めない」方針だからね。
> もしプロパティがある反復で修正された後に訪問されたなら、ループにより公開される値は後の時点での値となります。
> 訪問される前に削除されたプロパティは、それから後には訪問されません。
> オブジェクトに対する反復が起きている中でそのオブジェクトに追加されたプロパティは、訪問されるかもしれませんし反復から省略されるかもしれません。
> https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for...in
>>647
Linusが馬鹿にしているのは、意味もなく抽象化して喜んでいる馬鹿C++erだろ。
正しく抽象化している分には馬鹿にして無いと思うが。
とはいえ、OS組むならC++よりもCなのは事実だよ。
まあその実装の方が初心者向けには妥当だな。
C#はそこら辺の「割とどうでもいいが無駄に複雑になる」部分を回避していていいと思う。
ただまあ、この方向(堅牢性、容易さ)のベストは実行時例外ではなくコンパイルエラーであり、
C#もまだそこまでは行けてない、ということだね。
なおJavaScriptはその辺保証してない。「出来るだけ止めない」方針だからね。
> もしプロパティがある反復で修正された後に訪問されたなら、ループにより公開される値は後の時点での値となります。
> 訪問される前に削除されたプロパティは、それから後には訪問されません。
> オブジェクトに対する反復が起きている中でそのオブジェクトに追加されたプロパティは、訪問されるかもしれませんし反復から省略されるかもしれません。
> https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for...in
>>647
Linusが馬鹿にしているのは、意味もなく抽象化して喜んでいる馬鹿C++erだろ。
正しく抽象化している分には馬鹿にして無いと思うが。
とはいえ、OS組むならC++よりもCなのは事実だよ。
655デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/23(土) 23:26:16.74ID:0b4Aycyz0 >>648
>>631を理解できない馬鹿共は放置として、君の理解にも多分間違いがある。
> ありうる?
多分無い。
× vec.erase(ite)の段階でiteは無効になるのでそれ以降は未定義だから
○ vec.erase(ite)後にiteが指すのは「次の要素」であり、
元々指していた「削除された要素」ではないことを「無効」と表現している。
そしてそれ以前に「削除された要素」以降を指していた物も全部ずれるので、
「削除された要素またはそれ以降の要素を指すイテレータや参照は無効になる。」という表現になる。
つまり、この文字数であればきわめて妥当な表現であり、ゆとりが馬鹿すぎて理解できないだけ。
> vectorはシーケンスコンテナの一種で、各要素は線形に、順序を保ったまま格納される。
> https://cpprefjp.github.io/reference/vector.html
つまり、ド頭から密に詰められていることを規定されているので、
削除すれば当然次の要素が入るに決まっているし、
(これは君は正しく理解しているが)reallocはなされないし、
vec[0]についてもアクセス時点での先頭要素が取得できるに決まっている。←多分君はここを勘違いしている
>>631を理解できない馬鹿共は放置として、君の理解にも多分間違いがある。
> ありうる?
多分無い。
× vec.erase(ite)の段階でiteは無効になるのでそれ以降は未定義だから
○ vec.erase(ite)後にiteが指すのは「次の要素」であり、
元々指していた「削除された要素」ではないことを「無効」と表現している。
そしてそれ以前に「削除された要素」以降を指していた物も全部ずれるので、
「削除された要素またはそれ以降の要素を指すイテレータや参照は無効になる。」という表現になる。
つまり、この文字数であればきわめて妥当な表現であり、ゆとりが馬鹿すぎて理解できないだけ。
> vectorはシーケンスコンテナの一種で、各要素は線形に、順序を保ったまま格納される。
> https://cpprefjp.github.io/reference/vector.html
つまり、ド頭から密に詰められていることを規定されているので、
削除すれば当然次の要素が入るに決まっているし、
(これは君は正しく理解しているが)reallocはなされないし、
vec[0]についてもアクセス時点での先頭要素が取得できるに決まっている。←多分君はここを勘違いしている
656デフォルトの名無しさん (アウアウウー Sa67-bqMz)
2017/12/23(土) 23:28:50.54ID:qGqY4/PAa c原理主義者はそぎ落とされたロジックにしか興味ない
c++は彼らにとっては冗長なんだろう
GNUのツールセットのコードをみてると納得いく
しばらく見てると脳のワーキングメモリが不足しておかしくなりそうだ
が、残念なことにifとフラグとマクロ使いまくりの糞コードにも見える
c++は彼らにとっては冗長なんだろう
GNUのツールセットのコードをみてると納得いく
しばらく見てると脳のワーキングメモリが不足しておかしくなりそうだ
が、残念なことにifとフラグとマクロ使いまくりの糞コードにも見える
657デフォルトの名無しさん (ワッチョイ ff12-7LW1)
2017/12/23(土) 23:37:21.27ID:GYIu1tWX0 >>651
どうでもいいが知恵袋とのマルチだな
どうでもいいが知恵袋とのマルチだな
658デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/23(土) 23:51:11.43ID:0b4Aycyz0659デフォルトの名無しさん (ワッチョイ cf81-jmlw)
2017/12/23(土) 23:53:25.60ID:Rr/nHXks0 >>658
横レスだけどgrepとか結構すごいぞ
横レスだけどgrepとか結構すごいぞ
660デフォルトの名無しさん (ワッチョイ bf7e-buzn)
2017/12/23(土) 23:57:45.94ID:gq/ENgXB0 そこら辺は古すぎるので現在の常識とは異なる場合があると思うけど
661デフォルトの名無しさん (ワッチョイ ff12-7LW1)
2017/12/24(日) 00:00:12.41ID:ZACWf2Ud0 std::vector::erase - cppreference.com
http://en.cppreference.com/w/cpp/container/vector/erase
>Invalidates iterators and references at or after the point of the erase, including the end() iterator.
翻訳には肝心のモンが抜けてるんじゃあねえのか?
複数形のsとか
http://en.cppreference.com/w/cpp/container/vector/erase
>Invalidates iterators and references at or after the point of the erase, including the end() iterator.
翻訳には肝心のモンが抜けてるんじゃあねえのか?
複数形のsとか
662デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/24(日) 00:06:07.20ID:buA98p4W0 >>659
サンクス。見てみているが、まずGNUはこのコーディングルールがな…
ちなみにこれ、今時ハイライト(色づけ)されないのは何とかならないのかね。
http://git.savannah.gnu.org/cgit/grep.git/tree/src/grep.c
サンクス。見てみているが、まずGNUはこのコーディングルールがな…
ちなみにこれ、今時ハイライト(色づけ)されないのは何とかならないのかね。
http://git.savannah.gnu.org/cgit/grep.git/tree/src/grep.c
663デフォルトの名無しさん (ワッチョイ cf81-jmlw)
2017/12/24(日) 00:10:15.35ID:M6vPWOvg0664デフォルトの名無しさん (ワッチョイ bf7e-buzn)
2017/12/24(日) 00:13:30.13ID:4npOP+p60 Linusはプログラマの頂点ではないしGNUは最も優れたプロジェクトではない
既に手本にならない部分は多い
既に手本にならない部分は多い
665デフォルトの名無しさん (ワッチョイ 0f7f-QnTz)
2017/12/24(日) 00:15:10.13ID:CHij32pE0 >>655
>元々指していた「削除された要素」ではないことを「無効」と表現している。
そうなの?
規格ではclearとかresizeとかでも無効になる(invalidate)と書いてあるしeraseがそれと何か違うようにも見えないし、無効なiteratorをdereferenceするのは未定義だとも書いてあるように見えるけど。
>つまり、ド頭から密に詰められていることを規定されているので、
>削除すれば当然次の要素が入るに決まっているし、
>(これは君は正しく理解しているが)reallocはなされないし、
>vec[0]についてもアクセス時点での先頭要素が取得できるに決まっている。←多分君はここを勘違いしている
ポインタならそうだろうけどvectorのiteratorでも規格上保証されてるの?
ttps://stackoverflow.com/questions/45758659/does-stdvectorerase-really-invalidate-the-iterator-at-the-point-of-erase
>元々指していた「削除された要素」ではないことを「無効」と表現している。
そうなの?
規格ではclearとかresizeとかでも無効になる(invalidate)と書いてあるしeraseがそれと何か違うようにも見えないし、無効なiteratorをdereferenceするのは未定義だとも書いてあるように見えるけど。
>つまり、ド頭から密に詰められていることを規定されているので、
>削除すれば当然次の要素が入るに決まっているし、
>(これは君は正しく理解しているが)reallocはなされないし、
>vec[0]についてもアクセス時点での先頭要素が取得できるに決まっている。←多分君はここを勘違いしている
ポインタならそうだろうけどvectorのiteratorでも規格上保証されてるの?
ttps://stackoverflow.com/questions/45758659/does-stdvectorerase-really-invalidate-the-iterator-at-the-point-of-erase
666デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/24(日) 00:17:58.25ID:buA98p4W0 >>661
> including the end() iterator.
いや、これが抜けてる方が大問題だろ。
まあ広い意味では「それ以降の要素を指すイテレータ」に含まれるとも言えなくもないが、
これについては明記されるべきだね。
しかしこれだとイテレート中に削除していいのか?と心配になるが、
直ぐ下のサンプルコードで「偶数番目の要素を削除」してるからいけるんだろうね。
てか初心者なら、この辺のサンプルコードから出発した方がいいよ。いろんな意味で。
ちゃんと公式な使い方してあるし。(当然戻り値をイテレータに代入している)
> // Erase all even numbers (C++11 and later)
> for (auto it = c.begin(); it != c.end(); ) {
> if (*it % 2 == 0) {
> it = c.erase(it);
> } else {
> ++it;
> }
> }
> http://en.cppreference.com/w/cpp/container/vector/erase
> including the end() iterator.
いや、これが抜けてる方が大問題だろ。
まあ広い意味では「それ以降の要素を指すイテレータ」に含まれるとも言えなくもないが、
これについては明記されるべきだね。
しかしこれだとイテレート中に削除していいのか?と心配になるが、
直ぐ下のサンプルコードで「偶数番目の要素を削除」してるからいけるんだろうね。
てか初心者なら、この辺のサンプルコードから出発した方がいいよ。いろんな意味で。
ちゃんと公式な使い方してあるし。(当然戻り値をイテレータに代入している)
> // Erase all even numbers (C++11 and later)
> for (auto it = c.begin(); it != c.end(); ) {
> if (*it % 2 == 0) {
> it = c.erase(it);
> } else {
> ++it;
> }
> }
> http://en.cppreference.com/w/cpp/container/vector/erase
667デフォルトの名無しさん (ワッチョイ bf7e-buzn)
2017/12/24(日) 00:17:58.87ID:4npOP+p60 std::vector の場合はこう、std::list の場合はこう、とかいう知識はあまり意味がないのではないか?
erace() したら、erace() したところおよびその後を指していたイテレータ(=ポインタ)は使えなくなる、くらいで一括するのが妥当だと考える。
erace() したら、erace() したところおよびその後を指していたイテレータ(=ポインタ)は使えなくなる、くらいで一括するのが妥当だと考える。
669デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/24(日) 00:23:13.30ID:DlgRUKPs0 細かい場合分けするのはプログラミング的に悪だと思ってる。
統合的に丸っと処理できると気持ちいい。
なのでちょっと粒度を上げてSTLの作法というものを考えた方がイイ。
統合的に丸っと処理できると気持ちいい。
なのでちょっと粒度を上げてSTLの作法というものを考えた方がイイ。
670デフォルトの名無しさん (ワッチョイ cf81-jmlw)
2017/12/24(日) 00:39:36.50ID:M6vPWOvg0 >>667
無理ならそういえばいいのに
無理ならそういえばいいのに
671デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/24(日) 00:49:18.45ID:buA98p4W0 >>665
つか、君は何に文句を言っているのだ?そこにそのまま書いてあるだろ。
> When describing iterator invalidation,
> the C++ standard takes the simplifying assumption that iterators refer to elements,
> and a valid iterator value always refers to same element.
> Invalidating references, pointers or iterators to an element all follow the same rules. (The exception is the end iterator).
>
> Clearly references or pointers to the erased element are invalidated by a call to erase,
> thus under the standard's simple rules so are all iterators.
> It could have described what new element must be moved in place abd substituted what iterators refer to,
> but the writers of the standard chise not to go there. They instead simply dictated the iterator was invalid.
eraseでvecが移動しないことは保証されてるだろ。
当然vec[0]は削除後の先頭要素を指す。
ただしそもそも削除後にイテレータを再代入してないコートについては知るかボケだろ。
それについてもそこにモロに書いてあるし。
そのページは俺の言い分を全く書いてあるような物なんだが、何が言いたいんだ?
つか、君は何に文句を言っているのだ?そこにそのまま書いてあるだろ。
> When describing iterator invalidation,
> the C++ standard takes the simplifying assumption that iterators refer to elements,
> and a valid iterator value always refers to same element.
> Invalidating references, pointers or iterators to an element all follow the same rules. (The exception is the end iterator).
>
> Clearly references or pointers to the erased element are invalidated by a call to erase,
> thus under the standard's simple rules so are all iterators.
> It could have described what new element must be moved in place abd substituted what iterators refer to,
> but the writers of the standard chise not to go there. They instead simply dictated the iterator was invalid.
eraseでvecが移動しないことは保証されてるだろ。
当然vec[0]は削除後の先頭要素を指す。
ただしそもそも削除後にイテレータを再代入してないコートについては知るかボケだろ。
それについてもそこにモロに書いてあるし。
そのページは俺の言い分を全く書いてあるような物なんだが、何が言いたいんだ?
672デフォルトの名無しさん (ワッチョイ cf8a-LdUP)
2017/12/24(日) 01:05:17.93ID:pxiUCfvD0 そもそもeraseするならvectorなんか使うな。よっぽど小さいvectorじゃない限り
eraseは縮小操作だからリアロケーションは起きないけどその時何が起こるのか理解してるのか?
理解できないならお前はC++を使えないやつ
eraseは縮小操作だからリアロケーションは起きないけどその時何が起こるのか理解してるのか?
理解できないならお前はC++を使えないやつ
673デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/24(日) 01:25:35.46ID:buA98p4W0 >>659
こんなもんじゃね?みたいな感じなんだが。
決して理解したわけではなく、雰囲気だけしか見てないが。
C特有のstructの嵐でもなく、
今ならIDEが警告出してくるほどのif文等のネストもなく、
意味不明なマ黒魔術使いまくりでもない。
グローバルが嵐になっているが、これはCUIツールだから大して問題ないし。
色が付いてないのとコーディングルールがアレなので詳しく読む気にならないが、
整形ツール通せば結構読めるコードのような気がする。
こんなもんじゃね?みたいな感じなんだが。
決して理解したわけではなく、雰囲気だけしか見てないが。
C特有のstructの嵐でもなく、
今ならIDEが警告出してくるほどのif文等のネストもなく、
意味不明なマ黒魔術使いまくりでもない。
グローバルが嵐になっているが、これはCUIツールだから大して問題ないし。
色が付いてないのとコーディングルールがアレなので詳しく読む気にならないが、
整形ツール通せば結構読めるコードのような気がする。
674デフォルトの名無しさん (ワッチョイ 0f7f-QnTz)
2017/12/24(日) 01:43:03.65ID:CHij32pE0 >>671
>eraseでvecが移動しないことは保証されてるだろ。
>当然vec[0]は削除後の先頭要素を指す。
誰もそんなことは問題にもしてないんだが大丈夫?
偉そうなことを言ってる割には全然読めてないんだなあ
>eraseでvecが移動しないことは保証されてるだろ。
>当然vec[0]は削除後の先頭要素を指す。
誰もそんなことは問題にもしてないんだが大丈夫?
偉そうなことを言ってる割には全然読めてないんだなあ
675デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/24(日) 01:44:55.52ID:buA98p4W0 >>674
日本語でおk
日本語でおk
676デフォルトの名無しさん (ワッチョイ 0f7f-QnTz)
2017/12/24(日) 02:04:36.00ID:CHij32pE0677デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/24(日) 02:08:57.97ID:buA98p4W0 >>676
韓国人死ね
韓国人死ね
678デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/24(日) 02:11:04.69ID:DlgRUKPs0 ん?これは痛い。
>>634
ite = vec.begin()
++ite;
ite = vec.erase(ite);
--ite;
であれば ite == vec.begin(); は保障できるが、
vec.erase(ite)
とした場合の ite の値は、コンテナ vec のどこかを指している保障はないのでは?
したがって、--ite もどこを指しているか保障がないのでは?
典拠を示してほしい
ite = vec.begin()
++ite;
ite = vec.erase(ite);
--ite;
であれば ite == vec.begin(); は保障できるが、
vec.erase(ite)
とした場合の ite の値は、コンテナ vec のどこかを指している保障はないのでは?
したがって、--ite もどこを指しているか保障がないのでは?
典拠を示してほしい
680デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/24(日) 02:19:46.66ID:DlgRUKPs0 イテレータを削除したときあり得る処置。
一個目。
メモリの再確保相当のことをして再構築する。
二個目。
尻尾の要素をムーブして詰めて最後の要素を開ける。
このどっちかだと思う。
2個目だとイテレータのロストはしないかもしれないが、
1個目だとアドレスが変わっちゃうのでイテレータが保持しているアドレスは無効。
両方あり得るのでeraseの戻り値はちゃんと受け取ろう。
一個目。
メモリの再確保相当のことをして再構築する。
二個目。
尻尾の要素をムーブして詰めて最後の要素を開ける。
このどっちかだと思う。
2個目だとイテレータのロストはしないかもしれないが、
1個目だとアドレスが変わっちゃうのでイテレータが保持しているアドレスは無効。
両方あり得るのでeraseの戻り値はちゃんと受け取ろう。
681デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/24(日) 02:38:56.42ID:buA98p4W0 >>680
お前もちゃんと読めよ
> 戻り値
> 削除された要素の次の要素を指すイテレータを返す。
> そのような要素が存在しない場合は、end()を返す。
> さらに、削除された要素以降の要素の数と同じ回数のTのムーブ代入演算子が呼ばれる。
> https://cpprefjp.github.io/reference/vector/erase.html
つかC++にはGCねえんだよ
Java鹿死ね
お前もちゃんと読めよ
> 戻り値
> 削除された要素の次の要素を指すイテレータを返す。
> そのような要素が存在しない場合は、end()を返す。
> さらに、削除された要素以降の要素の数と同じ回数のTのムーブ代入演算子が呼ばれる。
> https://cpprefjp.github.io/reference/vector/erase.html
つかC++にはGCねえんだよ
Java鹿死ね
682デフォルトの名無しさん (ワッチョイ 6fe7-7LW1)
2017/12/24(日) 02:50:37.41ID:3RxhFT7A0 規格にきっちりかっちり書いてある挙動について
あり得る処置(キリッ
とか抜かして適当な憶測垂れ流す奴がいるんだな
あり得る処置(キリッ
とか抜かして適当な憶測垂れ流す奴がいるんだな
683デフォルトの名無しさん (ワッチョイ cfe8-HMcx)
2017/12/24(日) 02:59:23.68ID:Vn0hcFlX0 なんか話が混ざってる気がするけど、eraseに渡した引数のイテレータの話じゃないの?
684デフォルトの名無しさん (ワッチョイ 0f7f-QnTz)
2017/12/24(日) 03:05:24.20ID:CHij32pE0 >>681
>○ vec.erase(ite)後にiteが指すのは「次の要素」であり、
>元々指していた「削除された要素」ではないことを「無効」と表現している。
とか書いちゃう人が言っても説得力ないけどねw
>○ vec.erase(ite)後にiteが指すのは「次の要素」であり、
>元々指していた「削除された要素」ではないことを「無効」と表現している。
とか書いちゃう人が言っても説得力ないけどねw
685デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/24(日) 05:55:00.21ID:DlgRUKPs0 >>681
GCどっから出てきた。韓国人といい。話が飛躍しすぎ。
GCどっから出てきた。韓国人といい。話が飛躍しすぎ。
686デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/24(日) 06:05:35.39ID:DlgRUKPs0 >>682
小出しにしないでブッコンで行け。
小出しにしないでブッコンで行け。
687デフォルトの名無しさん (ワッチョイ ff34-bbRz)
2017/12/24(日) 09:02:08.85ID:LF0oxcI10 昔のvectorは同一メモリ上にデータが配置されていることは保障されていなかったから昔の環境でなにか作る場合は注意したほうがいい。
そういう処理系が存在するのかどうか疑問だけど。
そういう処理系が存在するのかどうか疑問だけど。
688デフォルトの名無しさん (ワッチョイ f378-tRgI)
2017/12/24(日) 10:15:11.27ID:QEOGdK3r0689デフォルトの名無しさん (ワッチョイ f378-tRgI)
2017/12/24(日) 10:18:18.02ID:QEOGdK3r0 >>687
え??
昔ってどのくらいのことを言っている?
そもそも連続領域でなければリストと同じ特性になってしまい
配列であることのメリットが完全に失われるだろ
ポインタの配列になっていて実体はばらばらでもよいということならわかるが
え??
昔ってどのくらいのことを言っている?
そもそも連続領域でなければリストと同じ特性になってしまい
配列であることのメリットが完全に失われるだろ
ポインタの配列になっていて実体はばらばらでもよいということならわかるが
690デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/24(日) 10:26:48.95ID:buA98p4W0 >>649
横だが。
ソース見ろとよく言っている奴が居るので偶には、ってやってるんだが、
どこにあるかわかりにくい上に何だかなあ、なコードなんだが。
とりあえずこれでいいのか?
https://gcc.gnu.org/onlinedocs/gcc-4.6.2/libstdc++/api/a01116_source.html
そしてiterator.cがどこにあるか分からないという、、、
同様の奴もいるが、あまりオススメはされてない。
https://stackoverflow.com/questions/4304783/c-vector-source-code
> 00402 iterator
> 00403 erase(iterator __position)
> 00404 {
> 00405 typename _Base::iterator __res = _Base::erase(__position.base());
> 00406 return iterator(__res, this);
> 00407 }
> 上側URL
__position.base()ってのは<T>だから致し方なしかもしれんが、
確かにこれだとC使いにとってはC++は冗長すぎる。
> c原理主義者はそぎ落とされたロジックにしか興味ない
> c++は彼らにとっては冗長なんだろう (>>656)
は当たってる。
横だが。
ソース見ろとよく言っている奴が居るので偶には、ってやってるんだが、
どこにあるかわかりにくい上に何だかなあ、なコードなんだが。
とりあえずこれでいいのか?
https://gcc.gnu.org/onlinedocs/gcc-4.6.2/libstdc++/api/a01116_source.html
そしてiterator.cがどこにあるか分からないという、、、
同様の奴もいるが、あまりオススメはされてない。
https://stackoverflow.com/questions/4304783/c-vector-source-code
> 00402 iterator
> 00403 erase(iterator __position)
> 00404 {
> 00405 typename _Base::iterator __res = _Base::erase(__position.base());
> 00406 return iterator(__res, this);
> 00407 }
> 上側URL
__position.base()ってのは<T>だから致し方なしかもしれんが、
確かにこれだとC使いにとってはC++は冗長すぎる。
> c原理主義者はそぎ落とされたロジックにしか興味ない
> c++は彼らにとっては冗長なんだろう (>>656)
は当たってる。
691デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/24(日) 10:56:02.77ID:DlgRUKPs0 >>689
C++は厳密な定義を始めたのはここ最近の話で昔はほぼ実装に丸投げしてた。
これは、きゃするのように仮想コンピュータを定義しないでやってきたツケだな。
ぼんやりとコンピュータっていうものの抽象化イメージだけで進んできた。
あと、C++はわからないけど、Cはとあるコンピュータに依存するものは規格に入れない決まりになってたと思う。
C++は厳密な定義を始めたのはここ最近の話で昔はほぼ実装に丸投げしてた。
これは、きゃするのように仮想コンピュータを定義しないでやってきたツケだな。
ぼんやりとコンピュータっていうものの抽象化イメージだけで進んできた。
あと、C++はわからないけど、Cはとあるコンピュータに依存するものは規格に入れない決まりになってたと思う。
692デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/24(日) 12:00:47.90ID:buA98p4W0693デフォルトの名無しさん (ワッチョイ cf8a-LdUP)
2017/12/24(日) 12:03:39.37ID:pxiUCfvD0 この手のキチガイが湧いてくるまでになったか
このスレももう終わりだな
このスレももう終わりだな
694デフォルトの名無しさん (ワッチョイ ffe7-Eeo6)
2017/12/24(日) 12:22:41.71ID:8qRcljjK0 流れ読んでないけどvec[0]が無効になるって発言したやつがいるから荒れてるの?
695デフォルトの名無しさん (ワッチョイ 0f7f-QnTz)
2017/12/24(日) 12:29:05.39ID:CHij32pE0 真に受けてソース読んでるしw というか読めてないしwww
実装見ても理由なんて分かるわけないだろ
質問者の使ってる実装は動いてしまう実装なんだから
実装見ても理由なんて分かるわけないだろ
質問者の使ってる実装は動いてしまう実装なんだから
696デフォルトの名無しさん (ワッチョイ 0f7f-QnTz)
2017/12/24(日) 12:30:40.54ID:CHij32pE0697デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/24(日) 12:34:48.10ID:DlgRUKPs0 >>692
俺が死んだら責任とってくれるんだよね?
俺が死んだら責任とってくれるんだよね?
698デフォルトの名無しさん (スップ Sd1f-Owf0)
2017/12/24(日) 12:38:20.58ID:PCWcyI8Bd 遺書を書いて死んだら>>692は事情聴取くらいはされるかもね
699デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/24(日) 12:39:11.17ID:DlgRUKPs0 軽いなぁ。
700デフォルトの名無しさん (スップ Sd1f-Owf0)
2017/12/24(日) 12:39:11.70ID:PCWcyI8Bd 「>>692に死ねと言われたので死にます」
701デフォルトの名無しさん (ワッチョイ bfeb-7LW1)
2017/12/24(日) 12:41:53.58ID:/fWBjJNa0 このスレ頭おかしいのとプログラミングスキルでイキリ散らしたいのしかいねえな
702デフォルトの名無しさん (ワッチョイ cf81-+obY)
2017/12/24(日) 12:42:40.51ID:kxsG1FMj0 令状出れば家宅捜査とPCの押収くらいはしそう
703デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/24(日) 12:58:57.63ID:DlgRUKPs0 俺は叩き合いが面倒だから理由つけてしゃべってるのに、問答無用で死ねはひどいよなぁ。
完璧超人じゃないから間違いの一つや二つくらいするよ。
なぁ。完璧超人。鏡見てみたらいいと思うよ。自分ぶっ殺したくなると思うよ。
完璧超人じゃないから間違いの一つや二つくらいするよ。
なぁ。完璧超人。鏡見てみたらいいと思うよ。自分ぶっ殺したくなると思うよ。
704デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/24(日) 13:42:19.40ID:DlgRUKPs0 寝る。
705デフォルトの名無しさん (ワッチョイ 73f3-tRgI)
2017/12/24(日) 19:53:35.49ID:DS5eJCmj0 > プログラミングスキルでイキリ散らしたい
ニヤニヤ
ニヤニヤ
706デフォルトの名無しさん (ワッチョイ ff34-bbRz)
2017/12/25(月) 18:50:42.37ID:IE33Y1720 文献に書いてあることが全てだと真信してマニュアル通りに事を進めていくってまぁ受験とかならソレで良いかもしれないけどね。
物事の成り立ちを追っていくと決してその通りではないことも世の中にあるわけできちんとそういう所は汲み取っていかないとただ
の鉄砲玉みたいな一番扱いが厄介な「無能な働き者」になってしまうよ。
特にこの業界では型にはまってばかりの柔軟性のない>>692みたいな思想の違うものは徹底的に粛清しようとするワンマン堅物野郎は淘汰されるべきだと思うけどね。
物事の成り立ちを追っていくと決してその通りではないことも世の中にあるわけできちんとそういう所は汲み取っていかないとただ
の鉄砲玉みたいな一番扱いが厄介な「無能な働き者」になってしまうよ。
特にこの業界では型にはまってばかりの柔軟性のない>>692みたいな思想の違うものは徹底的に粛清しようとするワンマン堅物野郎は淘汰されるべきだと思うけどね。
707デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/25(月) 18:53:10.54ID:8OH7D8YO0708デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/25(月) 18:54:43.46ID:8OH7D8YO0 >>706
日本語でおk
日本語でおk
709デフォルトの名無しさん (ワッチョイ ffe7-89OF)
2017/12/25(月) 20:36:12.13ID:rz4NQFmP0710デフォルトの名無しさん (ワッチョイ 4371-0jja)
2017/12/25(月) 22:20:40.14ID:PDFy/wgd0 初心者ですがGC付きの言語しかやったことないのでメモリ管理について質問させてください
例えば下記のようなコードでは、hoge関数で確保したvector用のメモリはGCがないためプログラムが終了するまで解放されないということでしょうか?
少なくともpiyo関数が終了するまでは残ってないと使えないですよね?
vector<string> hoge(){
vector<string> v = {"hoge", "piyo"};
return v;
}
string piyo(){
vector<string> v2 = hoge();
string s = v2[0] + v2[1];
return s;
}
int main(){
cout << piyo();
}
例えば下記のようなコードでは、hoge関数で確保したvector用のメモリはGCがないためプログラムが終了するまで解放されないということでしょうか?
少なくともpiyo関数が終了するまでは残ってないと使えないですよね?
vector<string> hoge(){
vector<string> v = {"hoge", "piyo"};
return v;
}
string piyo(){
vector<string> v2 = hoge();
string s = v2[0] + v2[1];
return s;
}
int main(){
cout << piyo();
}
711デフォルトの名無しさん (ワッチョイ 7ff9-qy4x)
2017/12/25(月) 22:33:37.01ID:Ie/0MXd20 まずはスタックとヒープをググって調べてみるといいかも。
712デフォルトの名無しさん (ワッチョイ 4371-0jja)
2017/12/25(月) 22:47:27.89ID:PDFy/wgd0 >>711
ヒープってオブジェクトをインスタンス化したときに割り当てられるメモリ領域って認識なんですが合ってますか?
Cは関数内で宣言したローカル変数に配列を代入しても関数外に引き継げないのでまだわかるのですが、C++の考え方が掴めず混乱してます……
ヒープってオブジェクトをインスタンス化したときに割り当てられるメモリ領域って認識なんですが合ってますか?
Cは関数内で宣言したローカル変数に配列を代入しても関数外に引き継げないのでまだわかるのですが、C++の考え方が掴めず混乱してます……
713デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/25(月) 23:11:18.12ID:8OH7D8YO0 >>706
ヘタレか?
お前の喧嘩を買ってやると言っているのだから、
馬鹿パヨク韓国人なりの論理を展開してみろよ。
状況としては、2chは地域の公園のようなもので、
誰でも自由に入って楽しむことは出来るが、
飼い犬のウンコをまき散らして帰るような奴は二度と来るな、と当然思われる。
それを俺は、はっきり言ってやってるだけだ。
お前らは馬鹿すぎて理解できないようだから、直接的に言うしかない。
韓国人死ね
で、それで俺を嫌うのはお前らの自由だが、当然それでは何も解決しない。
お前らが迷惑行為を続け、他の連中に嫌われ続けるのも変わらないからだ。
何でも他人のせいにして被害者ぶるのはマジでムカつかれるから止めた方がいい。
嫌われる原因はお前ら自身にある。特に匿名掲示板ではそうだ。
ヘタレか?
お前の喧嘩を買ってやると言っているのだから、
馬鹿パヨク韓国人なりの論理を展開してみろよ。
状況としては、2chは地域の公園のようなもので、
誰でも自由に入って楽しむことは出来るが、
飼い犬のウンコをまき散らして帰るような奴は二度と来るな、と当然思われる。
それを俺は、はっきり言ってやってるだけだ。
お前らは馬鹿すぎて理解できないようだから、直接的に言うしかない。
韓国人死ね
で、それで俺を嫌うのはお前らの自由だが、当然それでは何も解決しない。
お前らが迷惑行為を続け、他の連中に嫌われ続けるのも変わらないからだ。
何でも他人のせいにして被害者ぶるのはマジでムカつかれるから止めた方がいい。
嫌われる原因はお前ら自身にある。特に匿名掲示板ではそうだ。
714片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd1f-1u/G)
2017/12/25(月) 23:19:00.09ID:OWjcriO+d 一秒一秒大切に。 Please don't waste your time.
715デフォルトの名無しさん (ワッチョイ a378-STQK)
2017/12/25(月) 23:23:13.44ID:hqAAE/zx0 vector<string> ←これはコピー
vector<string>& ←これは参照
戻り型を参照にしたらプログラムがあぼーんするけどね
vector<string>& ←これは参照
戻り型を参照にしたらプログラムがあぼーんするけどね
716デフォルトの名無しさん (ワッチョイ 4371-0jja)
2017/12/25(月) 23:31:00.53ID:PDFy/wgd0717デフォルトの名無しさん (ワッチョイ a378-STQK)
2017/12/25(月) 23:37:09.45ID:hqAAE/zx0718デフォルトの名無しさん (ワッチョイ 4371-0jja)
2017/12/25(月) 23:40:36.26ID:PDFy/wgd0719デフォルトの名無しさん (ワッチョイ cf80-fDvV)
2017/12/26(火) 01:22:10.13ID:gkP6o6Ks0 vector<string> hoge(){
vector<string> v = {"hoge", "piyo"};
return v;
}
vector<string> v2 = hoge();
関数スコープを抜けたら、関数内のオブジェクトは、自動的に消滅する。
return した瞬間に、代入演算子で、コンテナ内のデータをすべてコピーするのかも。
2重にデータを作るから、無駄
一方、参照型の言語では、primitive 以外は、すべてオブジェクトで、参照で扱う。
コンテナの参照(アドレス)をコピーするだけだから、オブジェクトは1つだけ
f(ref inout){ 〜 }
C/C++ だけ、関数の引数に、更新用の参照を渡して、
関数内部で、そのオブジェクト・コンテナを更新することを、明確にした方が良いかも
vector<string> v = {"hoge", "piyo"};
return v;
}
vector<string> v2 = hoge();
関数スコープを抜けたら、関数内のオブジェクトは、自動的に消滅する。
return した瞬間に、代入演算子で、コンテナ内のデータをすべてコピーするのかも。
2重にデータを作るから、無駄
一方、参照型の言語では、primitive 以外は、すべてオブジェクトで、参照で扱う。
コンテナの参照(アドレス)をコピーするだけだから、オブジェクトは1つだけ
f(ref inout){ 〜 }
C/C++ だけ、関数の引数に、更新用の参照を渡して、
関数内部で、そのオブジェクト・コンテナを更新することを、明確にした方が良いかも
720はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6f6f-buzn)
2017/12/26(火) 01:29:42.80ID:rFvAy7ZC0721デフォルトの名無しさん (アウアウウー Sa67-bqMz)
2017/12/26(火) 01:41:08.77ID:OUkXE0b1a722デフォルトの名無しさん (ワッチョイ cf80-fDvV)
2017/12/26(火) 02:06:41.75ID:gkP6o6Ks0 Rust には、オブジェクトの所有権という概念がある
代入で、所有権がmove する。
オブジェクトはコピーされず、1つだけで、所有権が移動するだけ
こういう概念が、言語ルールにあるから明確
代入で、所有権がmove する。
オブジェクトはコピーされず、1つだけで、所有権が移動するだけ
こういう概念が、言語ルールにあるから明確
723はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6f6f-buzn)
2017/12/26(火) 02:14:08.86ID:rFvAy7ZC0724デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/26(火) 02:20:19.84ID:TW1LjN+M0 弱いものを踏みつけて偉い事を誇示しないと生きていけないなんてかわいそう。
それだけがやり方だと思ってるんだったら先はない。
それだけがやり方だと思ってるんだったら先はない。
725デフォルトの名無しさん (ワッチョイ 93fb-tRgI)
2017/12/26(火) 06:35:31.17ID:yJ/B7pz80726デフォルトの名無しさん (ワッチョイ 93fb-tRgI)
2017/12/26(火) 06:52:36.87ID:yJ/B7pz80 >>691
実装を限定はしていなかったというだけの話か?
だとしたら興醒めだな
確かに昔のC++は実装と提供の分離が論点なので
vectorの実装がリストでも文句をぬかすな、だったが
じゃあ何でvectorの他にlistがあるのかって話
実装を限定はしていなかったというだけの話か?
だとしたら興醒めだな
確かに昔のC++は実装と提供の分離が論点なので
vectorの実装がリストでも文句をぬかすな、だったが
じゃあ何でvectorの他にlistがあるのかって話
727デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/26(火) 07:14:27.81ID:TW1LjN+M0 昔は規格書に書いてある通り実装されてないことがよくあったって話だが、これ書けばよかったな。
だから大半のことは実装依存だった。
今頃になってりーぬすに怒られたからメモリの構成の話してるんだぜ。
仮想コンピュータの仕様でも決まってりゃ今頃3D扱っててもおかしくない。
今頃2Dをやっと扱えるようにしようとか言ってるんだから。まぁ、ないよりいいから期待はしてるが。
だから大半のことは実装依存だった。
今頃になってりーぬすに怒られたからメモリの構成の話してるんだぜ。
仮想コンピュータの仕様でも決まってりゃ今頃3D扱っててもおかしくない。
今頃2Dをやっと扱えるようにしようとか言ってるんだから。まぁ、ないよりいいから期待はしてるが。
728デフォルトの名無しさん (ワッチョイ 93fb-tRgI)
2017/12/26(火) 09:51:51.57ID:yJ/B7pz80 あほ
vectorの要素アクセス速度が添え字に比例してたら
リーナスでなくてもキレるわ
それで誰も使わなくなったライブラリがあとで改訂なんかされるかよ
# リーナス? ここC++スレだが
vectorの要素アクセス速度が添え字に比例してたら
リーナスでなくてもキレるわ
それで誰も使わなくなったライブラリがあとで改訂なんかされるかよ
# リーナス? ここC++スレだが
729デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/26(火) 10:01:52.49ID:TW1LjN+M0 メモリーオーダという話を最近始めた。
http://en.cppreference.com/w/cpp/atomic/memory_order
これだったかな?
valarrayさんが救済される日は来るのか。
ここ10年位で委員会の人が突っ込み入れるようになったけど、それ以前は忖度されてて誰も何も言わなかった。
だから、MSのコンパイラはタコだったんだよ。
http://en.cppreference.com/w/cpp/atomic/memory_order
これだったかな?
valarrayさんが救済される日は来るのか。
ここ10年位で委員会の人が突っ込み入れるようになったけど、それ以前は忖度されてて誰も何も言わなかった。
だから、MSのコンパイラはタコだったんだよ。
730デフォルトの名無しさん (ワッチョイ 93fb-tRgI)
2017/12/26(火) 10:12:55.95ID:yJ/B7pz80 ああ、最近こんな話を聞いたと自慢に来ていたのか
気の毒だがその話とvectorの実装はまるで無関係だ
悪いが俺はもう付き合ってらんねえ
気の毒だがその話とvectorの実装はまるで無関係だ
悪いが俺はもう付き合ってらんねえ
731デフォルトの名無しさん (ワッチョイ 6fe7-7LW1)
2017/12/26(火) 18:46:36.46ID:qo4+F5LQ0 unordered_set<valarray>でひどい目に遭ったのは俺だけじゃないはずだ
732デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/26(火) 19:09:46.14ID:NpjbrU9/0 >>724
僕は韓国人です、ブーメランおいしい、まで読んだ
>>727
>>729
お前は何のためにここに来ているんだ?
全く脈略のない昔語りなんて、老害以外の何者でもない。
しかも内容は間違いだらけだし。
お前みたいな認知バイアス馬鹿には
> 問答無用で死ねはひどいよなぁ (703=お前)
と取れるようだから、俺がわざわざ分かりやすく、
お前が死ななければならい理由707,713を書いてやったんだ。
ちゃんと読んで死ね
> 鏡見てみたらいいと思うよ。自分ぶっ殺したくなると思うよ。 (703=お前)
むしろお前が680を書いていてまだ生きているのが不思議なんだが。
さすがゴキブリといったところか。
韓国人死ね
僕は韓国人です、ブーメランおいしい、まで読んだ
>>727
>>729
お前は何のためにここに来ているんだ?
全く脈略のない昔語りなんて、老害以外の何者でもない。
しかも内容は間違いだらけだし。
お前みたいな認知バイアス馬鹿には
> 問答無用で死ねはひどいよなぁ (703=お前)
と取れるようだから、俺がわざわざ分かりやすく、
お前が死ななければならい理由707,713を書いてやったんだ。
ちゃんと読んで死ね
> 鏡見てみたらいいと思うよ。自分ぶっ殺したくなると思うよ。 (703=お前)
むしろお前が680を書いていてまだ生きているのが不思議なんだが。
さすがゴキブリといったところか。
韓国人死ね
733片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ c3b3-PGwP)
2017/12/26(火) 20:31:37.65ID:i/UGO9LX0 >>732 時間の無駄だ。life timeを無駄にするな。
734デフォルトの名無しさん (ワッチョイ 239f-7LW1)
2017/12/26(火) 20:39:22.90ID:NpjbrU9/0 >>733
あなたがどう思おうがあなたの自由だが、俺は短期的視野で動いているわけではない。
あなたがどう思おうがあなたの自由だが、俺は短期的視野で動いているわけではない。
735デフォルトの名無しさん (ワッチョイ 0380-uc05)
2017/12/26(火) 21:31:42.92ID:WRs+G+g20 >>727
仮想マシンどころか現在存在するメジャーなインタプリタ言語の仕様にすら3Dはおろか2Dすら無いんだが。
仮想マシンどころか現在存在するメジャーなインタプリタ言語の仕様にすら3Dはおろか2Dすら無いんだが。
736デフォルトの名無しさん (ワッチョイ 6fe7-7LW1)
2017/12/26(火) 22:46:28.20ID:qo4+F5LQ0 Pythonには標準でTcl/Tkくっついてるぞ
737デフォルトの名無しさん (アウアウウー Sa67-bqMz)
2017/12/26(火) 22:51:40.52ID:OUkXE0b1a えっ?
738デフォルトの名無しさん (ブーイモ MM27-P2tI)
2017/12/26(火) 23:32:54.20ID:qDwd0bsiM >>735
仮想マシンどころかってjavaとかc#とかのことさしてるの?
仮想マシンどころかってjavaとかc#とかのことさしてるの?
739デフォルトの名無しさん (ワッチョイ 2304-615/)
2017/12/27(水) 00:16:12.80ID:OmD1y+tA0740デフォルトの名無しさん (ワッチョイ 93fb-tRgI)
2017/12/27(水) 10:05:47.36ID:hAbcZpZm0741デフォルトの名無しさん (ワッチョイ 8a98-iexB)
2017/12/30(土) 07:52:44.61ID:UOR1hNFd0 class A {
//...
};
class B : public A {
};
A *a = new B();
delete a; // だめ
B *b = new B();
delete b; // だめ
というようにA, Bのdeleteを禁止することはできますか。
ただしこの制約はAでつくりたいです。
//...
};
class B : public A {
};
A *a = new B();
delete a; // だめ
B *b = new B();
delete b; // だめ
というようにA, Bのdeleteを禁止することはできますか。
ただしこの制約はAでつくりたいです。
742デフォルトの名無しさん (ワッチョイ 9feb-RYVm)
2017/12/30(土) 09:33:10.52ID:d8FdYsMR0 それくらい自分でよく考えろ
743デフォルトの名無しさん (ワッチョイ 2aa8-eCAL)
2017/12/30(土) 09:45:33.24ID:HUtWMzBs0 バカな考えはやめとけ
充分な知識と経験があるやつがバカな考えと知りつつあえてやるなら勝手だが
具体的なやりかたも分からないレベルのやつが思いつきでやろうとしても
あちこちぐちゃぐちゃになって自滅するだけだ
充分な知識と経験があるやつがバカな考えと知りつつあえてやるなら勝手だが
具体的なやりかたも分からないレベルのやつが思いつきでやろうとしても
あちこちぐちゃぐちゃになって自滅するだけだ
744デフォルトの名無しさん (ワッチョイ cacf-Frgx)
2017/12/30(土) 11:12:47.92ID:cTkeeOUh0 A&& a{B()};
B&& b{B()};
じゃだめなん?
B&& b{B()};
じゃだめなん?
745デフォルトの名無しさん (ワッチョイ 8a98-zz6T)
2017/12/30(土) 12:45:48.79ID:UOR1hNFd0 うーん諦めそう
746デフォルトの名無しさん (ワッチョイ 86e7-RYVm)
2017/12/30(土) 13:12:04.93ID:Rl7wv9fa0 やりたいことを実現するだけならA::~A()をprivateにすればいい
数多の副作用をどうするかは自分で考えろ
数多の副作用をどうするかは自分で考えろ
747デフォルトの名無しさん (ワッチョイ 0b7e-YrVP)
2017/12/30(土) 13:54:05.13ID:wmbP4hdJ0 ベクトルの内積を取りたいのですがC++で実装する場合最も高速な方法はなんでしょうか
748デフォルトの名無しさん (ワッチョイ ca34-SFeq)
2017/12/30(土) 13:54:23.97ID:/LayJX5M0 逆にどういう条件ならdeleteしても良い条件なのか?
コレでは一向にdelete出来ないではないか
コレでは一向にdelete出来ないではないか
749デフォルトの名無しさん (ワッチョイ 0b7e-YrVP)
2017/12/30(土) 14:12:38.35ID:wmbP4hdJ0 事故解決しました
750デフォルトの名無しさん (ワッチョイ 4a12-RYVm)
2017/12/30(土) 14:50:42.66ID:tENdVusY0 罷り間違ってもdeleteできないインスタンスとなると
核開発か深海探査か宇宙船くらいしか思いつかない
核開発か深海探査か宇宙船くらいしか思いつかない
751デフォルトの名無しさん (ワッチョイ de81-owgq)
2017/12/30(土) 14:58:28.45ID:W7MN//Qp0 電源を切っても生き残るインスタンス
752デフォルトの名無しさん (ワッチョイ 4a12-RYVm)
2017/12/30(土) 15:57:20.60ID:tENdVusY0 最近の時事と照らし合わせると人工心肺の回収があったな
電源を切れないデザインの電子機器があるのかもしれない
電源を切れないデザインの電子機器があるのかもしれない
753デフォルトの名無しさん (ワッチョイ 67f2-RYVm)
2017/12/30(土) 16:04:54.13ID:JmZ4oRXS0 スタックにしか置けないとか
754デフォルトの名無しさん (スップ Sd8a-z39N)
2017/12/30(土) 19:53:03.01ID:MGnkdLjPd >>747
詳細は?
詳細は?
755デフォルトの名無しさん (ワッチョイ 8a98-iexB)
2017/12/30(土) 19:54:40.04ID:UOR1hNFd0 逆ですね
つまりヒープにしか置きたくないです。
Aから派生したクラスのメモリサイクルを全てGCで管理します。
つまりヒープにしか置きたくないです。
Aから派生したクラスのメモリサイクルを全てGCで管理します。
756デフォルトの名無しさん (ワッチョイ 67f2-RYVm)
2017/12/30(土) 19:58:30.81ID:JmZ4oRXS0 だとしたらGCからはdeleteできないと困るんでない?
757デフォルトの名無しさん (ワッチョイ 8a98-iexB)
2017/12/30(土) 20:03:16.25ID:UOR1hNFd0 たとえばprivateデストラクタを呼べる状態なら
friendにすればいいかと考えています。
それができなければ単に新しいvirtual del()メンバー関数を新設するつもりです。
領域自体はfree()で解放するのでデストラクタがなくてもクラス自体は削除できます。
friendにすればいいかと考えています。
それができなければ単に新しいvirtual del()メンバー関数を新設するつもりです。
領域自体はfree()で解放するのでデストラクタがなくてもクラス自体は削除できます。
758デフォルトの名無しさん (ワントンキン MM3a-Ieq/)
2017/12/30(土) 20:07:42.93ID:DG4PcIhHM だとしたら普通newをオーバーロードするけどね
759デフォルトの名無しさん (ワッチョイ 8a98-iexB)
2017/12/30(土) 20:10:14.52ID:UOR1hNFd0 newは既にオーバーロードされていて
ヘッダ取り付けmallocするようになっています。
問題はnewしてAのコンストラクタが動きGCの管理化であるにもかかわらず、
deleteされたりそもそもスタック上に造られてしまうことです。
ヘッダ取り付けmallocするようになっています。
問題はnewしてAのコンストラクタが動きGCの管理化であるにもかかわらず、
deleteされたりそもそもスタック上に造られてしまうことです。
760デフォルトの名無しさん (ワッチョイ 8a98-iexB)
2017/12/30(土) 20:14:25.11ID:UOR1hNFd0 いまのところの案は
A のdeleteをオーバーライドして
deleteされても領域は解放されないようにすることです。
しかしこれでもスタック上に配置することはできますが。
連投失礼しました。
A のdeleteをオーバーライドして
deleteされても領域は解放されないようにすることです。
しかしこれでもスタック上に配置することはできますが。
連投失礼しました。
761デフォルトの名無しさん (ワントンキン MM3a-Ieq/)
2017/12/30(土) 20:47:53.74ID:DG4PcIhHM てか、C++使うな
762デフォルトの名無しさん (ワッチョイ 0b9f-RYVm)
2017/12/30(土) 21:30:00.75ID:Xyp0qNcm0 GCしか使わせたくないのなら、普通にGC言語使った方がいいと思うが。
オレオレGC実装とか、全くの無駄だし。
なおVC++/CLIでよければGC専用クラスを明示的に作ることは出来る。
オレオレGC実装とか、全くの無駄だし。
なおVC++/CLIでよければGC専用クラスを明示的に作ることは出来る。
763デフォルトの名無しさん (オイコラミネオ MM56-zz6T)
2017/12/30(土) 21:54:06.25ID:VH3WebWaM おそらくid変わってます
インタプリタ作っているんです
でインタプリタでgcをサポートするためにc++でgcを書いています
ですのでなんとかc++で解決したいわけです
インタプリタ作っているんです
でインタプリタでgcをサポートするためにc++でgcを書いています
ですのでなんとかc++で解決したいわけです
764デフォルトの名無しさん (ワッチョイ 67f2-RYVm)
2017/12/30(土) 22:09:40.34ID:JmZ4oRXS0 それならnew/deleteでGCしようとするのが悪手
765デフォルトの名無しさん (オイコラミネオ MM56-zz6T)
2017/12/30(土) 22:20:41.53ID:VH3WebWaM どうしよう
766片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe)
2017/12/30(土) 22:31:11.72ID:jArhle36d インタプリタの空間からは直接deleteにはアクセスできないんだろ?
だったらstd::shared_ptr使いなよ。
だったらstd::shared_ptr使いなよ。
767デフォルトの名無しさん (ワッチョイ 4e23-zz6T)
2017/12/30(土) 22:53:42.57ID:ah4/ane50 >>766
循環参照をインタプリタで考えたくないんです
循環参照をインタプリタで考えたくないんです
768デフォルトの名無しさん (ワッチョイ b3b3-Auke)
2017/12/30(土) 23:08:46.89ID:BVA4/HEC0 某書籍の問題をC++で解いています。
格子状の道路を、同じ辺を通らずに(同じ格子点ではないです)
直進と左折のみで、左下から右上まで行く道は何通りあるか求めよ。
それに対して以下のコードを書きましたが、うまくいきません。
https://ideone.com/0JMvWz
MigiDame::CanGo関数の中での挙動が、こちらが期待しているようにならないのです。
>全部trueが返る。
>また、releaseとdebugで挙動が違う。
どなたかご助言をお願い致します。
格子状の道路を、同じ辺を通らずに(同じ格子点ではないです)
直進と左折のみで、左下から右上まで行く道は何通りあるか求めよ。
それに対して以下のコードを書きましたが、うまくいきません。
https://ideone.com/0JMvWz
MigiDame::CanGo関数の中での挙動が、こちらが期待しているようにならないのです。
>全部trueが返る。
>また、releaseとdebugで挙動が違う。
どなたかご助言をお願い致します。
769片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe)
2017/12/30(土) 23:13:41.03ID:jArhle36d >>767
論理的に矛盾している。GCは動的に確保・解放するが、C++のスマートポインターは基本的に静的にする。
それをインタプリタ側でしたくないのであれば、外部GCエンジンをインタプリタに接続するインターフェースが必要。
論理的に矛盾している。GCは動的に確保・解放するが、C++のスマートポインターは基本的に静的にする。
それをインタプリタ側でしたくないのであれば、外部GCエンジンをインタプリタに接続するインターフェースが必要。
770片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe)
2017/12/30(土) 23:29:34.53ID:jArhle36d771片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe)
2017/12/30(土) 23:30:58.79ID:jArhle36d http://www.nminoru.jp/~nminoru/programming/boehm-gc3.html
こちらを参考に。
こちらを参考に。
772片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe)
2017/12/30(土) 23:33:17.06ID:jArhle36d 後はクラス内部のoperator new/deleteを定義する。
773デフォルトの名無しさん (ワッチョイ 0b9f-RYVm)
2017/12/30(土) 23:46:28.29ID:Xyp0qNcm0 >>763
> でインタプリタでgcをサポートするためにc++でgcを書いています
意味不明。
例えば、JavaやC#でインタプリタ書けば全く問題ないだろ。
一般的にはシステムとユーザで別ヒープ空間にしてサンドボックス化したいけど、
GC言語って一般的にGCヒープが壊れるようなアクセス方法を提供してないから、
別空間に分けなくてもそんなに酷いことにはならないぞ。
オレオレインタプリタ程度なら問題ないはず。
> でインタプリタでgcをサポートするためにc++でgcを書いています
意味不明。
例えば、JavaやC#でインタプリタ書けば全く問題ないだろ。
一般的にはシステムとユーザで別ヒープ空間にしてサンドボックス化したいけど、
GC言語って一般的にGCヒープが壊れるようなアクセス方法を提供してないから、
別空間に分けなくてもそんなに酷いことにはならないぞ。
オレオレインタプリタ程度なら問題ないはず。
774デフォルトの名無しさん (ワッチョイ aa2d-ug5Q)
2017/12/31(日) 00:00:04.48ID:6+AUyGx70775片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe)
2017/12/31(日) 00:16:40.38ID:iQxViKH1d インタプリタのメモリー管理はインタプリタ側かGCエンジン側でしないといけない。
インタプリタでは自動的にデストラクタは呼ばれないので、インタプリタ側が引き金を引かないといけない。
インタプリタでは自動的にデストラクタは呼ばれないので、インタプリタ側が引き金を引かないといけない。
776片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe)
2017/12/31(日) 00:19:34.27ID:iQxViKH1d Boehm GCというGCエンジンをそのまま使えばいいからさ。
777デフォルトの名無しさん (ワッチョイ aa2d-ug5Q)
2017/12/31(日) 00:38:38.33ID:6+AUyGx70 >>768
255行目は「return false;」じゃないの?
255行目は「return false;」じゃないの?
778デフォルトの名無しさん (ワッチョイ b3b3-Auke)
2017/12/31(日) 00:49:49.20ID:sqNDq1tX0 ありがとうございます。
仰る通りでした。
お恥ずかしい。
仰る通りでした。
お恥ずかしい。
779デフォルトの名無しさん (ワッチョイ 4e23-zz6T)
2017/12/31(日) 01:14:19.19ID:pvw4D5QY0 >>774
継承元のコンストラクタを呼べないのでそれはできないです
継承元のコンストラクタを呼べないのでそれはできないです
780デフォルトの名無しさん (ワッチョイ eaf9-hwC7)
2017/12/31(日) 01:33:30.83ID:QH0un2fa0781デフォルトの名無しさん (ワッチョイ 4e23-zz6T)
2017/12/31(日) 01:34:01.16ID:pvw4D5QY0782はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-Auke)
2017/12/31(日) 01:57:19.48ID:ZCoi/xwq0 >>781
C で書かれてても完全に C の仕様の範囲内で書いてるとは限らんのだぞ。
アーキテクチャ依存の部分を適当に #ifdef で分岐して configure でなんとかしたりする (できる) のが C/C++
C で書かれてても完全に C の仕様の範囲内で書いてるとは限らんのだぞ。
アーキテクチャ依存の部分を適当に #ifdef で分岐して configure でなんとかしたりする (できる) のが C/C++
783デフォルトの名無しさん (ワッチョイ 4e23-zz6T)
2017/12/31(日) 02:23:20.14ID:pvw4D5QY0784片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe)
2017/12/31(日) 07:16:38.47ID:iQxViKH1d785デフォルトの名無しさん (ワッチョイ cab3-tILW)
2017/12/31(日) 07:28:36.53ID:pVPyHW7p0 もう言ってることもちぐはぐだしレス古事記としか思えない
スルー推奨
スルー推奨
786片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe)
2017/12/31(日) 07:32:05.37ID:iQxViKH1d インタプリタで扱う、GC管理するクラスの基底クラスObjectBaseを定義して、そこでBoehm GCを使ってoperator new/deleteを定義する。
インタプリタ側でObjectBaseの派生クラスを必要に応じてnew/deleteすればGC管理ができる。
インタプリタ側でObjectBaseの派生クラスを必要に応じてnew/deleteすればGC管理ができる。
787デフォルトの名無しさん (オイコラミネオ MM56-zz6T)
2017/12/31(日) 09:17:47.39ID:6pksk/76M まだ自分では難しいですね
一旦中断して勉強し直します
ありがとうございました
一旦中断して勉強し直します
ありがとうございました
788デフォルトの名無しさん (ワッチョイ 0b9f-RYVm)
2017/12/31(日) 10:57:38.40ID:4mPXFkIt0 >>781
そういう意味ではない。
>>787
まあ、根本的に分かってないというのは同意する。
今の君では無理だ。
君は「既存のインタプリタにGC機能を付け加えようとしている」、ここまではいいか?
インタプリタの場合、両端の柱は2つで、
A. evalラッパ
B. フルエミュ
で、結局の所これらの折衷案となる。どのポイントを目指すかは君が決めればいい。
ただし、君はここまですら到達できていない。
君はGCを自前で実装することにこだわっている。
これはGCをフルエミュすることを意味しているが、
この場合、delete等は常に自前パーサを逐一通すことになるので、その段階で弾けばいいだけだ。
君が言っているように「禁止する」必要は全くない。(ここが矛盾している。
GC管理変数をdeleteしようとしているかは、当然分かるし、分からないようではフルエミュできない)
だから俺たちはevalラッパ実装だという前提で話をしている。
こちらの場合は、システム側が持っている機能を使って相乗りになる。
混ざらないようにさえ出来ればとりあえずは動く。
コードを書く以前に、まず、仕様を固めないと駄目だ。君はここが出来ていない。
もっと上位の、エミュレーション戦略を固めないと話にならない。
そういう意味ではない。
>>787
まあ、根本的に分かってないというのは同意する。
今の君では無理だ。
君は「既存のインタプリタにGC機能を付け加えようとしている」、ここまではいいか?
インタプリタの場合、両端の柱は2つで、
A. evalラッパ
B. フルエミュ
で、結局の所これらの折衷案となる。どのポイントを目指すかは君が決めればいい。
ただし、君はここまですら到達できていない。
君はGCを自前で実装することにこだわっている。
これはGCをフルエミュすることを意味しているが、
この場合、delete等は常に自前パーサを逐一通すことになるので、その段階で弾けばいいだけだ。
君が言っているように「禁止する」必要は全くない。(ここが矛盾している。
GC管理変数をdeleteしようとしているかは、当然分かるし、分からないようではフルエミュできない)
だから俺たちはevalラッパ実装だという前提で話をしている。
こちらの場合は、システム側が持っている機能を使って相乗りになる。
混ざらないようにさえ出来ればとりあえずは動く。
コードを書く以前に、まず、仕様を固めないと駄目だ。君はここが出来ていない。
もっと上位の、エミュレーション戦略を固めないと話にならない。
789デフォルトの名無しさん (ワッチョイ 8a98-iexB)
2017/12/31(日) 12:02:46.05ID:NNFoNJyg0 >この場合、delete等は常に自前パーサを逐一通すことになるので、その段階で弾けばいいだけだ
というのはインタプリタからは直接deleteが見えないことをさしていると思いますが(合っていますか?
>君が言っているように「禁止する」必要は全くない。
の理由がわかりません。
インタプリタ上のオブジェクトもC++上ではただのポインタであり
delete hogehoge //このhogehogeはGCの管理下
することは文法上は可能なはずです。
これを禁止することは処理系の保守性/安全性のために必要だと考えています(というのが初めの質問につながります
そしてevalラッパというのはやらないです。
今回はメモリ管理まで実装することでその"Java"や"C#"での管理の仕組みを実装レベルで学ぶことが目的の一つだからです。
動けばいいとうわけではありません。当然出荷するわけでもありませんので大丈夫です。
>コードを書く以前に、まず、仕様を固めないと駄目だ。君はここが出来ていない。
>もっと上位の、エミュレーション戦略を固めないと話にならない。
ええ全くその通りでした。楽観的すぎたか単に実力不足です。
というのはインタプリタからは直接deleteが見えないことをさしていると思いますが(合っていますか?
>君が言っているように「禁止する」必要は全くない。
の理由がわかりません。
インタプリタ上のオブジェクトもC++上ではただのポインタであり
delete hogehoge //このhogehogeはGCの管理下
することは文法上は可能なはずです。
これを禁止することは処理系の保守性/安全性のために必要だと考えています(というのが初めの質問につながります
そしてevalラッパというのはやらないです。
今回はメモリ管理まで実装することでその"Java"や"C#"での管理の仕組みを実装レベルで学ぶことが目的の一つだからです。
動けばいいとうわけではありません。当然出荷するわけでもありませんので大丈夫です。
>コードを書く以前に、まず、仕様を固めないと駄目だ。君はここが出来ていない。
>もっと上位の、エミュレーション戦略を固めないと話にならない。
ええ全くその通りでした。楽観的すぎたか単に実力不足です。
790デフォルトの名無しさん (ワッチョイ 0b9f-RYVm)
2017/12/31(日) 13:30:39.82ID:4mPXFkIt0 >>789
君が想定しているのは明らかにフルエミュ寄りだから、それで話をすると、
A *a = new A(); でまず、
自前の変数管理用ハッシュ内に valuesHash["a"] = {type: A*, value: ptr}; することになるだろ。
そして delete a; が来ると、
if (valuesHash["a"].type.canDelete) delete valuesHash["a"].value;
で対応することになる。だから、
> することは文法上は可能なはずです。
> これを禁止することは処理系の保守性/安全性のために必要だと考えています
ということ自体が間違いなんだよ。
文法的に禁止とか、全く意味が無くて、
実行時に自然に弾けるし、弾けないようなフルエミュは実装不能だから。
君はインタプリタ自体がどう動いているのか理解できていない。
インタプリタの場合は、生きている変数を全て自分で把握してないと話にならないんだよ。
俺たちはこれは「常識」として、その先の ptr の配置先をどうするか、の話をしていた。
だから完全に空回りすることになる。
> 楽観的すぎたか単に実力不足です。
どっちもだ。
君は車を作ろうとしているが、車にエンジンとタイヤが必要なことすら理解できてない。
このレベルの馬鹿だ。自覚してくれ。
君が想定しているのは明らかにフルエミュ寄りだから、それで話をすると、
A *a = new A(); でまず、
自前の変数管理用ハッシュ内に valuesHash["a"] = {type: A*, value: ptr}; することになるだろ。
そして delete a; が来ると、
if (valuesHash["a"].type.canDelete) delete valuesHash["a"].value;
で対応することになる。だから、
> することは文法上は可能なはずです。
> これを禁止することは処理系の保守性/安全性のために必要だと考えています
ということ自体が間違いなんだよ。
文法的に禁止とか、全く意味が無くて、
実行時に自然に弾けるし、弾けないようなフルエミュは実装不能だから。
君はインタプリタ自体がどう動いているのか理解できていない。
インタプリタの場合は、生きている変数を全て自分で把握してないと話にならないんだよ。
俺たちはこれは「常識」として、その先の ptr の配置先をどうするか、の話をしていた。
だから完全に空回りすることになる。
> 楽観的すぎたか単に実力不足です。
どっちもだ。
君は車を作ろうとしているが、車にエンジンとタイヤが必要なことすら理解できてない。
このレベルの馬鹿だ。自覚してくれ。
791デフォルトの名無しさん (ワッチョイ 8a98-zz6T)
2017/12/31(日) 21:01:51.54ID:NNFoNJyg0792デフォルトの名無しさん (ワッチョイ 5f33-wHXY)
2017/12/31(日) 21:05:22.85ID:gdXppZ4Z0 まぁ机上の空論の段階で質問してる感じはするね
まず実装してみて詰まってから質問したほうが絶対早い
まず実装してみて詰まってから質問したほうが絶対早い
793デフォルトの名無しさん (ワッチョイ 4a12-RYVm)
2017/12/31(日) 21:10:48.47ID:Ax7HC8jF0 これのやり方真似るだけじゃねえの
C++にこだわる理由とかあるのか
GitHub - python/cpython: The Python programming language
https://github.com/python/cpython
GitHub - ruby/ruby: The Ruby Programming Language
https://github.com/ruby/ruby
C++にこだわる理由とかあるのか
GitHub - python/cpython: The Python programming language
https://github.com/python/cpython
GitHub - ruby/ruby: The Ruby Programming Language
https://github.com/ruby/ruby
794デフォルトの名無しさん (ワッチョイ 0b9f-RYVm)
2017/12/31(日) 23:28:57.22ID:4mPXFkIt0 C++ということならV8もどうぞ。
V8 JavaScript Engine
https://github.com/v8/v8
つか、知らんかったけどCのインタプリタもあるのな。
https://root.cern.ch/root/Cint2006.html
https://stackoverflow.com/questions/69539/have-you-used-any-of-the-c-interpreters-not-compilers
V8 JavaScript Engine
https://github.com/v8/v8
つか、知らんかったけどCのインタプリタもあるのな。
https://root.cern.ch/root/Cint2006.html
https://stackoverflow.com/questions/69539/have-you-used-any-of-the-c-interpreters-not-compilers
795デフォルトの名無しさん (ワッチョイ 0b7e-H5kR)
2018/01/01(月) 15:09:24.40ID:sTQ8czIK0 特定のプログラムの音(ゲームの音やブラウザの音など)のみを録音する方法ってありますか?
ステレオミキサー経由の録音はできたのですがそれだとPC全体の音が入ってしまいます
ステレオミキサー経由の録音はできたのですがそれだとPC全体の音が入ってしまいます
796デフォルトの名無しさん (ワッチョイ 9feb-RYVm)
2018/01/01(月) 15:29:07.61ID:hH9fKUSZ0 全くもってスレ違い
797デフォルトの名無しさん (アウアウカー Sacb-H5kR)
2018/01/01(月) 16:20:46.04ID:e32zy+Lia C++で実装してるのですが
799デフォルトの名無しさん (アウアウカー Sacb-H5kR)
2018/01/01(月) 19:08:55.81ID:0kKej5SZa >>798
win10でマザボから音出してます
win10でマザボから音出してます
800デフォルトの名無しさん (ワッチョイ 07c3-FiVz)
2018/01/01(月) 22:50:45.26ID:h4sxlXvw0 >>795
ステレオミキサーで必要な音以外をミュートにしておくのではダメなの?
ステレオミキサーで必要な音以外をミュートにしておくのではダメなの?
801デフォルトの名無しさん (アウアウカー Sacb-H5kR)
2018/01/01(月) 23:04:49.88ID:CxGFbaKha802はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-Auke)
2018/01/01(月) 23:29:57.50ID:jbWUirsb0 めんどくさ。
DLL インジェクションでサウンド関連の API 呼出しを横取りして記憶するとかどうよ
DLL インジェクションでサウンド関連の API 呼出しを横取りして記憶するとかどうよ
803デフォルトの名無しさん (ワッチョイ 6b78-EEtN)
2018/01/01(月) 23:48:05.00ID:moCLDBRy0 まずOBSとかAfterburnerなんかの録画アプリで出来るか確かめてみれや
それでできるなら出来るだろうし出来ないなら出来ないってこった
それでできるなら出来るだろうし出来ないなら出来ないってこった
804デフォルトの名無しさん (ワッチョイ eaf9-hwC7)
2018/01/02(火) 00:08:23.37ID:A/ddTu/K0 >>797
録音を実現する機能はc++という言語の範疇ではないから、適切なスレで聞いてきた方がいいよ。
具体的に使うAPIなりライブラリなりが分かってやりたい処理があって、それをc++で記述する上で疑問が出てきたならこのスレでいいと思うけど。
録音を実現する機能はc++という言語の範疇ではないから、適切なスレで聞いてきた方がいいよ。
具体的に使うAPIなりライブラリなりが分かってやりたい処理があって、それをc++で記述する上で疑問が出てきたならこのスレでいいと思うけど。
805デフォルトの名無しさん (ワッチョイ 07c3-FiVz)
2018/01/02(火) 02:09:46.75ID:TOn3QoHK0 >>801
Windows7だと画面右下のタスクバー上のスピーカーアイコンを右クリックして
音量ミキサーを起動すると、ミュートする音を選べるようになるよ
(各音源の一番下の青いスピーカーの部分をクリックすればいい)
Windows7だと画面右下のタスクバー上のスピーカーアイコンを右クリックして
音量ミキサーを起動すると、ミュートする音を選べるようになるよ
(各音源の一番下の青いスピーカーの部分をクリックすればいい)
806デフォルトの名無しさん (ワッチョイ 9e5f-g95I)
2018/01/03(水) 00:50:02.27ID:975SpLfw0 みんなストイックに-Weverythingなの?
807片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe)
2018/01/03(水) 18:02:54.72ID:DhesVTdNd We very thing
808デフォルトの名無しさん (ワッチョイ ff89-OTe3)
2018/01/03(水) 18:06:12.23ID:AMJZwzU90 「GCが欲しければObjectBaseを継承しなければならない
「さあObjectBaseを継承したまえ、GCが欲しいだろう
↑
という押しつけがましさ
「さあObjectBaseを継承したまえ、GCが欲しいだろう
↑
という押しつけがましさ
809デフォルトの名無しさん (ワッチョイ 6b75-kJbS)
2018/01/03(水) 18:08:47.07ID:zucBe8Ms0 ブランケットアンクローズドシンタックスエラー
810デフォルトの名無しさん (ワッチョイ ff89-OTe3)
2018/01/03(水) 19:20:51.86ID:AMJZwzU90 switch(c) {
case '{':
aho();
break;
//...
}
case '{':
aho();
break;
//...
}
https://www.theregister.co.uk/2018/01/02/intel_cpu_design_flaw/
>that Intel's CPUs speculatively execute code potentially without performing security checks.
...
>That would allow ring-3-level user code to read ring-0-level kernel data.
投機的実行が仇になったようだね、リング3 コードがリング0 カーネルデータを読み込める、というのは最悪だねえ‥
>that Intel's CPUs speculatively execute code potentially without performing security checks.
...
>That would allow ring-3-level user code to read ring-0-level kernel data.
投機的実行が仇になったようだね、リング3 コードがリング0 カーネルデータを読み込める、というのは最悪だねえ‥
812デフォルトの名無しさん (ワッチョイ ca34-SFeq)
2018/01/03(水) 23:20:34.97ID:XsO0N2Ro0 intelのCPUに重大なバグ。修正により性能30%ダウンは確実。 もちろんcoffeeも対象 [589351131]
https://leia.5ch.net/test/read.cgi/poverty/1514960738/
>インテルのCEOが関連性は不明だが2017年11月にCEOを最低維持できる25万株残して株式を売却している
ヤバいで
https://leia.5ch.net/test/read.cgi/poverty/1514960738/
>インテルのCEOが関連性は不明だが2017年11月にCEOを最低維持できる25万株残して株式を売却している
ヤバいで
813デフォルトの名無しさん (ワッチョイ 1f60-1EiW)
2018/01/04(木) 00:19:22.89ID:NEvAF4vy0814デフォルトの名無しさん (ワッチョイ 1f60-1EiW)
2018/01/04(木) 00:25:51.35ID:NEvAF4vy0815デフォルトの名無しさん (ワッチョイ 1f60-1EiW)
2018/01/04(木) 00:34:08.27ID:NEvAF4vy0 関連記事がまとまっていた
https://news.google.com/news/story/dxTQx3jGZ4VUkpMLaUSX33-gnbA8M?hl=en-GB&ned=uk&gl=GB
https://news.google.com/news/story/dxTQx3jGZ4VUkpMLaUSX33-gnbA8M?hl=en-GB&ned=uk&gl=GB
816デフォルトの名無しさん (ワッチョイ efe7-Ogju)
2018/01/04(木) 00:45:09.37ID:Z29HpgyU0 えっやばくねこれ
817デフォルトの名無しさん (ワッチョイ 0feb-gOZ5)
2018/01/04(木) 02:42:39.95ID:tRFYlI1W0 なんか>>811にめちゃめちゃ書いてあるらしく実際そんなヤバないらしいよ
818デフォルトの名無しさん (ワッチョイ 3b89-2A+B)
2018/01/04(木) 06:34:15.00ID:O1MbUTjx0 やってみろよ
ム板でそういう発言恥ずかしくないのか
ム板でそういう発言恥ずかしくないのか
819デフォルトの名無しさん (ブーイモ MM0f-tDXD)
2018/01/04(木) 08:34:28.43ID:BdTp33RzM システムコール呼び出すたびにアドレス空間を切り替えるパッチを当てるみたいだから、
io叩きまくるコンパイル作業はモロに影響うけるかもね。
arm64版にもパッチを当てるみたいだけど、禿大丈夫か…
io叩きまくるコンパイル作業はモロに影響うけるかもね。
arm64版にもパッチを当てるみたいだけど、禿大丈夫か…
820デフォルトの名無しさん (アウアウウー Sa8f-hL1C)
2018/01/04(木) 18:57:44.39ID:mQU15vmIa intel抜けてる
intel割れてる
intel割れてる
821デフォルトの名無しさん (アウアウカー Sa4f-672L)
2018/01/05(金) 22:53:49.25ID:eQNcfao2a c++で例外は使ってますか?
また使う場合std::exceptionを継承しますか?
また使う場合std::exceptionを継承しますか?
822デフォルトの名無しさん (ワッチョイ cb78-dycC)
2018/01/05(金) 23:16:55.81ID:Zjbc7FO50 最後の門番がstd::exceptionなんで継承して使う
823デフォルトの名無しさん (ワッチョイ 2bb3-hL1C)
2018/01/05(金) 23:33:54.58ID:o2QD25iD0 ] ][][[[ [][] [[["][ [ ]]]["04"
824デフォルトの名無しさん (ワッチョイ 9f33-aKZ8)
2018/01/06(土) 01:45:54.07ID:oEcDcvUy0 >>821
標準コンテナとか含めて new 使ったら bad_alloc 受けることになるんだから
ほとんどの場合に使ってると言えそうなんだけど「継承しますか?」って話に繋がってるってことは
「使う」=自分で例外クラスを定義して使うって話なのかな?
標準コンテナとか含めて new 使ったら bad_alloc 受けることになるんだから
ほとんどの場合に使ってると言えそうなんだけど「継承しますか?」って話に繋がってるってことは
「使う」=自分で例外クラスを定義して使うって話なのかな?
825デフォルトの名無しさん (ワッチョイ cb75-if4i)
2018/01/06(土) 02:11:45.78ID:dYI3l1P40 英単語の前後にスペースを挿入するのはこだわり?
826はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ef6f-hL1C)
2018/01/06(土) 02:48:37.95ID:mAB25EnJ0 >>825
TeX で英数字からなる語の前後に空白を入れないと単語境界がうまく認識されないという問題があったので、この習慣は広く定着してる。
ただ、 pTeX などでは自動で境界を認識して適切な幅を取るようになっているのでむしろ空白文字を入れるとダメってのもある。
どっちでも上手いこと処理するのもあるし、そのへんごちゃごちゃしてややこしいんだわ。
ウェブブラウザでも物によって幅の取り方が違う。
まあ個人的には、バッドノウハウだという自覚はあるが、 html やプレーンテキストでは英単語の前後には空白を入れた方が見やすいと思う。
TeX で英数字からなる語の前後に空白を入れないと単語境界がうまく認識されないという問題があったので、この習慣は広く定着してる。
ただ、 pTeX などでは自動で境界を認識して適切な幅を取るようになっているのでむしろ空白文字を入れるとダメってのもある。
どっちでも上手いこと処理するのもあるし、そのへんごちゃごちゃしてややこしいんだわ。
ウェブブラウザでも物によって幅の取り方が違う。
まあ個人的には、バッドノウハウだという自覚はあるが、 html やプレーンテキストでは英単語の前後には空白を入れた方が見やすいと思う。
827デフォルトの名無しさん (ワッチョイ cb75-if4i)
2018/01/06(土) 02:53:16.08ID:dYI3l1P40 たしかに
828デフォルトの名無しさん (ワッチョイ 9f33-aKZ8)
2018/01/06(土) 02:59:22.25ID:oEcDcvUy0829デフォルトの名無しさん (アウアウウー Sa8f-672L)
2018/01/06(土) 09:05:07.05ID:QqCP9l1Xa >>824
そうです。c++の本など見ても標準の例外を説明して終わりな事が多いし、しまいにはnoexceptなるキーワードまで出来てるし実際使ってるのかなと。
そうです。c++の本など見ても標準の例外を説明して終わりな事が多いし、しまいにはnoexceptなるキーワードまで出来てるし実際使ってるのかなと。
830デフォルトの名無しさん (ワッチョイ 0bbb-2A+B)
2018/01/07(日) 19:05:16.44ID:8XJu4dlo0 標準の例外はexception&で捕獲できる
ただそれだけのこと
独自定義の例外を標準の例外とは区別したいのなら
exceptionを継承しないという手も当然ある
教条主義にとらわれるやつ=自分の頭で考えないやつは
こういう判断が極度に苦手だ
ただそれだけのこと
独自定義の例外を標準の例外とは区別したいのなら
exceptionを継承しないという手も当然ある
教条主義にとらわれるやつ=自分の頭で考えないやつは
こういう判断が極度に苦手だ
831デフォルトの名無しさん
2018/01/07(日) 23:12:25.29832はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ef6f-hL1C)
2018/01/08(月) 02:30:58.74ID:4mwCF63o0 標準のライブラリがやってることっていうのはだいたいその言語における「普通」なので、
原則としてはそれに合わせるというのは良い方法だよ。
あえて原則に逆らいたいとき、逆らった方が便利なときというのももちろんあるけれど、
たいして強い動機もないのに独自の設計を選択するのは混乱の元。
つまり、例外クラスは std::exception を継承するのが好ましい。
その上でそのデザインが問題を起こす場合があるなら見直せばいい。
原則としてはそれに合わせるというのは良い方法だよ。
あえて原則に逆らいたいとき、逆らった方が便利なときというのももちろんあるけれど、
たいして強い動機もないのに独自の設計を選択するのは混乱の元。
つまり、例外クラスは std::exception を継承するのが好ましい。
その上でそのデザインが問題を起こす場合があるなら見直せばいい。
833デフォルトの名無しさん (ワッチョイ 0b44-5YeV)
2018/01/08(月) 03:33:16.23ID:yXJvU4Pj0 動的例外がまだ廃止されていない頃に設計されたものが
今のC++に対して本当に「普通」なのか考えたことがあるか?
(別にここで答えなくてよいが)
誤った前提のうえに立つ主張はただの戯れ言で
そうなっていないことは確認してからぬかせ
今のC++に対して本当に「普通」なのか考えたことがあるか?
(別にここで答えなくてよいが)
誤った前提のうえに立つ主張はただの戯れ言で
そうなっていないことは確認してからぬかせ
834デフォルトの名無しさん (ワッチョイ 0fe8-u9Oh)
2018/01/08(月) 04:19:16.37ID:svytTaJl0 std::exceptionを継承しないメリットって何かある?
835デフォルトの名無しさん (ワッチョイ 0b44-5YeV)
2018/01/08(月) 05:20:35.84ID:yXJvU4Pj0 僅か数レスの流れくらい読め
836デフォルトの名無しさん (ワッチョイ 1fbd-wtpF)
2018/01/08(月) 06:27:14.93ID:scSfOfeH0 std::exceptionを継承しないデメリットもようわからん…
std::exceptionは一体何をやっているのや?
std::exceptionを継承しなくとも
throw 1; --> catch (int)で捕捉
throw "Hello World!"; --> catch (const char*)で捕捉
とかやれるようになったのって比較的最近?
std::exceptionは一体何をやっているのや?
std::exceptionを継承しなくとも
throw 1; --> catch (int)で捕捉
throw "Hello World!"; --> catch (const char*)で捕捉
とかやれるようになったのって比較的最近?
837デフォルトの名無しさん (ワッチョイ 0f81-k2O/)
2018/01/08(月) 06:38:24.96ID:iffK3nmC0838デフォルトの名無しさん (ワッチョイ efe7-Ogju)
2018/01/08(月) 09:47:56.66ID:mQiTu3iz0 クラス以外を投げるのはdeprecatedになってたような…(自信なし)
とはいえstd::exceptionを継承しなければならない強い理由もあんまりないような気がする
JavaのThrowableやらPythonのExceptionやらはGCの都合だし
あくまでstd内の例外を組織化するための基本クラスでしょstd::exceptionって
とはいえstd::exceptionを継承しなければならない強い理由もあんまりないような気がする
JavaのThrowableやらPythonのExceptionやらはGCの都合だし
あくまでstd内の例外を組織化するための基本クラスでしょstd::exceptionって
839デフォルトの名無しさん (ワントンキン MMbf-k2O/)
2018/01/08(月) 09:53:10.93ID:kEMPsv5+M840デフォルトの名無しさん (ワッチョイ 1fbd-wtpF)
2018/01/08(月) 10:38:49.41ID:scSfOfeH0 std::exceptionおよびその派生クラスを受け取る標準のロギングフレームワークってありましたっけ…
STLはなんか例外を投げる側しかサポートしていない印象
そもそも例外の捕捉のしくみは「知ってる例外のみ捕捉して処理する/知らない例外はさらに呼び出し元に送る」戦略なので、
受け取る側に既存のフレームワークが無いんなら、投げる側の例外が高度に統一されている必要は実はそんなには無いキモス
せいぜいコピーしたときリークするようなクラスではあってほしくないという願いがあるぐらいで実は何だって良いのでは…
STLはなんか例外を投げる側しかサポートしていない印象
そもそも例外の捕捉のしくみは「知ってる例外のみ捕捉して処理する/知らない例外はさらに呼び出し元に送る」戦略なので、
受け取る側に既存のフレームワークが無いんなら、投げる側の例外が高度に統一されている必要は実はそんなには無いキモス
せいぜいコピーしたときリークするようなクラスではあってほしくないという願いがあるぐらいで実は何だって良いのでは…
841デフォルトの名無しさん (ワッチョイ 9f33-aKZ8)
2018/01/08(月) 11:10:23.18ID:MwpEdGth0 >>840
「フレームワーク」にあたるかどうかはわかんないけど、
catch(std::exception& e) で e.what() を拾うっていうよくあるエラー処理のパターンがあるんだよ。
https://github.com/search?utf8=%E2%9C%93&q=%22catch+std%3A%3Aexception%22+what&type=Code
だから、 std::exception 派生にしといてもらわないとまともなエラーメッセージが出なかったりして困る。
「フレームワーク」にあたるかどうかはわかんないけど、
catch(std::exception& e) で e.what() を拾うっていうよくあるエラー処理のパターンがあるんだよ。
https://github.com/search?utf8=%E2%9C%93&q=%22catch+std%3A%3Aexception%22+what&type=Code
だから、 std::exception 派生にしといてもらわないとまともなエラーメッセージが出なかったりして困る。
842デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
2018/01/08(月) 14:35:51.13ID:u4QX+fVn0 アホか
e.what() を誰に対して表示するんだよ
一般消費者にbad_allocとか言っても通じねえ
せいぜい「何たらファイルを保守員に渡せ」くらいだろ
e.what() を誰に対して表示するんだよ
一般消費者にbad_allocとか言っても通じねえ
せいぜい「何たらファイルを保守員に渡せ」くらいだろ
843デフォルトの名無しさん (ワッチョイ 9f34-5fu2)
2018/01/08(月) 14:44:37.01ID:zFrH1/Fm0 e.what()なんてどうでもいい
どのソースファイルの何行目でそいつがthrowされてきたかだ
どのソースファイルの何行目でそいつがthrowされてきたかだ
844デフォルトの名無しさん
2018/01/08(月) 14:46:08.42 >>842
実際広く使われてるものを一人で一生懸命否定してもな・・・
実際広く使われてるものを一人で一生懸命否定してもな・・・
845デフォルトの名無しさん (ワッチョイ 9f34-5fu2)
2018/01/08(月) 14:48:45.77ID:zFrH1/Fm0 そこら辺が例外としてカスタマーに出す情報として欠けている
巷で言うところのアスペクト機構というやつか
巷で言うところのアスペクト機構というやつか
846デフォルトの名無しさん (ワッチョイ 9f98-TAu9)
2018/01/08(月) 15:10:05.58ID:IpW3L+tu0 十進数計算をするためには一般的にはBCDをDPDを使用しますが
二進数のままで十進数の丸め処理をすることはできますか?
二進数のままで十進数の丸め処理をすることはできますか?
847デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
2018/01/08(月) 15:46:10.84ID:u4QX+fVn0 >>844
自分の頭で考えることを放棄しているやつとでは議論にならない
自分の頭で考えることを放棄しているやつとでは議論にならない
848デフォルトの名無しさん
2018/01/08(月) 16:18:21.05 >>847
そんなに独自路線を走りたいなら家で大人しく引きこもってろ
そんなに独自路線を走りたいなら家で大人しく引きこもってろ
849デフォルトの名無しさん (ワッチョイ efe7-Ogju)
2018/01/08(月) 16:30:52.97ID:mQiTu3iz0 >>841眺めてるけど
全ての例外オブジェクトはstd::exception派生でなければならないなんてポリシーで書かれてるコードそんなにないぞ
当たり前だけどだいたいcatch(...)も後続させてるし、std::exception派生じゃない独自クラスのcatchを前に続けてるコードも普通にある
というか「catch(std::exception& e) で e.what() を拾うっていうよくあるエラー処理のパターン」って何?
それは単にstd::exceptionを拾ってるだけで、std::exceptionを拾ったらそりゃwhat()使うに決まってんだろ当たり前の話
全ての例外オブジェクトはstd::exception派生でなければならないなんてポリシーで書かれてるコードそんなにないぞ
当たり前だけどだいたいcatch(...)も後続させてるし、std::exception派生じゃない独自クラスのcatchを前に続けてるコードも普通にある
というか「catch(std::exception& e) で e.what() を拾うっていうよくあるエラー処理のパターン」って何?
それは単にstd::exceptionを拾ってるだけで、std::exceptionを拾ったらそりゃwhat()使うに決まってんだろ当たり前の話
850デフォルトの名無しさん
2018/01/08(月) 16:41:29.24 (´・∀・`)ヘェー
あ、ちなみに俺はC++経験ないけど暇つぶしに横から煽ってるだけだから気にしないでね^^
あ、ちなみに俺はC++経験ないけど暇つぶしに横から煽ってるだけだから気にしないでね^^
851デフォルトの名無しさん (ワッチョイ cb75-rVxj)
2018/01/08(月) 16:47:22.54ID:LRSoqKZx0 誰もおまえを相手にしてない定期
852デフォルトの名無しさん (ワッチョイ 1f5b-5YeV)
2018/01/08(月) 17:58:52.06ID:u4QX+fVn0 > std::exception 派生にしといてもらわないとまともなエラーメッセージが出なかったりして困る。
まともなエラーメッセージって
cout << runtime_error{"aho"}.what(); //aho
これのことか?www
おまえさんもしかしてsystem_errorが理解できなくて使ってないとかか?
まともなエラーメッセージって
cout << runtime_error{"aho"}.what(); //aho
これのことか?www
おまえさんもしかしてsystem_errorが理解できなくて使ってないとかか?
853デフォルトの名無しさん (ワッチョイ cb75-rVxj)
2018/01/08(月) 20:02:51.13ID:LRSoqKZx0 shamu_game?
854デフォルトの名無しさん (ワッチョイ fb23-pzyA)
2018/01/08(月) 22:00:33.29ID:oHMwX23z0 >>846
固定小数点でやればいい
固定小数点でやればいい
855デフォルトの名無しさん (ワッチョイ 9f33-aKZ8)
2018/01/09(火) 02:11:08.05ID:VwLwz+6J0 >>849
後続の catch(...) で拾っても何が起こったのがわかんなくて困ることがあるって話。
後続の catch(...) で拾っても何が起こったのがわかんなくて困ることがあるって話。
856はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ef6f-hL1C)
2018/01/09(火) 02:22:46.70ID:ODJfN40E0 >>847
カスが考えるより、 C++ の (ライブラリ) 設計を真似た方がマシやで
カスが考えるより、 C++ の (ライブラリ) 設計を真似た方がマシやで
857デフォルトの名無しさん (ワッチョイ 0bf6-5YeV)
2018/01/09(火) 10:16:09.54ID:BapSTNU/0 おまえが考えるより真似た方がマシなのは言われんでもわかってる
858デフォルトの名無しさん (ワッチョイ fb23-pzyA)
2018/01/09(火) 10:43:54.73ID:2HziowuR0 バカの考え休むに似たりなる諺の発祥を追うような展開
860デフォルトの名無しさん (ワッチョイ 1e8a-zuLH)
2018/01/11(木) 06:31:56.64ID:hO0Nh6Zo0 ファイルコピーをしたいんだけど改善点あるかな?
引数にはコピー元とコピー先のファイルパスを受けとる予定
もっと簡単な記法があると助かる...
int copy(const char* old, const char* new)
{
FILE *fi, *fo;
int ch;
if(NULL==old||NULL==new){
return -1;
}
if ((fi = fopen(old, "r")) == NULL) {
return -1;
}
if ((fo = fopen(argv[2], "w")) == NULL) {
fclose(fi);
return -1;
}
while((ch = fgetc(fi)) != EOF){
fputc(ch, fo);
}
fclose(fi);
fclose(fo);
return 0;
}
引数にはコピー元とコピー先のファイルパスを受けとる予定
もっと簡単な記法があると助かる...
int copy(const char* old, const char* new)
{
FILE *fi, *fo;
int ch;
if(NULL==old||NULL==new){
return -1;
}
if ((fi = fopen(old, "r")) == NULL) {
return -1;
}
if ((fo = fopen(argv[2], "w")) == NULL) {
fclose(fi);
return -1;
}
while((ch = fgetc(fi)) != EOF){
fputc(ch, fo);
}
fclose(fi);
fclose(fo);
return 0;
}
861デフォルトの名無しさん (ワッチョイ 5922-UJUP)
2018/01/11(木) 06:46:10.27ID:S67tZ9jk0 関数仮引数を動的検査している
終了ステートが負論理
system_errorを使っていない
C++なのにfopen
終了ステートが負論理
system_errorを使っていない
C++なのにfopen
862デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/11(木) 06:55:18.88ID:bQ6Hme0D0 fpucとfgetcの繰り返しは短いファイルなら良いけど長いファイルだとCPU時間やたら食うだけのクソになるな
863デフォルトの名無しさん (ドコグロ MM12-J7fK)
2018/01/11(木) 07:06:36.75ID:W1ryMExAM >>860
改善点以前にコンパイルできるコードを持ってこいよ...
> if ((fo = fopen(argv[2], "w")) == NULL) {
あと文字単位のコピーは非効率だからせめて fread/fwrite にすべき
また使える環境ならstd::filesystem::copyとかを使った方がいい
http://en.cppreference.com/w/cpp/filesystem/copy
改善点以前にコンパイルできるコードを持ってこいよ...
> if ((fo = fopen(argv[2], "w")) == NULL) {
あと文字単位のコピーは非効率だからせめて fread/fwrite にすべき
また使える環境ならstd::filesystem::copyとかを使った方がいい
http://en.cppreference.com/w/cpp/filesystem/copy
864デフォルトの名無しさん (スプッッ Sd0a-zuLH)
2018/01/11(木) 07:23:14.65ID:1qlx+5WGd865デフォルトの名無しさん (スプッッ Sd0a-zuLH)
2018/01/11(木) 07:33:45.62ID:1qlx+5WGd freadを考えてみたけどファイルサイズ不明な場合一度に読み込むバッファサイズとかどうなるん?
866デフォルトの名無しさん (ワッチョイ 6a12-0PCX)
2018/01/11(木) 08:03:11.10ID:Nwq/3BKy0 各マシンでの最適なバッファサイズを逐一計算して求めるのがC++
867デフォルトの名無しさん (ドコグロ MM12-J7fK)
2018/01/11(木) 08:10:51.08ID:W1ryMExAM >>865
環境わからんからなんとも言えんが10KB程度とっときゃいいんじゃね?
環境わからんからなんとも言えんが10KB程度とっときゃいいんじゃね?
868デフォルトの名無しさん (ワッチョイ a59e-/QpA)
2018/01/11(木) 09:08:45.65ID:lNcIwFA20869デフォルトの名無しさん (ワッチョイ 4923-v0zr)
2018/01/11(木) 09:58:35.85ID:3a3jMnur0 >>860
fopen の引数は “rb” “wb” にしておくのが一般的
もし実用品として使うならなるべく大きな単位、
最低でも1Mバイト程度はまとめて読み書きすると良いよ。100Mでもいい。
細かい単位で読んで書いてを行うとHDDで大きなファイルを処理する場合とてつもなく遅くなる。
あとそういう書き方をしたいならそれは c++ ではなく
c のスレ(あるのか知らんが)で聞く内容だと思う
fopen の引数は “rb” “wb” にしておくのが一般的
もし実用品として使うならなるべく大きな単位、
最低でも1Mバイト程度はまとめて読み書きすると良いよ。100Mでもいい。
細かい単位で読んで書いてを行うとHDDで大きなファイルを処理する場合とてつもなく遅くなる。
あとそういう書き方をしたいならそれは c++ ではなく
c のスレ(あるのか知らんが)で聞く内容だと思う
870デフォルトの名無しさん (ワッチョイ 5922-UJUP)
2018/01/11(木) 10:03:28.58ID:S67tZ9jk0 >>868
不勉強を恥じろボケ
#include <filesystem>
#include <iostream>
auto copy(char const* src, char const* dst)
{
try
{
return std::filesystem::copy_file(src, dst);
}
catch(std::exception& err)
{
std::cerr << err.what();
}
return false;
}
不勉強を恥じろボケ
#include <filesystem>
#include <iostream>
auto copy(char const* src, char const* dst)
{
try
{
return std::filesystem::copy_file(src, dst);
}
catch(std::exception& err)
{
std::cerr << err.what();
}
return false;
}
871はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD)
2018/01/11(木) 10:19:39.83ID:jbhd+X3/0 filesystem がまだ使えない環境もあるかもしれんので小ネタを披露しておくと、
rdbuf を使う方法があるんや。
ifstream in(src);
ostream out(dst);
out << in.rdbuf();
みたいな要領な。 エラー処理は適宜うまいことやってくれ。
rdbuf を使う方法があるんや。
ifstream in(src);
ostream out(dst);
out << in.rdbuf();
みたいな要領な。 エラー処理は適宜うまいことやってくれ。
872デフォルトの名無しさん (ワッチョイ 4923-v0zr)
2018/01/11(木) 11:19:16.78ID:3a3jMnur0 パフォーマンス厨だが
もし実用するなら setvbuf の rdbuf 版みたいなのがあるからそれも呼ぶべきと一言
もし実用するなら setvbuf の rdbuf 版みたいなのがあるからそれも呼ぶべきと一言
873デフォルトの名無しさん
2018/01/11(木) 12:15:07.96 system("cp -f a.txt b.txt") でいいよね(´・ω・`)
874デフォルトの名無しさん (スップ Sd0a-iyAC)
2018/01/11(木) 13:09:33.65ID:EPrc03FTd パフォーマンス厨なら
リードとライトは別スレッドにするとか
読み書きサイズをクラスタサイズの倍数にするとか
リードとライトは別スレッドにするとか
読み書きサイズをクラスタサイズの倍数にするとか
875デフォルトの名無しさん (ワッチョイ 7db3-JQPx)
2018/01/11(木) 13:20:11.53ID:eUOyd8Rr0 物理的に別のデバイスならリード/ライトは別スレッドで回したほうが速いだろうが、同じデバイスだとシングルスレッドでも大差ないだろうな
あとはバッファサイズをできるだけ大きく取って、IOの発行数を抑えるのが王道かな
あとはバッファサイズをできるだけ大きく取って、IOの発行数を抑えるのが王道かな
876デフォルトの名無しさん (ワッチョイ 118a-QzTo)
2018/01/11(木) 14:07:04.69ID:VjH1J6HL0877デフォルトの名無しさん (アウアウカー Sa55-EKU2)
2018/01/11(木) 14:43:56.63ID:EDmjquO+a プログラミングなんてどっかからコード引っ張って書けば一切手を汚すことなくできるのに何偉そうに言ってんだか...
英語読めないからって海外の文献を参考にせず自分で作ろうとする日本人の無駄な努力には呆れるよ
アメリカ「アホだから」
韓国「レベル低いな」
インド「アジアの恥さらし」って思われてそう
英語読めないからって海外の文献を参考にせず自分で作ろうとする日本人の無駄な努力には呆れるよ
アメリカ「アホだから」
韓国「レベル低いな」
インド「アジアの恥さらし」って思われてそう
878デフォルトの名無しさん (アウアウカー Sa55-EKU2)
2018/01/11(木) 14:48:19.11ID:xUZeJB/aa 必死こいてコード書いてるやつ見ると情けない
世界65億人130カ国!
お前の書いてるコードがまさか地球上にないものだと思ってんの?
プログラマーの端くれが、そりゃトップで活躍するプログラマーなら常に新しいものを求めてるから生き残るけど...
それ未満は10年後にはAI、またはコード共有化が進んで消えた職業になっているだろうね
悲しいけど現実見てくれ
世界65億人130カ国!
お前の書いてるコードがまさか地球上にないものだと思ってんの?
プログラマーの端くれが、そりゃトップで活躍するプログラマーなら常に新しいものを求めてるから生き残るけど...
それ未満は10年後にはAI、またはコード共有化が進んで消えた職業になっているだろうね
悲しいけど現実見てくれ
879デフォルトの名無しさん (ワッチョイ 5922-UJUP)
2018/01/11(木) 15:17:43.47ID:S67tZ9jk0 構ってちゃんが必死で連投してるな
著作権だの互換性だのと縁のない幸せ者だな
著作権だの互換性だのと縁のない幸せ者だな
880デフォルトの名無しさん (ドコグロ MM0a-5dQQ)
2018/01/11(木) 15:32:14.08ID:deNLSlJUM >>876
バカにするなら模範コードぐらい書いてやれよ。
バカにするなら模範コードぐらい書いてやれよ。
881デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/11(木) 16:16:00.19ID:bQ6Hme0D0 テストしてないけど
const size_t BUF_SZ=8192;
char buf[BUF_SZ];
while(!feof(fi)){
size_t n=fread(buf,sizeof char,BUF_SZ,fi);
if(n&&n!=fwrite(buf,sizeof char,n,fo)) {perror("ディスクエラー");return -1;}
}
>>873
WindowsならSHFileOperationかな?
windowsでsystem叩くのは文字数制限とか""のくくり方とか微妙に怪しくてなんか嫌なんよね
const size_t BUF_SZ=8192;
char buf[BUF_SZ];
while(!feof(fi)){
size_t n=fread(buf,sizeof char,BUF_SZ,fi);
if(n&&n!=fwrite(buf,sizeof char,n,fo)) {perror("ディスクエラー");return -1;}
}
>>873
WindowsならSHFileOperationかな?
windowsでsystem叩くのは文字数制限とか""のくくり方とか微妙に怪しくてなんか嫌なんよね
お題:http://mevius.2ch.net/test/read.cgi/tech/1480579110/981
回答
http://mevius.2ch.net/test/read.cgi/tech/1480579110/997
http://mevius.2ch.net/test/read.cgi/tech/1434079972/30
https://ideone.com/LV4UdE
while (bytesDataNum > 0) {
int n;
fin.read((char *)&buffer, std::min(N, bytesDataNum));
if (fin.fail())
return 0;
n = fin.gcount();
fout.write((char *)&buffer, n);
if (fout.fail())
return 0;
bytesDataNum -= n;
}
return 1;
}
C++fstream/read/write を使うのだったらこんなところか
>>881 の n = fread() が BUF_SZ に満たなくてもエラーが立ってしまうのが思案のしどころだね、あらかじめ読み込みバイト数を知っておかなければならない‥
回答
http://mevius.2ch.net/test/read.cgi/tech/1480579110/997
http://mevius.2ch.net/test/read.cgi/tech/1434079972/30
https://ideone.com/LV4UdE
while (bytesDataNum > 0) {
int n;
fin.read((char *)&buffer, std::min(N, bytesDataNum));
if (fin.fail())
return 0;
n = fin.gcount();
fout.write((char *)&buffer, n);
if (fout.fail())
return 0;
bytesDataNum -= n;
}
return 1;
}
C++fstream/read/write を使うのだったらこんなところか
>>881 の n = fread() が BUF_SZ に満たなくてもエラーが立ってしまうのが思案のしどころだね、あらかじめ読み込みバイト数を知っておかなければならない‥
883デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/11(木) 17:11:02.74ID:bQ6Hme0D0 せやね。エラーチェックは難しいのう。
const size_t BUF_SZ=8192;
char buf[BUF_SZ];
while(!feof(fi)){
size_t n=fread(buf,sizeof char,BUF_SZ,fi);
if(!n) {perror("ディスク読み込みエラー");return -1;}
if(n!=fwrite(buf,sizeof char,n,fo)) {perror("ディスク書き込みエラー");return -1;}
}
const size_t BUF_SZ=8192;
char buf[BUF_SZ];
while(!feof(fi)){
size_t n=fread(buf,sizeof char,BUF_SZ,fi);
if(!n) {perror("ディスク読み込みエラー");return -1;}
if(n!=fwrite(buf,sizeof char,n,fo)) {perror("ディスク書き込みエラー");return -1;}
}
884デフォルトの名無しさん (ワッチョイ 118a-QzTo)
2018/01/11(木) 17:32:08.08ID:VjH1J6HL0 >>880
さてそんなこと言われてもプラットフォームすら指定されていないし
例えばWindowsなら↓一発で済む話だよな
https://msdn.microsoft.com/ja-jp/library/cc429185.aspx
ファイルコピーごときに自前でコードなんか書いてられるかよ
さてそんなこと言われてもプラットフォームすら指定されていないし
例えばWindowsなら↓一発で済む話だよな
https://msdn.microsoft.com/ja-jp/library/cc429185.aspx
ファイルコピーごときに自前でコードなんか書いてられるかよ
885デフォルトの名無しさん (ワッチョイ 5922-UJUP)
2018/01/11(木) 17:55:46.00ID:S67tZ9jk0 ISO/IEC14882の現行規格を差し置いて何を今さら。。。
Windowsなら純正コンパイラが対応しているだろうが
Windowsなら純正コンパイラが対応しているだろうが
886デフォルトの名無しさん (ワッチョイ 39eb-0PCX)
2018/01/11(木) 17:57:34.42ID:zx3yce6m0 ニートが部下がどうのこうの言ってて笑える
887デフォルトの名無しさん (ワッチョイ 118a-QzTo)
2018/01/11(木) 18:03:32.29ID:VjH1J6HL0 >>886
お前の境遇はよく分かったから勝手に笑っとけ
お前の境遇はよく分かったから勝手に笑っとけ
888デフォルトの名無しさん (ワッチョイ 9ee7-5dQQ)
2018/01/11(木) 19:35:14.53ID:ga/Vikbp0889デフォルトの名無しさん (ワッチョイ 118a-QzTo)
2018/01/11(木) 19:49:16.17ID:VjH1J6HL0 boost依存は出来る限り避けたいなあ
890デフォルトの名無しさん
2018/01/11(木) 21:10:50.25 またこの荒らしか
Pythonのスレにも居たな
Pythonのスレにも居たな
891デフォルトの名無しさん
2018/01/11(木) 21:11:35.20892デフォルトの名無しさん (ワッチョイ f17f-XFrZ)
2018/01/11(木) 21:40:25.98ID:x0MoCwhB0 とりあえずだ、fcloseの戻り値判定してないのも誰かつっこんでやれよ。。。
普段気にするところじゃないけど、わりと重要だよな?書き込み系のclose処理
普段気にするところじゃないけど、わりと重要だよな?書き込み系のclose処理
893デフォルトの名無しさん (スプッッ Sdea-v0zr)
2018/01/11(木) 22:01:49.89ID:qoSoxo2Ld バッファサイズ8kだと少し大きなファイルコピーすると結構遅くなるよ
書き込み側はOSのキャッシュが効くからそうはならんだろうけど
メモリはいっぱいあるんだし動的確保でもして一気に128Mくらい行くべし
>>889
簡単な処理はあまり外部依存しないコードにしたいよね
書き込み側はOSのキャッシュが効くからそうはならんだろうけど
メモリはいっぱいあるんだし動的確保でもして一気に128Mくらい行くべし
>>889
簡単な処理はあまり外部依存しないコードにしたいよね
894デフォルトの名無しさん (ブーイモ MM8e-TSXj)
2018/01/11(木) 22:07:24.01ID:1W7yBpCQM 関数のconst参照引数って
コピーが重い方だと意味あるけど
intとかsize_tとかだと全く意味ないの?
コピーが重い方だと意味あるけど
intとかsize_tとかだと全く意味ないの?
895デフォルトの名無しさん
2018/01/11(木) 22:18:41.87 >>894
どっちが軽いか考えてみればいいじゃん
(1) 常に8バイトの数値(アドレス)を引数として渡すためにコピーして、呼び出された関数側でそのアドレスから値をコピーして、処理に使う
(2) 1〜8バイトの数値を引数として渡すためにコピーして、呼び出された関数側でその値を処理に使う
どっちが軽いか考えてみればいいじゃん
(1) 常に8バイトの数値(アドレス)を引数として渡すためにコピーして、呼び出された関数側でそのアドレスから値をコピーして、処理に使う
(2) 1〜8バイトの数値を引数として渡すためにコピーして、呼び出された関数側でその値を処理に使う
896デフォルトの名無しさん (ブーイモ MM8e-TSXj)
2018/01/11(木) 22:39:48.54ID:1W7yBpCQM897はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD)
2018/01/11(木) 23:12:05.45ID:jbhd+X3/0 >>896
内実としては参照はデリファレンスが自動化されたポインタと思ってもさしつかえないと思う。
ABI レベルで見ればポインタと互換性が有りさえするアーキテクチャも有る。 (言語仕様で保証しているわけではない。)
内実としては参照はデリファレンスが自動化されたポインタと思ってもさしつかえないと思う。
ABI レベルで見ればポインタと互換性が有りさえするアーキテクチャも有る。 (言語仕様で保証しているわけではない。)
898デフォルトの名無しさん (ワッチョイ 2a98-aOXM)
2018/01/12(金) 07:31:11.05ID:uquo2DHh0 はちみつ餃子はc++とscheme以外に何が使えるの?
899はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD)
2018/01/12(金) 07:51:53.51ID:UAqgHqOi0 そんなこと知ってどうするんや
900デフォルトの名無しさん (ワッチョイ 2a98-aOXM)
2018/01/12(金) 07:54:27.14ID:uquo2DHh0 好奇心ですよ好奇心
901デフォルトの名無しさん (ワッチョイ 39eb-0PCX)
2018/01/12(金) 07:54:44.69ID:xirJS+K20 マウント取りに行くんだろ
902デフォルトの名無しさん (ワッチョイ 2a98-aOXM)
2018/01/12(金) 07:56:18.96ID:uquo2DHh0 そんなに悪いかよ
じゃあ結構です
じゃあ結構です
903デフォルトの名無しさん
2018/01/12(金) 08:14:19.27 >>899
恥ずかしガンなって
恥ずかしガンなって
904デフォルトの名無しさん (ワッチョイ 8ae7-0PCX)
2018/01/12(金) 22:48:03.44ID:bn5FfgmT0 メンバがint2つくらいだとコピー渡しにするか参照渡しにするかちょっと悩む
int4つくらいまでならキャッシュの関係でコピーのほうが早いとか聞いたことあるけど本当なのかね
int4つくらいまでならキャッシュの関係でコピーのほうが早いとか聞いたことあるけど本当なのかね
905デフォルトの名無しさん (ワッチョイ 3d7f-QpsD)
2018/01/12(金) 22:50:47.10ID:iYjzTsi20 FF15ではベクトルクラスはコピーにしたら劇的に早くなったと言っていた
906はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD)
2018/01/13(土) 01:03:55.02ID:SxvD86sf0 ゲーム機は尖ったアーキテクチャだったりするから……。
やってみないとわからん。
やってみないとわからん。
907デフォルトの名無しさん (ワッチョイ 7db3-KClg)
2018/01/13(土) 11:47:10.72ID:ARtU5FzH0 いやゲーム屋なら当たり前の話だよ
IntelのCPUだってSSEあるし、__m128は出来るだけ値渡しした方がいいはず
(もちろんインライン展開された場合は除く
IntelのCPUだってSSEあるし、__m128は出来るだけ値渡しした方がいいはず
(もちろんインライン展開された場合は除く
908デフォルトの名無しさん (ワッチョイ b5b3-QpsD)
2018/01/13(土) 12:22:15.14ID:nudx6UkM0 >>905
ソース教えて欲しい
ソース教えて欲しい
909デフォルトの名無しさん (ワッチョイ 3d7f-QpsD)
2018/01/13(土) 12:24:13.94ID:A7bueCBw0910デフォルトの名無しさん (ワッチョイ b5b3-QpsD)
2018/01/13(土) 12:34:35.23ID:nudx6UkM0 >>909
ありがとうございます
ありがとうございます
911デフォルトの名無しさん (ワッチョイ 8abd-kJSF)
2018/01/13(土) 13:06:59.87ID:jbKISc2y0 インライン展開されたら値渡しだろうが参照渡しだろうが(あんま)関係無いんじゃ…
※ 参照と不十分なインライン展開が重なったときmemory aliasingによる最適化の阻害の危険性がちょっと増すぐらい
※ 参照と不十分なインライン展開が重なったときmemory aliasingによる最適化の阻害の危険性がちょっと増すぐらい
912デフォルトの名無しさん (ワッチョイ 6d04-lXUw)
2018/01/13(土) 21:20:30.95ID:1X9BcJ9h0 クラスの継承について質問です。
スーパークラス(Super)を継承したサブクラス(Sub)内にて
スーパークラスの関数func()をoverrideしています。
このサブクラスのfunc()の中で、
スーパークラスのfunc()をそのまま呼び出したいときは、
このようにする方法がありますよね。
void Sub::func(){
____Super::func();
____/*その他の処理*/
}
しかし、これはサブクラス側の自由であり、
スーパークラスのfuncを実行しないこともできます。
そこで、サブクラスのすべてのfunc()で
スーパークラスのfunc()が必ず処理されるように強制したいです。
これは可能でしょうか?
文字通りではなく、擬似的な手段で構いません。
よろしくお願いします。
スーパークラス(Super)を継承したサブクラス(Sub)内にて
スーパークラスの関数func()をoverrideしています。
このサブクラスのfunc()の中で、
スーパークラスのfunc()をそのまま呼び出したいときは、
このようにする方法がありますよね。
void Sub::func(){
____Super::func();
____/*その他の処理*/
}
しかし、これはサブクラス側の自由であり、
スーパークラスのfuncを実行しないこともできます。
そこで、サブクラスのすべてのfunc()で
スーパークラスのfunc()が必ず処理されるように強制したいです。
これは可能でしょうか?
文字通りではなく、擬似的な手段で構いません。
よろしくお願いします。
913デフォルトの名無しさん (ワッチョイ 6d04-lXUw)
2018/01/13(土) 21:22:05.60ID:1X9BcJ9h0 ↑誤字修正致します。
☓そこで、サブクラスのすべてのfunc()で
○そこで、すべてのサブクラスのfunc()で
申し訳ございません。
☓そこで、サブクラスのすべてのfunc()で
○そこで、すべてのサブクラスのfunc()で
申し訳ございません。
914はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD)
2018/01/13(土) 21:27:01.54ID:SxvD86sf0 スーパークラスとかサブクラスとか言ってるやつにイラッとするのが C++er
915片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd0a-TJOf)
2018/01/13(土) 21:35:37.12ID:P0Ulq8gud メソッドチェーンというものを自作すればコントロール可能だが、ややこしい上にオーバーヘッドがある。
916片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd0a-TJOf)
2018/01/13(土) 21:42:39.62ID:P0Ulq8gud ごめん、間違った。
メソッドチェーンじゃなくてC#デリゲート。
メソッドチェーンじゃなくてC#デリゲート。
917デフォルトの名無しさん (ワッチョイ 6d04-lXUw)
2018/01/13(土) 21:45:31.67ID:1X9BcJ9h0918デフォルトの名無しさん (ワッチョイ 6d04-lXUw)
2018/01/13(土) 21:49:30.82ID:1X9BcJ9h0919デフォルトの名無しさん (ワッチョイ 0aa8-XiqC)
2018/01/13(土) 22:24:25.09ID:B4wYryLR0 NVIでぐぐれや
920デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/13(土) 22:56:11.51ID:6aei/M/30 Java厨絶滅成就(・人・)ナムナム
921はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD)
2018/01/13(土) 23:27:00.62ID:SxvD86sf0 >>917
スーパーというのはある集合を内包する、より大きな集合。 サブというのはある集合の一部の集合。
このとき、オブジェクト指向におけるクラスというのはインスタンスの集合とみなして、
サブクラスはスーパークラスの一部の集合とする考え方によってスーパー/サブと言ってる。
しかし、あるクラスをクラスが持つ機能 (メソッド) の集合と考えるとスーパー/サブが逆転する。
これはわかり難くて混乱の元。
という教訓に基づき基底クラス (base class) と派生クラス (derived class) という用語を C++ では採用した。
ちなみに C++ にはサブオブジェクトという用語はあって、
これはあるオブジェクトのデータメンバや基底のオブジェクトのこと。
スーパーというのはある集合を内包する、より大きな集合。 サブというのはある集合の一部の集合。
このとき、オブジェクト指向におけるクラスというのはインスタンスの集合とみなして、
サブクラスはスーパークラスの一部の集合とする考え方によってスーパー/サブと言ってる。
しかし、あるクラスをクラスが持つ機能 (メソッド) の集合と考えるとスーパー/サブが逆転する。
これはわかり難くて混乱の元。
という教訓に基づき基底クラス (base class) と派生クラス (derived class) という用語を C++ では採用した。
ちなみに C++ にはサブオブジェクトという用語はあって、
これはあるオブジェクトのデータメンバや基底のオブジェクトのこと。
922デフォルトの名無しさん
2018/01/14(日) 00:30:48.99 >>921
> ちなみに C++ にはサブオブジェクトという用語はあって、
> これはあるオブジェクトのデータメンバや基底のオブジェクトのこと。
へー、スーパークラス=基底クラスで、基底のオブジェクト=サブオブジェクトなのか
これがスーパー/サブの逆転ってやつか
確かにわかりづらいね
> ちなみに C++ にはサブオブジェクトという用語はあって、
> これはあるオブジェクトのデータメンバや基底のオブジェクトのこと。
へー、スーパークラス=基底クラスで、基底のオブジェクト=サブオブジェクトなのか
これがスーパー/サブの逆転ってやつか
確かにわかりづらいね
923デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/14(日) 00:33:39.99ID:ng7CbKaO0 スーパーとかダセェ
924デフォルトの名無しさん (ワッチョイ 8abd-kJSF)
2018/01/14(日) 01:04:12.68ID:6MYOWaJx0 VC++だと派生クラスBarから基底クラスFooのメソッドfuncを
__super::func()
という風に
__super
キ──ワ──ドが使えるんじゃ!
__super::func()
という風に
__super
キ──ワ──ドが使えるんじゃ!
925デフォルトの名無しさん (ワッチョイ 8ae7-0PCX)
2018/01/14(日) 05:55:30.36ID:06kwM4S00 privateなvirtual funcImpl()をカスタマイズポイントとして派生クラスに自由にオーバーライドさせて
基底クラスのpublicなfunc()で>>912で言うところのSuper::func()相当の処理してからfuncImpl()を呼ぶ
(func()自体はnon-virtual)
ってのがまあ常套手段だと思うけどそれだと困る?
基底クラスのpublicなfunc()で>>912で言うところのSuper::func()相当の処理してからfuncImpl()を呼ぶ
(func()自体はnon-virtual)
ってのがまあ常套手段だと思うけどそれだと困る?
926デフォルトの名無しさん (ワッチョイ ad7e-UJUP)
2018/01/14(日) 06:37:11.95ID:N+BeAo4b0 >>924
多重継承してるとあかんけどな
多重継承してるとあかんけどな
927デフォルトの名無しさん (ワッチョイ 6a12-0PCX)
2018/01/14(日) 10:01:41.75ID:Z2heVtXU0 >>922
多分ちげーんだろーな
C++のサブオブジェクトはサブリミナルとかのサブだろ
オブジェクトに潜んでる何かだろ
つい最近にもあった潜性/顕性の潜性の方だろ
無理に対義語作るならジス(this)・オブジェクトかメイン・オブジェクトじゃねえの
多分ちげーんだろーな
C++のサブオブジェクトはサブリミナルとかのサブだろ
オブジェクトに潜んでる何かだろ
つい最近にもあった潜性/顕性の潜性の方だろ
無理に対義語作るならジス(this)・オブジェクトかメイン・オブジェクトじゃねえの
928デフォルトの名無しさん (ワッチョイ 8ae7-0PCX)
2018/01/14(日) 12:55:55.66ID:06kwM4S00 サブセットのサブだろ
あるオブジェクトの一部分がサブオブジェクト
対義語はやっぱりスーパーだよ
あるオブジェクトの一部分がサブオブジェクト
対義語はやっぱりスーパーだよ
929デフォルトの名無しさん (ワッチョイ ad7e-UJUP)
2018/01/14(日) 13:03:04.48ID:N+BeAo4b0 部分オブジェクトの反対語をスーパーオブジェクトとは言わん
930デフォルトの名無しさん (ワッチョイ 8ae7-0PCX)
2018/01/14(日) 13:14:31.73ID:06kwM4S00 でもサブセットの反対はスーパーセットだろ
931デフォルトの名無しさん (ワッチョイ 4923-IjLh)
2018/01/14(日) 13:32:41.21ID:0BOIhrZQ0 subset, subhuman などに使われる前置詞 sub だろ
語義は「不完全な」だ
語義は「不完全な」だ
932デフォルトの名無しさん
2018/01/14(日) 14:17:12.73 じゃあ対義語はconcreteか
933デフォルトの名無しさん (ワッチョイ 8abd-kJSF)
2018/01/14(日) 15:03:36.89ID:6MYOWaJx0 集合は要素の重複を認めないのでスーパーオブジェクトとかサブオブジェクトとか言う方が異端なのでは…
934デフォルトの名無しさん (ワッチョイ 8abd-kJSF)
2018/01/14(日) 15:06:32.87ID:6MYOWaJx0 英語圏の方々の言語感覚は正直ワカランこともあるが
「具体的な」(Concrete)と「完全な」(Complete)は多分使い分けられれているのではないか
「具体的な」(Concrete)と「完全な」(Complete)は多分使い分けられれているのではないか
935デフォルトの名無しさん (ワッチョイ 8abd-kJSF)
2018/01/14(日) 15:11:45.36ID:6MYOWaJx0 >>926
クラスcがクラスaの単一継承なら
{ クラスcに属するオブジェクト } ⊂ { クラスaに属するオブジェクト } ・・・ (1)
なのでa::func()はcから見て__super::func()で正しいが、
クラスcがクラスaとbの間の子なら、(1)および
{ クラスcに属するオブジェクト } ⊂ { クラスbに属するオブジェクト } ・・・ (2)
はどっちも成立しないから__superキーワードが使えないのはある意味当然で整合的と言える、
クラスcがクラスaの単一継承なら
{ クラスcに属するオブジェクト } ⊂ { クラスaに属するオブジェクト } ・・・ (1)
なのでa::func()はcから見て__super::func()で正しいが、
クラスcがクラスaとbの間の子なら、(1)および
{ クラスcに属するオブジェクト } ⊂ { クラスbに属するオブジェクト } ・・・ (2)
はどっちも成立しないから__superキーワードが使えないのはある意味当然で整合的と言える、
936デフォルトの名無しさん (ワッチョイ 8abd-kJSF)
2018/01/14(日) 15:30:00.21ID:6MYOWaJx0 スマン訂正
クラスcがクラスaとbの間の子(で公開継承)なら、(1)と(2)が両方成立するんだったorz
(cのインスタンスはaのインスタンスとしてもbのインスタンスとしても扱える
ついでに補足で、>>933は「包含関係の意味でスーパーとかサブとか言うなら」異端という意味
クラスcがクラスaとbの間の子(で公開継承)なら、(1)と(2)が両方成立するんだったorz
(cのインスタンスはaのインスタンスとしてもbのインスタンスとしても扱える
ついでに補足で、>>933は「包含関係の意味でスーパーとかサブとか言うなら」異端という意味
937デフォルトの名無しさん (ワッチョイ ad6a-UJUP)
2018/01/14(日) 21:03:41.51ID:66CfjFh30 >>931
incompleteとは違うね
incompleteとは違うね
std::set にて std::set<int> に特化して実装しようとしていますが、
ここで private メンバーである iterator positionToInsert(int n) を記述しようとして、はまっています
iterator posisionToInsert(int n) :
n を挿入するべき内部テーブルの位置(イテレータ)を返す
n がすでに set にあったら nullptr を返す
としたかったんですが
・nullptr を iterator に代入できない
・そもそも コンテナ.end() が nullptr だ(無理にキャストしてみて分かった)…@
返り値を複数にするしかないのかな…
std:set.insert() も pair を返すみたいですし
@は規格で決まっているのでしょうか?処理系依存でしょうか?
https://teratail.com/questions/25576
ここで private メンバーである iterator positionToInsert(int n) を記述しようとして、はまっています
iterator posisionToInsert(int n) :
n を挿入するべき内部テーブルの位置(イテレータ)を返す
n がすでに set にあったら nullptr を返す
としたかったんですが
・nullptr を iterator に代入できない
・そもそも コンテナ.end() が nullptr だ(無理にキャストしてみて分かった)…@
返り値を複数にするしかないのかな…
std:set.insert() も pair を返すみたいですし
@は規格で決まっているのでしょうか?処理系依存でしょうか?
https://teratail.com/questions/25576
939デフォルトの名無しさん (ワッチョイ 5d8a-QpsD)
2018/01/15(月) 00:07:45.76ID:akdFGtdY0 iteratorはポインタちゃうで
940デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/15(月) 00:52:09.62ID:p80Tlp9s0 変なメンバ関数つくるよりfind使っておけよトーシロー
理解できないなら余計な機能追加はするな
余計にわからなくしてプログラムを目茶苦茶にするな
理解できないなら余計な機能追加はするな
余計にわからなくしてプログラムを目茶苦茶にするな
941デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/15(月) 00:54:40.48ID:p80Tlp9s0 findじゃないなlower_boundで位置は把握できるだろこのハゲー
942片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ b5b3-TJOf)
2018/01/15(月) 01:03:25.78ID:egVCSXHP0 std::setは挿入する位置を気にしないはずだが。設計思想が間違っている。
943デフォルトの名無しさん (ワッチョイ c576-iyAC)
2018/01/15(月) 08:06:37.84ID:ss1wTrUG0 おれば後ろより前に挿入する方が好き
945デフォルトの名無しさん (ワッチョイ 4923-IjLh)
2018/01/15(月) 11:18:44.64ID:WC62iZPf0946デフォルトの名無しさん (ブーイモ MM8e-BVdN)
2018/01/15(月) 14:02:37.88ID:2ZVCG19QM >>939-942,945-946
コメントありがとうございます
>>945
はい、結果と成否をわけることにしました
http://mevius.2ch.net/test/read.cgi/tech/1434079972/33
コメントありがとうございます
>>945
はい、結果と成否をわけることにしました
http://mevius.2ch.net/test/read.cgi/tech/1434079972/33
948デフォルトの名無しさん (ワッチョイ 3946-TSXj)
2018/01/15(月) 22:43:32.66ID:9+FUM4nJ0 class Foo{
void function(){
hoge.exe();
}
private:
Hoge hoge;
}
と
class Foo{
void function(Hoge& hoge){
hoge.exe();
}
}
どっちが最適化かかりやすい?
void function(){
hoge.exe();
}
private:
Hoge hoge;
}
と
class Foo{
void function(Hoge& hoge){
hoge.exe();
}
}
どっちが最適化かかりやすい?
949デフォルトの名無しさん (ワッチョイ b623-aOXM)
2018/01/15(月) 22:51:21.17ID:aACM4QK20 ほぼ変わらないと思うけど
スタックに積まない分前者かなと思う
スタックに積まない分前者かなと思う
950デフォルトの名無しさん (ワントンキン MM7a-Rz0Q)
2018/01/15(月) 23:37:09.62ID:GwTCehVfM ただのラッパなら自由関数にしれ
951デフォルトの名無しさん (ワッチョイ 8acb-dIle)
2018/01/16(火) 00:21:59.76ID:683mXkIO0 >>948
情報処理における罪の多くは最適化の名のもとでなされる。
そこはメンテナンス性の高い方を選ぶべき。
これから何千行のコードを書こうとしてるのか知らないけど、いちいちそんなことに頭使ってたら禿げるよ。
情報処理における罪の多くは最適化の名のもとでなされる。
そこはメンテナンス性の高い方を選ぶべき。
これから何千行のコードを書こうとしてるのか知らないけど、いちいちそんなことに頭使ってたら禿げるよ。
952デフォルトの名無しさん (ワッチョイ add5-UJUP)
2018/01/16(火) 06:29:10.56ID:zATeRHxg0 データメンバへのアクセスはthis経由なので
ポインタにオフセットを書けて逆参照という動作になる
左辺値参照の場合はオフセットなしで逆参照
いずれにせよ仮引数を受け取るという点は同じ動作だ
最適化という観点からはデータメンバはrestrictが付いているようなもので
若干有利ではないかな
ただしデータメンバの場合は全ての非静的メンバ関数が関与する可能性があり
仮引数の場合は当該関数のみというアクセス範囲の違いがあるので
最適化する以前の、基本的な設計で選ぶべきだろう
ポインタにオフセットを書けて逆参照という動作になる
左辺値参照の場合はオフセットなしで逆参照
いずれにせよ仮引数を受け取るという点は同じ動作だ
最適化という観点からはデータメンバはrestrictが付いているようなもので
若干有利ではないかな
ただしデータメンバの場合は全ての非静的メンバ関数が関与する可能性があり
仮引数の場合は当該関数のみというアクセス範囲の違いがあるので
最適化する以前の、基本的な設計で選ぶべきだろう
953デフォルトの名無しさん (ワッチョイ a99f-IxFb)
2018/01/16(火) 06:49:48.40ID:TUkAINts0 messageboxで変数は表示できますか。
954デフォルトの名無しさん (ワッチョイ add5-UJUP)
2018/01/16(火) 07:53:30.35ID:zATeRHxg0 できるけど、モーダルでもモードレスでもかなりうぜえぞ
template <typename T>
void display(T const& variable)
{
stringstream ss;
ss << variable;
MessageBox(NULL, ss.str().data(), typeid(variable).name(), MB_OK);
}
template <typename T>
void display(T const& variable)
{
stringstream ss;
ss << variable;
MessageBox(NULL, ss.str().data(), typeid(variable).name(), MB_OK);
}
955デフォルトの名無しさん (ワッチョイ e531-BgxS)
2018/01/16(火) 17:35:22.56ID:GcKo/GK70 質問させてください。VS2008で仮想継承使っていたら以下の警告が出たんですが、警告が出ないようにするにはどうすればいいでしょうか?
warning C4250: 'CHoge' : 2 つ以上のメンバが同じ名前を持っています。'CTest1::CTest1::Draw' から継承します。
----------------------
class ITest1 {
public: virtual void Draw() = 0;
};
class CTest1 : virtual public ITest1 {
public: virtual void Draw() { printf("Draw\n"); }
};
class ITest2 : virtual public ITest1 {
public: virtual void Func() = 0;
};
class CHoge : public ITest2, public CTest1 {
public: virtual void Func() {}
};
warning C4250: 'CHoge' : 2 つ以上のメンバが同じ名前を持っています。'CTest1::CTest1::Draw' から継承します。
----------------------
class ITest1 {
public: virtual void Draw() = 0;
};
class CTest1 : virtual public ITest1 {
public: virtual void Draw() { printf("Draw\n"); }
};
class ITest2 : virtual public ITest1 {
public: virtual void Func() = 0;
};
class CHoge : public ITest2, public CTest1 {
public: virtual void Func() {}
};
956デフォルトの名無しさん (ワッチョイ add5-UJUP)
2018/01/16(火) 18:00:29.71ID:zATeRHxg0 VS2017ではデフォでは何も言ってこず
/W4にするとC4250が出る
warningだろ? errorは直すしかないが
warningは内容を読んで理解したうえでどうするかを判断するものだ
必ず消そうと思うな、キリねえぞ
意味を理解しないからdisられたと思っちまうんだよ
/W4にするとC4250が出る
warningだろ? errorは直すしかないが
warningは内容を読んで理解したうえでどうするかを判断するものだ
必ず消そうと思うな、キリねえぞ
意味を理解しないからdisられたと思っちまうんだよ
957デフォルトの名無しさん (ワッチョイ add5-UJUP)
2018/01/16(火) 18:02:50.15ID:zATeRHxg0 どうしても「消すこと」が絶対ならこれやっとけ
#pragma warning(disable : 4250)
#pragma warning(disable : 4250)
958デフォルトの名無しさん
2018/01/16(火) 18:08:17.81 >>955
なんでITest2を仮想継承してないの?
なんでITest2を仮想継承してないの?
959デフォルトの名無しさん (スプッッ Sdea-IjLh)
2018/01/16(火) 18:11:37.58ID:JbjA4DiDd この場合どっちを継承するとかの問題もないし
普通にこっちにも virtual つければいいだけだと思うが vc だと違うのか?
>>955
>class CHoge : public ITest2, public CTest1 {
>public: virtual void Func() {}
>};
こう
class CHoge : virtual public ITest2, virtual public CTest1 {
public: virtual void Func() {}
};
普通にこっちにも virtual つければいいだけだと思うが vc だと違うのか?
>>955
>class CHoge : public ITest2, public CTest1 {
>public: virtual void Func() {}
>};
こう
class CHoge : virtual public ITest2, virtual public CTest1 {
public: virtual void Func() {}
};
960デフォルトの名無しさん (ワッチョイ add5-UJUP)
2018/01/16(火) 18:30:21.88ID:zATeRHxg0 おまえら質問者に教えて貰うあべこべになりそうだなw
961デフォルトの名無しさん (ワッチョイ ea34-yppE)
2018/01/16(火) 18:55:59.62ID:Ngn2q6Fj0 iTest2のDraw()が零でCTest1のDraw()が定義されているからそりゃ衝突する罠
962デフォルトの名無しさん (ワッチョイ e531-BgxS)
2018/01/16(火) 20:35:10.19ID:GcKo/GK70963デフォルトの名無しさん (ワッチョイ 2a98-4pcN)
2018/01/17(水) 12:08:14.47ID:iC3iQa/y0 boost::spirit::qiで
boost::spirit::qi::rule<std::string::iterator, std::string()> hogehoge;
としてとき std::string() のようにかっこ付でテンプレート引数に与えていますが
このかっこ付で型名をあたえる方法はどのように活用できますか?(一般論として
boost::spirit::qi::rule<std::string::iterator, std::string()> hogehoge;
としてとき std::string() のようにかっこ付でテンプレート引数に与えていますが
このかっこ付で型名をあたえる方法はどのように活用できますか?(一般論として
964デフォルトの名無しさん (ワッチョイ 0aa8-XiqC)
2018/01/17(水) 13:05:18.47ID:K0Busrpg0 それは特別な方法ではなく普通の『引数をとらずstringを返す関数型』の指定でしかないから
一般論として普通はテンプレートで関数の型を明示的に指定したいときに活用する
一般論として普通はテンプレートで関数の型を明示的に指定したいときに活用する
965デフォルトの名無しさん (ワッチョイ 2a98-4pcN)
2018/01/17(水) 14:11:03.20ID:iC3iQa/y0 ありがとうございます。
引数のシグネチャに戻り値を加えたものってことでいいんですかね?
これで関数の入出力の型をテンプレートが知ることができるということですか
引数のシグネチャに戻り値を加えたものってことでいいんですかね?
これで関数の入出力の型をテンプレートが知ることができるということですか
966デフォルトの名無しさん (ワッチョイ b5b3-QpsD)
2018/01/17(水) 22:57:17.27ID:xvLKn6F+0 ビルドに対するプロファイラってありますか?
967デフォルトの名無しさん (ワッチョイ 9d23-bNKV)
2018/01/18(木) 11:15:13.47ID:4g2nAWWS0968デフォルトの名無しさん (ワッチョイ 25b3-GP+B)
2018/01/18(木) 20:20:38.59ID:YPPczFY+0 ありがとうございます
969デフォルトの名無しさん (ワッチョイ a37f-QRuf)
2018/01/19(金) 10:25:28.43ID:2zN3bRh70 質問お願いします。
装置制御のプログラムを組みたいと思っているのですが、最適な言語はC++でいいのか迷っています。
内容としては、イベントを開く際に、一軒家の室内灯のオンオフ制御や、スイッチの信号受信、信号を送信しての仕掛の動作などです。
現在理解している言語はVBAのみです。
どの言語を学習するにしろ、ほぼ一からの学習になると思うので、最適な言語は何なのか調べているところです。
最適なものはC++なのか、それとも他にあるのか教えて頂けたら幸いです。
装置制御のプログラムを組みたいと思っているのですが、最適な言語はC++でいいのか迷っています。
内容としては、イベントを開く際に、一軒家の室内灯のオンオフ制御や、スイッチの信号受信、信号を送信しての仕掛の動作などです。
現在理解している言語はVBAのみです。
どの言語を学習するにしろ、ほぼ一からの学習になると思うので、最適な言語は何なのか調べているところです。
最適なものはC++なのか、それとも他にあるのか教えて頂けたら幸いです。
970愛知人
2018/01/19(金) 10:28:45.88ID:96/ZCuec そんなんハードウェアによるだろ
971デフォルトの名無しさん (オイコラミネオ MM79-dWYP)
2018/01/19(金) 10:43:53.96ID:ZWDiJg2ZM 対象は全く問題ないがC言語を理解したあとでないといきなりC++を学うのは危険です。
972デフォルトの名無しさん (スップ Sd03-kqG9)
2018/01/19(金) 10:50:54.04ID:5gb0XR0Xd C++がベスト
973デフォルトの名無しさん (ワッチョイ f5bb-nLHG)
2018/01/19(金) 10:57:22.28ID:jSqbt2Li0 >>969
CPUは何を使う予定?
CPUは何を使う予定?
974デフォルトの名無しさん (ワッチョイ a37f-QRuf)
2018/01/19(金) 11:02:40.08ID:2zN3bRh70975愛知人
2018/01/19(金) 11:09:04.52ID:96/ZCuec どうやって照明をオンオフするの?
元からコンピュータによる照明制御の仕組みが備わってる建物か照明自体に無線通信機能のついてるやつじゃないと無理じゃね?
元からコンピュータによる照明制御の仕組みが備わってる建物か照明自体に無線通信機能のついてるやつじゃないと無理じゃね?
976愛知人
2018/01/19(金) 11:11:31.52ID:96/ZCuec それか物理的にスイッチを押す装置を取り付けるか...
977デフォルトの名無しさん (ワッチョイ a37f-QRuf)
2018/01/19(金) 11:15:52.48ID:2zN3bRh70978愛知人
2018/01/19(金) 11:21:06.90ID:96/ZCuec LEDを後付けとは?照明用のLED並みに明るいLEDを部屋に置くということ?
照明をリモコン化する商品はたくさんあるようだからそれらを使って既存の照明を無線化することもできるが。
照明をリモコン化する商品はたくさんあるようだからそれらを使って既存の照明を無線化することもできるが。
979デフォルトの名無しさん (ワッチョイ a37f-QRuf)
2018/01/19(金) 11:26:16.24ID:2zN3bRh70980デフォルトの名無しさん (ワッチョイ f5bb-nLHG)
2018/01/19(金) 11:28:53.86ID:jSqbt2Li0 点滅ってパルス幅変調?
981愛知人
2018/01/19(金) 11:32:59.39ID:96/ZCuec 無線のでもオンオフを繰り返せばいいはず。
後付けの照明って室内灯レベルには照らせなさそうだがそれでも問題ない?
後付けの照明って室内灯レベルには照らせなさそうだがそれでも問題ない?
982デフォルトの名無しさん (ワッチョイ a37f-QRuf)
2018/01/19(金) 11:50:52.24ID:2zN3bRh70983デフォルトの名無しさん (ワッチョイ 0b79-2tnM)
2018/01/19(金) 12:08:12.88ID:L4zuKtC40984愛知人
2018/01/19(金) 12:08:27.47ID:96/ZCuec いい照明装置が見つかったとして、こういうSSRとArduinoを使ってAC電源を制御するとか。Arduinoなら言語は必然的にC言語。
http://akizukidenshi.com/catalog/g/gI-08620/
http://akizukidenshi.com/catalog/g/gI-08620/
985デフォルトの名無しさん (ワッチョイ f5bb-nLHG)
2018/01/19(金) 12:09:17.61ID:jSqbt2Li0 なるほど、明るさをじわーっと変化させたりじゃないのね
で、C++の話に戻るけど
C++を使うならC++コンパイラがあるCPUを選ぶ必要があるぞ
たとえばg++を使うならARMはいいけどPIC16F84なんかは無理
で、C++の話に戻るけど
C++を使うならC++コンパイラがあるCPUを選ぶ必要があるぞ
たとえばg++を使うならARMはいいけどPIC16F84なんかは無理
986デフォルトの名無しさん (ワッチョイ a37f-QRuf)
2018/01/19(金) 13:49:09.01ID:2zN3bRh70987デフォルトの名無しさん (ドコグロ MM79-z/Ib)
2018/01/19(金) 15:12:20.32ID:yMU0ke2CM Wifi対応のLED電球をスマホで制御ならやったことある
この程度でいいなら制御側はなんでもいい気がする
この程度でいいなら制御側はなんでもいい気がする
988デフォルトの名無しさん (ワッチョイ 3d46-7dS8)
2018/01/20(土) 00:19:28.66ID:i+Y70H5F0 std::vectorの[]演算子って引数の型がstd::size_tで定義されてるけどint型とかshort型で渡すと暗黙の型変換がかかって遅くなる?
989愛知人
2018/01/20(土) 00:21:47.27ID:sgAjbMHf 型はコンパイル時に決定されるのでは?
990デフォルトの名無しさん (ワッチョイ 557f-GP+B)
2018/01/20(土) 00:29:04.03ID:gCiUg27G0 キャストはコストがかかるってメイヤーズが言ってた
991デフォルトの名無しさん (ワッチョイ 2334-wln7)
2018/01/20(土) 01:25:38.81ID:AVDgMNZq0 movzxで変換かけるだろうし多少遅くはなる
992デフォルトの名無しさん (ワッチョイ d5b3-uO2t)
2018/01/20(土) 02:12:08.07ID:m8g+JTvk0 大抵の石では拡大型変換は多くても1命令でできるので、遅くなるっちゃ遅くなるけどそこまで気にするほどでもない
更に言うと、コンパイラの最適化次第では型変換を省略して0命令になるかもしれない
よほど変態的な型変換を挟むとか、組み込み等で1命令でも削減したいとかでなければ、あまり深く考えても…
更に言うと、コンパイラの最適化次第では型変換を省略して0命令になるかもしれない
よほど変態的な型変換を挟むとか、組み込み等で1命令でも削減したいとかでなければ、あまり深く考えても…
993デフォルトの名無しさん (ワッチョイ f5bb-nLHG)
2018/01/20(土) 06:49:10.98ID:JEi/sl9H0 その前にさ
size_tでないならじゃあ何型であるべきだと思っているんだ?
displacement(base + index)というアドレス計算のindexに当たるところだが
size_tでないならじゃあ何型であるべきだと思っているんだ?
displacement(base + index)というアドレス計算のindexに当たるところだが
994デフォルトの名無しさん
2018/01/20(土) 06:51:43.72 >>993
誰もそこは問題にしてないだろ
誰もそこは問題にしてないだろ
995デフォルトの名無しさん (ワッチョイ f5bb-nLHG)
2018/01/20(土) 07:49:40.98ID:JEi/sl9H0996デフォルトの名無しさん (ワッチョイ 8576-3us9)
2018/01/20(土) 08:37:45.07ID:y71EKvJV0 遅くなる可能性はある
遅くなったとしても微妙
というのが回答
遅くなったとしても微妙
というのが回答
997デフォルトの名無しさん (ワッチョイ 8576-3us9)
2018/01/20(土) 08:45:09.85ID:y71EKvJV0 [ ] のコストが問題で高速化したいなら
data() で生ポで扱うとか
アセンブラを使うとか
ループアンロールとか
複数ループの結合とか
まあ色々とテクニックはある
マルチスレッド化、GPU利用、アルゴリズム改善...
など、もっと大きなレベルの最適化も
data() で生ポで扱うとか
アセンブラを使うとか
ループアンロールとか
複数ループの結合とか
まあ色々とテクニックはある
マルチスレッド化、GPU利用、アルゴリズム改善...
など、もっと大きなレベルの最適化も
998デフォルトの名無しさん (ワッチョイ 8576-3us9)
2018/01/20(土) 08:46:28.85ID:y71EKvJV0 [ ] のコストが問題になるのは非常に小さなループだろうから
型くらいはコンパイラが勝手に最適化するのが普通
型くらいはコンパイラが勝手に最適化するのが普通
999デフォルトの名無しさん (ワッチョイ 8576-3us9)
2018/01/20(土) 08:48:22.54ID:y71EKvJV0 実際に問題になっている事が確かめられて無いのなら
最適化しないで普通にコードを書いた方が良い
見やすさ、変更のしやすさ、移植性、バグの出にくさ、...
などの理由で
最適化しないで普通にコードを書いた方が良い
見やすさ、変更のしやすさ、移植性、バグの出にくさ、...
などの理由で
1000デフォルトの名無しさん (ワッチョイ 8576-3us9)
2018/01/20(土) 08:53:39.66ID:y71EKvJV0 >>993
アホ
アホ
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 56日 16時間 0分 49秒
新しいスレッドを立ててください。
life time: 56日 16時間 0分 49秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… ★4 [BFU★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★5 [Hitzeschleier★]
- 「これいいじゃん!!!」 セブン-イレブンの1620円で買える“1人用クリスマスケーキ”🎂に注目殺到「天才すぎる」 [パンナ・コッタ★]
- 高市早苗首相が天理教系企業に“巨額発注” 総額5000万円 本人は「政治団体の活動に必要な支出」と回答 ★2 [Hitzeschleier★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 【速報】テレビ朝日本社から20代〜30代の男性が飛び降り自殺して死亡 東京・六本木 [597533159]
- 【高市速報】中国、最後通牒 [308389511]
- お前らダウナー系だよな
- 現役JKのお茶会スレ( ¨̮ )︎︎𖠚ᐝ182
- 【朗報】カニ漁バイト募集!急げ! [834922174]
- 精液がゼリー状で黄ばんでるせいで女と付き合う勇気ない
