C++相談室 part153
at TECH
[前50を表示]
600:デフォルトの名無しさん
20/11/22 15:51:20.82 o/Js7Lov.net
>>590
RTTI有効にしたらパフォーマンス落ちるっていうのをみたことあるけど
ただデータ(プログラム領域?)が増えるだけなら落ちなくない?
601:デフォルトの名無しさん
20/11/22 17:19:17.03 LCd15qeF.net
仮想関数テーブルのアドレスがクラスのIDの役割を果たす
からRTTIするには仮想関数が1個以上あれば良く、
それさえクリアしたら追加の空間コストはない
602:デフォルトの名無しさん
20/11/22 17:29:03.52 2nm5SjZ0.net
多態するならデストラクタが仮想のはずだから事実上は追加コストないんだよね
603:デフォルトの名無しさん
20/11/22 20:02:41.94 L/uQBHM9.net
ダイナミックにやりたいヤツ用
604:デフォルトの名無しさん
20/11/22 20:07:55.27 BvpndlWI.net
>>593
ほとんど落ちないはずだが、RTTIとは別意に一般論として仮想関数を1つでも
定義することによって、非常に僅かながら落ちる。
オブジェクトを new した時、オブジェクトの隠れたメンバに、仮想テーブル
のアドレスを書き込む必要があるので、new一回当たり 1 クロックだけ遅くなる。
また、オブジェクトにアドレスを1個格納するのに必要な領域が増やす必要がある。
これは、32BITモードの場合、4バイト、64BITモードの場合、8バイト。
605:デフォルトの名無しさん
20/11/22 23:24:02.57 LCd15qeF.net
RTTIするからといって多態性設計とは限らないんじゃ…
古き良きenum定数によるswitchの代替という使い方も有り得る
606:デフォルトの名無しさん
20/11/23 06:50:21.21 SrPyOTC6.net
nested_exceptionで普通に使う
607:デフォルトの名無しさん
20/11/23 06:52:19.04 SrPyOTC6.net
単純にexceptionで捕獲した例外をsystem_errorとかで場合分けとかね
catchをオーバーロードするよりこっちのほうが融通が利く
608:デフォルトの名無しさん
20/11/23 21:12:23.11 gAkTmGSN.net
そんなコストを気にするほどランタイム速度要求の厳しいソフトなんかお前ら書かんだろ
609:デフォルトの名無しさん
20/11/23 22:39:23.22 ryjND0ia.net
多重ループの中のif文一個でも結構変わるしなあ
610:デフォルトの名無しさん
20/11/24 01:19:31.94 IV+MkG/a.net
>>602
確かに変わる。
大量のテキストファイルをパースする際の字句解析など、
今でもコードの1クロックの差で体感速度が現実に変わってくる。
611:(u_・y)
20/11/24 16:34:51.81 qTKKRlIf.net
(u_・y)最近C++で作られた出来の良いアプリって存在するの?
(u_・y)もう世の中のほとんどがブラウザーとそのブラウザー上で動作するスクリプトで完結してる気するんだけど
612:デフォルトの名無しさん
20/11/24 16:55:08.02 p7TzmKlx.net
そのブラウザがC++製だろうがwwwww
613:デフォルトの名無しさん
20/11/24 17:52:32.94 18TBNzSS.net
サーバを増やすんじゃなくて、時代はもうクラウドなんですよ!
614:デフォルトの名無しさん
20/11/24 18:12:54.60 zMf11be4.net
やめなよ
615:デフォルトの名無しさん
20/11/24 21:44:11.65 +m+UL9CA.net
>>603 どんなストレージ使ってんの?
617:デフォルトの名無しさん
20/11/24 23:18:43.39 EBaS3Lgi.net
何色のパンツはいてんの?w
618:デフォルトの名無しさん
20/11/25 14:30:01.10 yb7Sfyoy.net
やめなよ
619:デフォルトの名無しさん
20/11/25 18:03:06.30 GXxyf9BA.net
噂によると、メモリモデルに辟易していた、りーぬす先生が、NEW見た瞬間メモリモデルこれでよくねー?病にかかったと聞いた。
620:デフォルトの名無しさん
20/11/25 20:24:34.76 OwYFbtHk.net
あんなにC++はfuckでshitだって言ってたのに?
621:デフォルトの名無しさん
20/11/25 20:27:03.84 0vRedS2N.net
>>611
抜かせや証拠出せ
622:デフォルトの名無しさん
20/11/26 20:31:56.32 rfhyh3I2.net
今からC++勉強しようと思ってるんだけど江添本って評判いいの?
623:はちみつ餃子
20/11/26 21:31:52.07 aL88M1qg.net
>>614
「江添亮のC++入門」のことだよね。
評判は悪くはないと思うよ。
太っ腹なことに全文が github に置いてあるからタダで読めるし、
とりあえず序盤だけでも読んでみればいいんじゃないかな。
序盤でヘッダファイルの説明をすっとばして雑にやってるし、
継承の仕組みについて全く触れてなかったりするのは
入門向けにかなり思い切って省いてる感じはする。
一通り理解した後では他の本も読んだほうが良いと思う。
624:デフォルトの名無しさん
20/11/26 21:36:26.77 A1DZUd8N.net
>>615
どこのhubよ?
625:はちみつ餃子
20/11/27 11:50:52.05 TefhHHJS.net
>>616
ググれば上位に出てくるやん
URLリンク(ezoeryou.github.io)
626:デフォルトの名無しさん
20/11/27 12:25:02.43 4rNXQ0cM.net
ほう
627:デフォルトの名無しさん
20/11/28 02:48:58.01 G8gGytn9.net
へー
628:デフォルトの名無しさん
20/11/28 03:32:38.65 W53VNNYA.net
ふーん
629:デフォルトの名無しさん
20/11/28 08:49:49.77 /IOgDWl9.net
可変引数テンプレートのコンストラクタだとコピーコンストラクタやムーブコンストラクタより優先順位高い事ある?
630:デフォルトの名無しさん
20/11/28 09:11:22.92 KmyDCzB4.net
template <class... aho>
boke(aho&&...);
boke(boke&&);
これでどっちが優先てこと?
631:デフォルトの名無しさん
20/11/28 11:55:46.81 /HPnbUmI.net
非テンプレ版→テンプレ特殊化→テンプレの順に優先
632:621
20/11/28 13:44:25.19 /IOgDWl9.net
これを実行すると可変引数が優先されてAhoが出る
URLリンク(ideone.com)
633:デフォルトの名無しさん
20/11/28 14:33:28.98 /HPnbUmI.net
そのAhoはムーブじゃなくてbokeを作る時のデフォルトコンストラクトで出てる
634:はちみつ餃子
20/11/28 14:35:42.94 gUqAhKBc.net
>>624
Test<double> boke;
のときにデフォルトコンストラクタ (引数がないコンストラクタ) を呼出す。
引数なしで呼び出せるのはそれしかないからそれを呼ぶってだけで、
優先もクソもないのじゃ。
635:デフォルトの名無しさん
20/11/28 16:18:43.35 /IOgDWl9.net
ではこれで1が出るのは何故?
URLリンク(ideone.com)
636:はちみつ餃子
20/11/28 16:41:08.52 gUqAhKBc.net
>>627
テンプレートかどうかは重要ではなくて a が非 const だから非 const のほうが選択される。
637:デフォルトの名無しさん
20/11/28 17:23:45.26 /IOgDWl9.net
>>628
可変引数の方をconst&にしたら解決した!ありがとうございます。
638:デフォルトの名無しさん
20/11/28 21:09:45.69 2t4HVeMH.net
またアホみたいな流れかおもたら
意外とちゃんとした質問応答の流れでビビった
639:デフォルトの名無しさん
20/12/01 15:54:55.38 V2eyqU/t.net
gdbのプロンプトでシェルの文法使う方法ある?
具体的にはfor文で配列を走査しながら内容をprintしたりしたい
640:デフォルトの名無しさん
20/12/01 21:49:00.34 1uVg5H0L.net
>>631
配列自体をprintするんじゃだめ?
641:デフォルトの名無しさん
20/12/02 01:32:17.93 cCR9MlfF.net
>>632
添字番号を併記したりかんたんな演算を行ったりしたかった
642:デフォルトの名無しさん
20/12/02 05:03:16.50 OLoYTJfY.net
OSはOS X10.15.7でApple clang12.0.0のC++17指定です
vector<tuple<int, int, int>> T;
vector<pair<int, int>> P;
のような配列(stdは省略)を作成したのですが以下のような挙動になりました
P.emplace_back(i, j); //通る
P.push_back(i, j); //エラー
P.emplace_back({i, j); //エラー
P.push_back({i, j}); //通る
P.emplace_back(make_pair(i, j)); //通る
P.push_back(make_pair(i, j)); //通る
省略はしてますがtupleも大体同じです(i, jはint)
push_backが一時コンストラクトをムーブしてることやmake_pairやmake_tupleに
型の推論があることは調べたのですが上記のようになる理由が分かりませんでした
後clangとg++でどちらに合わせた方が標準的というのはあるのでしょうか
図々しくも質問が2つになってしまいましたがよろしくお願いします
643:デフォルトの名無しさん
20/12/02 11:08:47.58 3dB9NeQy.net
>>634
「上記のよう」と言われても、どの挙動に疑問を感じてるのかわからない。
「clangとg++」の質問も、ここで誰かに「ある」とか「ない」とか言われて何の意味があると思ってるのかわからない。
644:デフォルトの名無しさん
20/12/02 11:20:44.01 CcFfxv7q.net
>>634
まず君がemplace_backとpush_backの違いをどう理解しているのか、自分の言葉で説明してみよう
話はそれからだ
645:はちみつ餃子
20/12/02 11:59:18.46 wCsCmSK2.net
>>634
そういう言語仕様だからそうなるとしか言えない。
たぶん必要な情報は
・ emplace_back ( URLリンク(cpprefjp.github.io) )
・ push_back ( URLリンク(cpprefjp.github.io) )
・ 一様初期化 ( URLリンク(cpprefjp.github.io) )
かな。
言語仕様に沿っていれば普通は gcc でも clang でも問題は起きない。
たまには処理系のバグってことも無くはないが、
どちらかで問題が起きるなら書いたプログラムのどこかが間違ってる疑いのほうが濃い。
個別の事情によってはコンパイラをどちらかに固定することもあるかもしれないが、
理想としてはどちらでも良いようになっているほうが好ましくはある。
646:はちみつ餃子
20/12/02 15:48:13.91 wCsCmSK2.net
>>631
シェルというか Python か Guile は使える。
URLリンク(sourceware.org)
647:デフォルトの名無しさん
20/12/02 21:51:44.10 3RyObk2q.net
プログラミング初心者でC++で競馬予想ソフトを作ってみたいんだけどC++はそういうのに向かないんですかね?
スクレイピングってやつはC++でできないのか?
648:デフォルトの名無しさん
20/12/02 22:26:25.03 FHuLcrq8.net
できるけどC++はWebやテキスト処理が得意とはいい難いから別の言語の方がいいかも
649:デフォルトの名無しさん
20/12/02 22:45:20.94 9+QNoiNo.net
テキストはc♯のが向いてる
650:デフォルトの名無しさん
20/12/02 22:49:07.36 1SGYvOuK.net
>>638
対話モードのPythonインタプリタ上でgdbを動かせるということですか?
651:はちみつ餃子
20/12/02 22:59:56.90 wCsCmSK2.net
>>642
gdb のコマンドとして Python スクリプトが使えるという話。
652:デフォルトの名無しさん
20/12/02 23:31:37.18 3RyObk2q.net
ありがとうございました!
653:デフォルトの名無しさん
20/12/02 23:51:03.60 1SGYvOuK.net
>>643
スクリプトかぁ
対話的にやりたいですけどわかりました
ありがとうございます
654:はちみつ餃子
20/12/02 23:55:00.77 wCsCmSK2.net
>>645
対話的にもできるよ。
655:デフォルトの名無しさん
20/12/02 23:56:36.23 9+QNoiNo.net
pythonは仮想マシーンが必要
変数がすべてvariantなので初心者にはうってつけよ
656:デフォルトの名無しさん
20/12/03 00:11:32.72 MFKNATAf.net
>>646
ありがとうございます
なんか便利さの割にドキュメント少ない気がしますけど勉強します
657:デフォルトの名無しさん
20/12/03 06:42:09.17 w/MpdpQO.net
勉強するぞ!勉強するぞ!勉強するぞ!
↑
C++には似合わないような気が。
658:デフォルトの名無しさん
20/12/03 11:49:30.18 4DIFtwYV.net
>>649
どういう意味だ?
1. C++erならそれくらい勉強せずに使いこなせ
2. あるがままを受け入れろ。状況を変えようとするな
3. Pythonを便利と言うな
どれ?
659:デフォルトの名無しさん
20/12/03 22:01:01.64 anyYWQoy.net
「ブラック企業社員」のお助けアプリが誕生 開発したのは22歳金髪大学生、開発のきっかけとは?
URLリンク(news.yahoo.co.jp)
レシート買い取りアプリONEの17歳起業家、サービス一時停止から「怒涛の3カ月」で気づいたこと
URLリンク(www.businessinsider.jp)
ビジネス版マッチングアプリ「yenta(イェンタ)」全国展開 開始!
URLリンク(prtimes.jp)
ギフティング「TANP」運営がGCPほかから5億円調達
1日1200件の「リアルギフト」送付も可能に、U25起業家の新たな挑戦
URLリンク(thebridge.jp)
人はこうすれば“ハマる”、源流はゲーマー視点の「幸せ」
URLリンク(project.nikkeibp.co.jp)
アプリ開発での起業は難しくない!成功するために覚えておくべきこと
URLリンク(www.biz.ne.jp)
【稼ぎ方が知りたい!】アプリの開発の収入って実際どれくらい?
URLリンク(itpropartners.com)
ネット関連事業で起業した成功例8選!ネットで成功するには○○が重要!?
URLリンク(www.official.or.jp)
660:デフォルトの名無しさん
20/12/04 14:40:55.75 rp0tCaVB.net
>>637
返信遅れて申し訳ありません、読んで色々試したら何となくですが理由見えてきました
一番為になった回答です…本当にありがとうございました
661:はちみつ餃子
20/12/05 00:49:53.38 rsyXPWsW.net
>>652
結局のところ何がわからなかったのか言葉にしてくれんともやもやするんやが……。
662:デフォルトの名無しさん
20/12/05 08:56:44.63 F3hjf/ak.net
最近ずぶの素人にいきなりSTL教えたりする変な風潮、変なサイトが増えたせいで
こういうとこで初心者が苦労するんだよなぁ
ライブラリの使い方なんか、初心者がいきなりぶつかる"壁"であってはならんと思うんだが・・
先に言語自体の基本を学んでれば、>>634はここに聞きに来なくて済んでるはず
663:デフォルトの名無しさん
20/12/05 10:34:50.44 T+MIshnP.net
C++11以降はSTL前提で学んだほうが理解しやすい
664:デフォルトの名無しさん
20/12/05 11:14:52.77 pZ+vMW1v.net
STLとそうじゃないものの境界ってなに?
665:デフォルトの名無しさん
20/12/05 11:17:08.79 i8LYHGeY.net
そんなの意識する必要ない。"STL"なんて定義曖昧な言葉を使わなければよい。
666:デフォルトの名無しさん
20/12/05 11:41:24.32 f0cq7ZxN.net
C++を使わなくてもSTLを学ぶほうが良い。
それどころか、およそ学問というものに携わる者はSTLを学ぶべきだ。
なぜなら20世紀における抽象化最大の功績だからだ。
667:デフォルトの名無しさん
20/12/05 11:42:36.00 f0cq7ZxN.net
STLは宇宙人が教えた説があるほどクレバー、クレバー、そしてクレバーだ。
668:デフォルトの名無しさん
20/12/05 11:47:59.12 f0cq7ZxN.net
目からうろこですよ。
まじ鱗。
669:デフォルトの名無しさん
20/12/05 11:53:54.60 f0cq7ZxN.net
ムーブセマンティクスも感動したなあ。
あいつら本物の天才だな。
まじ鱗ですよ。
670:デフォルトの名無しさん
20/12/05 12:09:38.13 WVFX1CVk.net
unique_ptrとかthreadとかnumeric_limitsとかも"standard template library"だけどSTLとは呼ばれない
よく理解してないC++アンチが何となく叩きの槍玉に上げる時に使われる用語っていう印象
671:デフォルトの名無しさん
20/12/05 12:15:33.65 f0cq7ZxN.net
なんじゃそりゃ。
672:デフォルトの名無しさん
20/12/05 12:22:29.71 pZ+vMW1v.net
コントかよ
673:デフォルトの名無しさん
20/12/05 18:59:09.68 ynooL14Y.net
>>634
pairが初期化子リストによるコンストラクタを持たないから
c++ - emplace_back not working with std::vector<std::map<int, int>> - Stack Overflow
URLリンク(stackoverflow.com)
似たような質問があって、mapだと初期化子リストのコンストラクタがあるから、initializer_listを使って初期化出来てる
この箇所あたりがそれ
URLリンク(cpprefjp.github.io)
map(initializer_list<value_type> init,
const Allocator& alloc); // (11) C++14 から
URLリンク(cpprefjp.github.io)
pairのコンストラクタにはinitializer_listは出てこない
674:デフォルトの名無しさん
20/12/05 19:10:24.03 F+hw3W9u.net
>>662
御意
675:デフォルトの名無しさん
20/12/06 03:41:22.30 hI81p89D.net
>>665
違うと思うぞ
676:デフォルトの名無しさん
20/12/06 08:19:51.08 tzyWxjgm.net
じゃあ、多数決で決めましょうや。
677:デフォルトの名無しさん
20/12/06 11:09:55.43 sjTPCZjA.net
>>667
違うんだったら何が正解だ?
678:デフォルトの名無しさん
20/12/06 13:55:38.68 hI81p89D.net
>>669
単純にemplace_backはコンストラクタに渡す引数を、push_backは生成済みの実体を受け取るという違いを
>>634が分かってないだけだろ
ついでに言えば、pairにinitializer_listを受け取るコンストラクタがあっても
emplaceは可変長テンプレート引数だから、推定に失敗してどっちにしてもエラーになる
多分。
679:デフォルトの名無しさん
20/12/08 20:44:18.72 efO/t6By.net
visual studio 2019でstd::filesystemを使いたいのですが、namespace"std"にfilesystemがありませんと言われます
ググた通りにC++言語標準をC++17にしても変わりません
どうすればいいですか?
680:デフォルトの名無しさん
20/12/08 21:02:15.62 O6ovwbXJ.net
上の方に
#include<filesystem>
と書く
681:デフォルトの名無しさん
20/12/09 01:24:22.81 WuZTb4kZ.net
なんだそりゃあ?!
682:デフォルトの名無しさん
20/12/09 06:50:42.80 OrjjObtT.net
>>671
// cl 671.cpp /EHsc /std:c++17
#include <filesystem>
#include <iostream>
using namespace std;
using namespace std::filesystem;
int main()
{
directory_iterator d(current_path());
for(auto&& e : d) cout << e.path() << endl;
}
全く問題なく動くぞ
cl.exeのバージョンは19.28.29334 for x64
683:デフォルトの名無しさん
20/12/09 08:05:49.03 TKgHvdMy.net
>>671
脱線の話だがappleのclangでfilesystem使おうと思ったら、
OSを10.15以降にしないと動かない上にビルドしたバイナリもそれ以降。
macだとintel版はhomebrewでgcc落としてビルドすれば旧いのでも動く。
日本語などのファイル名の扱いは、自分の試した範囲で、mac,linux,winで微妙に違ってた。
「wstring」、「stringでutf-8」のどっちかしか出来ん処理系があって、
複数機種用のコードは結局ifdefで分けるしかなかった。
そのうちライブラリが整備されるとは思うけど。
しかし「ハ゜」→「パ」のmacの仕様には参った。
684:デフォルトの名無しさん
20/12/09 09:04:33.91 bCzZQrOf.net
脱線路運動。
685:デフォルトの名無しさん
20/12/13 02:22:39.32 1g8P/X2h.net
c++でRSSリーダー作れましゅか?
686:デフォルトの名無しさん
20/12/13 04:12:37.43 64ZS/1bZ.net
はい
687:デフォルトの名無しさん
20/12/13 11:52:25.92 83or1IML.net
RSSなんてもう誰も使ってないだろ
フィードしてるサイトなんてありゅ?
688:はちみつ餃子
20/12/13 13:34:03.99 hv54fxHN.net
ブログホスティングサイトの系統だと RSS を提供してないところとかあんまりないと思うが。
689:デフォルトの名無しさん
20/12/14 16:01:14.17 WlKHswnl.net
ていうかあちこちの言語スレで同じ事聞くのやめなさい
690:デフォルトの名無しさん
20/12/14 19:00:34.80 mjvV58cu.net
std::vectorのメンバ関数にfind()とかrfind()がないのはなんでですかね?
string::find()みたいにあってもよさそうな気がするんですが・・・
691:デフォルトの名無しさん
20/12/14 19:10:08.09 iTp2tyae.net
>>682
よう知らんけど、vector固有でなくても使えるアルゴリズムだからでは?
692:デフォルトの名無しさん
20/12/15 09:25:27.40 rqj48Chi.net
>>682
#include <algorithm>のfind()を使えってことだ
何でもかんでもメンバに突っ込むのは悪い設計だからだ
この意味でstring::findは蛇足ともいえる
現実にはstring::findはiteratorではなくsize_typeを返すので
複数の文字列の同じ位置、のようなことがやりやすい
693:デフォルトの名無しさん
20/12/15 13:10:21.94 qBOs25Ot.net
UTF8とかだと単純に同じバイト値探せばいいわけじゃないからstringは特殊化してるんだよ
694:デフォルトの名無しさん
20/12/15 13:19:55.29 PHBBuZ6n.net
>何でもかんでもメンバに突っ込むのは悪い設計だからだ
こういう考え方いかにもCから入りましたって感じだな
695:デフォルトの名無しさん
20/12/15 13:21:51.75 gbeRTgGG.net
UTF-16(wchar_t)と違ってUTF-8(char)なら同じバイト列を探せばいいんじゃないの?
ASCIIと同じコーディングで済むのがUTF-8が普及した要因だと思ってた
696:デフォルトの名無しさん
20/12/15 13:36:54.46 8mWx/Grk.net
>>687
短い系列は特に、部分列が一致したからといっても、
デコードした時にその文字かどうかは保証出来ないんじゃ?
697:デフォルトの名無しさん
20/12/15 14:01:10.21 gbeRTgGG.net
std::stringってバイト単位で扱うものでしょ
本当に文字単位で扱いたいならstd::wstring
698:デフォルトの名無しさん
20/12/15 14:23:23.61 rqj48Chi.net
>>686
k
699:翌唐汲オていいか? それともやめとくか?
700:デフォルトの名無しさん
20/12/15 16:06:36.42 cCubMtK6.net
>>689
wstringだろうがu16stringだろうがu32stringだろうが状況変わらんぞ
701:デフォルトの名無しさん
20/12/15 16:37:15.21 pcemzeew.net
>>690
質問主ですが、是非ともkwskしてくだしあ
702:デフォルトの名無しさん
20/12/15 16:39:59.71 4y27nUGT.net
utf16はサロゲートペアちょんぎらないようにしないとな
703:デフォルトの名無しさん
20/12/15 20:33:42.18 DseQeO8W.net
合字とか異体字セレクタとかもな
文字を扱うというのは大変なんだ
704:デフォルトの名無しさん
20/12/15 21:47:00.55 F7+1e89x.net
>>688
1バイト目とそれ以降は重ならないからそういうことは起こらないはず
705:デフォルトの名無しさん
20/12/15 22:25:44.23 jc1ZwvrK.net
そもそもstring::findがあるのは文字列から文字列を探す需要が高いからじゃないですかね
vector含む各コンテナから探すのはほとんどの場合要素単位だから汎用的なstd::findを使えということと解釈
706:デフォルトの名無しさん
20/12/16 06:17:15.68 vxgFSXGy.net
>>696
だよね
std::stringのfindは要素を探すんじゃなくて、
要素(char)の連なり=部分文字列を探すもので
vectorとかのコンテナのそれとは異質だし蛇足とは思えない
707:デフォルトの名無しさん
20/12/16 08:58:52.32 O+yPS5En.net
>>692
了解
>>686
kwsk
708:デフォルトの名無しさん
20/12/16 09:05:13.62 9tcp04F0.net
まぁ汎用的というか、stlのアルゴリズムはほとんどが全コンテナに対して共通のコードに出来るからそうしてる(グローバルな関数にしてる)んじゃないかね
実際問題、共通のインターフェースを継承によって表現するのでない限り、同じコードをあちこちメンバ関数にするのは不自然
逆に共通のインターフェースにすべきクラスの機能を無理に普通の関数にするのも馬鹿げてる
709:はちみつ餃子
20/12/16 10:59:12.23 zkq7HUY5.net
アドホック多相とパラメトリック多相の違い。
710:デフォルトの名無しさん
20/12/16 11:28:07.30 Hv+rjawS.net
データ構造とアルゴリズムを合わせたものがクラスでありオブジェクト指向言語の特徴の1つと教わった
いまは汎用アルゴリズムが再び外部に分離されるようになってきてるのかな
テンプレート・ジェネリクス・インターフェースのおかげかな?
型Tに対する操作を外部化しておいたほうが汎用的で型Tを実装するすべてのクラスが操作を個別に持つのは無駄ってことか
711:デフォルトの名無しさん
20/12/16 11:50:27.11 uK3tjXUx.net
beginとendをペアで指定しないといけないポインタ的iteratorのせいで外部化せざるを得なかったという方が正しいんじゃないですかね
712:デフォルトの名無しさん
20/12/16 11:58:03.72 cXvwu3qd.net
↓のサイトでも外人が同じ議論してるね
誰か要約してください
URLリンク(stackoverrun.com)
Why does std::string have a find member function while std::vector and friends don't have it?
Is there anything wrong with using std::find on the string?
713:はちみつ餃子
20/12/16 13:09:55.17 zkq7HUY5.net
>>701
オブジェクト指向にも種類がある。
ただひとつのオブジェクト指向がオブジェクト指向たる基準があるわけではなくて、
わりとふんわりした概念だよ……。
C++ の場合はカプセル化に軸があると思う。
隠されていないデータを処理する分にはメンバ関数にする必然性がない。
714:デフォルトの名無しさん
20/12/16 13:27:14.81 j60AFdVm.net
C++ってカプセル化できるんでしたっけ?
715:デフォルトの名無しさん
20/12/16 13:34:22.28 KCK/bj61.net
抜け道があるかって意味なら、java等もカプセル化できないってことになるけど
716:デフォルトの名無しさん
20/12/16 13:45:31.91 O+yPS5En.net
>>701
そういうことじゃねえよ
データ構造とアルゴリズムごちゃ混ぜにしたのをクラスと言い張る意味はない
1つの目的のためのお膳立てを揃えたものがオブジェクトでオブジェクトの種類がクラスだ
C++標準のライブラリではデータ構造はコンテナ、アルゴリズムは関数テンプレートとして分離されている
コンテナは配列やリストといったデータ構造を提供するまでにとどめ
それらを使って何かする応用までメンバにはせず関数テンプレートにしてある
717:デフォルトの名無しさん
20/12/16 13:50:56.36 j60AFdVm.net
>>706
Javaのリフレクションで何でも呼べる抜け道みたいな話ではなく
C++ってヘッダーファイルにprivateメンバー書かないといけないじゃん
そのせいで内部実装が変わったらライブラリ利用者にヘッダーファイルを差し替えてもらわないといけなかったりする
これってカプセル化できてないってことじゃない?
pimplとかテクニックがあるけどさ
718:デフォルトの名無しさん
20/12/16 13:54:21.41 vzlQaAwm.net
>>708
古い知識ですまんが、素直に抽象基底クラス被せるでだめなん?
719:デフォルトの名無しさん
20/12/16 13:55:52.62 KCK/bj61.net
なる。
そういうことならpmplかインターフェースクラスを定義するかしか思い浮かばないな
720:デフォルトの名無しさん
20/12/16 14:40:21.32 O+yPS5En.net
> 内部実装が変わったらライブラリ利用者にヘッダーファイルを差し替えてもらわないと
これ、そんなに深刻な問題か?
ライブラリの更新なんてリポジトリ決めてバージョン管理して
あとは勝手に落とせで運用できてるやん
721:はちみつ餃子
20/12/16 15:35:04.62 zkq7HUY5.net
現実的な部分では運用でなんとかしてる部分はあるのも確かだが、
現実に対する妥協なのでパラダイム的な話とは区別が必要じゃない?
まあ不可分なところもあるんで微妙な話ではあるけども。
722:デフォルトの名無しさん
20/12/16 16:36:11.97 uK3tjXUx.net
>>708
それってモジュール使えば解決できる問題じゃないんでしたっけ
723:デフォルトの名無しさん
20/12/16 18:14:53.45 O+yPS5En.net
>>712
運用できていても、いささかでも無理があれば
まだ余裕があるうちでも将来を見据えて
議論する価値が出てくるね
問題は無理を全く感じていないことを
空想論的に問題視することだ
個人的に問題視するのは勝手だが
他人が付き合ってくれないときにしつこくすることだ
724:デフォルトの名無しさん
20/12/16 18:54:24.56 G781YURu.net
意義深い議論が展開されてるな
725:デフォルトの名無しさん
20/12/16 22:51:18.04 IUrbfkPB.net
C++はゼロコストで極力あらゆる制御をプログラマーに与えることを
使命ていうか至上命題にして至高のレーゾンデートルとみなしているように見えるので
プログラミングパラダイムを論じるにはいまいちに思はるる、
やっぱヘッダファイルとか批判者にとってかっこうの餌食でありその光景がまさに展開された、
726:デフォルトの名無しさん
20/12/16 22:58:46.39 IUrbfkPB.net
きちんとオブジェクト指向するんなら継承は全部virtualであるべきや
といってもC++だけにあてはまる批判ではないが
Base::Foo()とDerived::Foo()が異なる振る舞いで定義されているときに、
func(Base&)にDerivedを渡したらfunc()の中ではBase::Foo()が呼ばれるとか
危険極まりない
この基準で言ったらたいていの似非オブジェクト指向言語はNG
727:デフォルトの名無しさん
20/12/16 23:05:40.32 L6k9APCP.net
不毛な宗教戦争よ
728:デフォルトの名無しさん
20/12/16 23:25:11.55 2c+prgNQ.net
クラスベースオブジェクト指向はすべて似非オブジェクト指向
アランケイ「C++のオブジェクト指向?知らない子ですね…」
729:デフォルトの名無しさん
20/12/17 01:05:17.90 X4tT/GwL.net
>>716
>C++はゼロコストで極力あらゆる制御をプログラマーに与えることを
>使命ていうか至上命題にして至高のレーゾンデートルとみなしているように見えるので
半分は正しいがそれならcでええやんてなる。
c++のc++たる所以(もしくは厨受けするところ)ってのは、ゼロコストなのにさらにどんなに高級な機能も入れられるんやで〜ってところだろ。
730:デフォルトの名無しさん
20/12/17 01:10:53.36 YFuWJYb1.net
>>717
え、その場合仮想関数ならDerived::Fooやろ?
非仮想とか値渡しならそうだけど
731:デフォルトの名無しさん
20/12/17 07:05:17.82 iG8ucCJK.net
非仮想だとそうなっちゃうっていう批判なんだろ
ハイディングなんかする方が悪いと思うけど
732:デフォルトの名無しさん
20/12/17 07:08:07.45 4VSV+Zch.net
>>717
仮想継承の話かと思ったら
そうじゃないようだな
733:デフォルトの名無しさん
20/12/17 08:15:27.96 61mx8GyZ.net
>>720
「使った機能にあったコスト」だよ。
ゼロコストはあくまで機能を使わなかった場合の話。
cの機能しか使わなかったらcのコストしかかからないのが基本方針だろ。
734:デフォルトの名無しさん
20/12/17 11:41:30.12 YFuWJYb1.net
>>722
あぁそういうことか・・
ちょっと自分の常識からかけ離れてるから理解できんかった
735:デフォルトの名無しさん
20/12/17 14:49:46.67 4VSV+Zch.net
#include <charconv>
using namespace std;
int main()
{
char str[] = "123";
double dbl;
from_chars(str, str + 3, dbl);
}
Visual Studioでは通るんだけど、GCCではダメ
どうも戻りのfrom_chars_resultがテンプレートになってて推論に失敗してるようなんだけど
規格ドラフト見てもfrom_chars_resultがテンプレートだなんてどこにも書いてない
これGCCがおかしいんだよな?
バグレポ上がってたりする?
736:デフォルトの名無しさん
20/12/17 14:50:46.30 4VSV+Zch.net
バージョン書き忘れた
Visual Studio: 19.28.29334
GCC: 10.2.0
737:デフォルトの名無しさん
20/12/17 15:56:08.03 UR7Dc4KD.net
>>726
整数型だけしかサポートしてないよ
738:デフォルトの名無しさん
20/12/17 17:33:27.07 4VSV+Zch.net
>>728
23.20.1 Header <charconv> synopsisにはfloat, double, long doubleが挙がってるんだけど・・・
ああ、GCCがってことねthx
739:デフォルトの名無しさん
20/12/17 22:56:50.01 mqVedE2Y.net
gccの傾向として、熱烈な信者がいて、出来ないことを出来ると宣伝したり、劣っているものを優れていると宣伝したりする場合がある。
ところが、そのような場合、GNUのマニュアルは「出来ない」「劣る」と明言している場合が多い。
したがって、gccについてはみだりに検索せず、GNUのサイトを見ることをお勧めします。
740:デフォルトの名無しさん
20/12/18 01:08:57.52 CTNkAd3G.net
>>726 「ダメ」がコンパイルエラーの意味ならエラーメッセージも挙げてよ。
741:デフォルトの名無しさん
20/12/18 01:16:51.95 UPU6Cu+L.net
ダメコンは、ダメージコントロールの略ですよ。
742:デフォルトの名無しさん
20/12/18 05:02:08.68 t+i2XnfT.net
継承使うと密結合になり変更に弱くなるし(実行時のオーバーヘッドにもなりそう)
規約で縛るというSTLの実装には好感が持てる
743:デフォルトの名無しさん
20/12/18 06:51:33.39 TZi3wQJw.net
>>731
W:\>g++ g1.cpp
g1.cpp: In function 'int main()':
g1.cpp:8:33: error: no matching function for call to 'from_chars(char [4], char*, double&)'
8 | from_chars(str, str + 3, dbl);
| ^
In file included from g1.cpp:1:
C:/msys64/mingw32/include/c++/10.2.0/charconv:595:5: note: candidate: 'template<class _Tp> std::__detail::__integer_from_chars_result_type<_Tp> std::from_chars(const char*, const char*, _Tp&, int)'
595 | from_chars(const char* __first, const char* __last, _Tp& __value,
| ^~~~~~~~~~
C:/msys64/mingw32/include/c++/10.2.0/charconv:595:5: note: template argument deduction/substitution failed:
In file included from C:/msys64/mingw32/include/c++/10.2.0/charconv:40,
from g1.cpp:1:
C:/msys64/mingw32/include/c++/10.2.0/type_traits: In substitution of 'template<bool _Cond, class _Tp> using enable_if_t = typename std::enable_if::type [with bool _Cond = false; _Tp = std::from_chars_result]':
まだまだ延々続くけど、こんくらいでいい?
744:デフォルトの名無しさん
20/12/18 09:49:45.23 /2PllW9k.net
>>727
vsでも2017update7は同様のエラーみたいだなぁ
745:デフォルトの名無しさん
20/12/18 11:01:15.84 nIUIWdb5.net
>>733
何言ってんだ継承使いまくりだぞ
746:デフォルトの名無しさん
20/12/18 11:36:27.07 YAPYqYIf.net
>>734
ココに上げろよ
URLリンク(pastebin.com)
747:デフォルトの名無しさん
20/12/18 12:09:40.31 opBsRLFO.net
オプションは無しなんだ
748:デフォルトの名無しさん
20/12/18 13:23:30.53 2eIYLdZu.net
n要素のvectorをm要素に変えたいときって中身はどうでも良いって思ってれば
vec = vector<int>(m);
も
vec.assign(m);
も
vec.resize(m);
もコスト変わらない?
749:デフォルトの名無しさん
20/12/18 13:30:32.59 4UaQE5Dn.net
バグバグ言語ランキングで見事PHPに勝利!
URLリンク(www.techrepublic.com)
750:デフォルトの名無しさん
20/12/18 13:40:56.80 TZi3wQJw.net
>>737
何がしたいの?
元ソース貼ってるからそっちでコピペして
手元のGCCでコンパイルしてみれば再現するはずだよ
751:デフォルトの名無しさん
20/12/18 13:47:38.37 YAPYqYIf.net
>>741
邪魔くさいからココに貼るなってんだよ
752:デフォルトの名無しさん
20/12/18 14:07:04.35 TZi3wQJw.net
それは731に言ってくれ
俺は知らん
753:デフォルトの名無しさん
20/12/18 14:33:16.19 kYvjoJp5.net
>>729
gccではMLで夏くらいにfloat版の実装のコミットの話が出てたから次のリリースでは多分実装されてるんじゃないかな。
754:デフォルトの名無しさん
20/12/18 15:35:36.73 A9pQAhpY.net
>>729
23.20.1がHeader <charconv>のドラフトってどれだ?
755:デフォルトの名無しさん
20/12/18 15:37:59.88 TZi3wQJw.net
>>745
N4713
756:デフォルトの名無しさん
20/12/18 15:50:56.91 A9pQAhpY.net
URLリンク(cpprefjp.github.io)
URLリンク(cpprefjp.github.io)
webページ見れない理由あった?
>GCC: 8.0(整数のみ)
>Visual C++: 2017 update 7(整数のみ), update 9(full support)
俺ならこの二つ眺めて「GCCは未実装なんだなぁ」と思考停止して終わる
757:デフォルトの名無しさん
20/12/18 17:24:37.67 TZi3wQJw.net
>>747
そうか、思考停止するのか
よかったね
何だか色々と前提置いてるけど
俺は知らんよ、おまえさんの前提なんぞ
イヤミ口調のくせに脇が甘いな
758:デフォルトの名無しさん
20/12/18 17:28:32.84 Mxkr6hqK.net
priority_queue<int>に比較関数を指定したいとき、
priority_queue<int, vector<int>, greater<int>>
のようにすると思いますが、内部コンテナ vector<int> は別にデフォルトのままで良いし書くのが面倒なので省略したいです
可能ですか?
759:デフォルトの名無しさん
20/12/18 18:26:15.74 Xk0olBJ3.net
template <typename T>
using my_priority_queue = priority_queue<T, vector<T>, greater<T>>;
760:デフォルトの名無しさん
20/12/18 18:41:07.57 UPU6Cu+L.net
gccの場合、未実装でもスタブだけ存在する場合があるんですよね。
つまり、コンパイル時やリンク時にはエラーにならない。
悪いことに実行時にもエラーにはならず、静かにスルーされる場合さえあるんです。
ここまでの流れでもお気づきでしょうが、gccの熱烈なファンは、gccが後れを取ることが許せないんですよ。
ですから、gccの熱烈なファンサイトより、GNUのマニュアルを見ることをお勧めします。
マニュアルを見れば、たいていは、きちんと書いてあります。
761:デフォルトの名無しさん
20/12/18 19:45:59.90 PzyTX7K9.net
始皇帝氏
762:デフォルトの名無しさん
20/12/18 19:59:32.56 A9pQAhpY.net
>>748
ここ以外に各コンパイラでの実装具合が上手い事まとまってるサイトとかあんの?
763:デフォルトの名無しさん
20/12/18 20:30:00.87 A9pQAhpY.net
コンパイラのサポート状況 (C++17) - cppreference.com
URLリンク(ja.cppreference.com)
こっちでの表現は「初等文字列変換」になってんのか
分かるワケねーな
764:デフォルトの名無しさん
20/12/18 20:48:34.81 A9pQAhpY.net
>>746
N4713のpdfとかどこをどう漁れば出てくんだ?
全然見つからないんだけど
765:デフォルトの名無しさん
20/12/18 20:52:41.57 2rT2nv7x.net
>>755
N4713 c++で検索したらトップに出てきたぞ。
普段どんな検索しているんだよ。
766:デフォルトの名無しさん
20/12/18 20:53:49.00 UPU6Cu+L.net
URLリンク(github.com)
ここで検索すればドラフトならみられますよ。
向こうも見てるだろうけど。
767:
20/12/18 21:01:49.42 ivKQNPRV.net
>>751
関係ないけれども、gcc って今は C++ で記述されているんですよね
長い間私はそれをとても残念に思っています
オプティマイズは苦手であってもいいから C で記述されている C++ 処理系って存在するのでしょうか?
768:デフォルトの名無しさん
20/12/18 21:12:10.66 A9pQAhpY.net
>>756
>>757
URLリンク(cpprefjp.github.io)
URLリンク(ja.cppreference.com)
ここで紹介されている最終ワーキングドラフトでもない、
URLリンク(github.com)
こっちはたくさんあって何を選べばいいか分からない、
どうやってN4713のドラフトに行きついたんだ?
769:デフォルトの名無しさん
20/12/18 21:20:36.71 UPU6Cu+L.net
おーけーぐーぐるえぬよんなないちさん、と言いました。
770:デフォルトの名無しさん
20/12/18 21:37:45.97 A9pQAhpY.net
行き着いた、ってのは>>746の彼がだよ
どういう経緯で彼が「これこそが勉強すべきドラフトである」と結論したんだ?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
288日前に更新/258 KB
担当:undef