X



C++相談室 part153
■ このスレッドは過去ログ倉庫に格納されています
0649デフォルトの名無しさん
垢版 |
2020/12/03(木) 06:42:09.17ID:w/MpdpQO
勉強するぞ!勉強するぞ!勉強するぞ!


C++には似合わないような気が。
0650デフォルトの名無しさん
垢版 |
2020/12/03(木) 11:49:30.18ID:4DIFtwYV
>>649
どういう意味だ?
1. C++erならそれくらい勉強せずに使いこなせ
2. あるがままを受け入れろ。状況を変えようとするな
3. Pythonを便利と言うな

どれ?
0651デフォルトの名無しさん
垢版 |
2020/12/03(木) 22:01:01.64ID:anyYWQoy
「ブラック企業社員」のお助けアプリが誕生 開発したのは22歳金髪大学生、開発のきっかけとは?
https://news.yahoo.co.jp/articles/b9d5e3b84e4aa78fab64d3eb8e0c02f72911287e
レシート買い取りアプリONEの17歳起業家、サービス一時停止から「怒涛の3カ月」で気づいたこと
https://www.businessinsider.jp/post-175983
ビジネス版マッチングアプリ「yenta(イェンタ)」全国展開 開始!
https://prtimes.jp/main/html/rd/p/000000023.000021544.html
ギフティング「TANP」運営がGCPほかから5億円調達
1日1200件の「リアルギフト」送付も可能に、U25起業家の新たな挑戦
https://thebridge.jp/2019/08/gift-ec-tanp-raised-500m-yen-from-gcp
人はこうすれば“ハマる”、源流はゲーマー視点の「幸せ」
https://project.nikkeibp.co.jp/behealth/atcl/feature/00005/012100006/
アプリ開発での起業は難しくない!成功するために覚えておくべきこと
https://www.biz.ne.jp/subject/blog/2004433/
【稼ぎ方が知りたい!】アプリの開発の収入って実際どれくらい?
https://itpropartners.com/blog/1657/
ネット関連事業で起業した成功例8選!ネットで成功するには○○が重要!?
https://www.official.or.jp/internet-entrepreneurship-success/
0652デフォルトの名無しさん
垢版 |
2020/12/04(金) 14:40:55.75ID:rp0tCaVB
>>637
返信遅れて申し訳ありません、読んで色々試したら何となくですが理由見えてきました
一番為になった回答です…本当にありがとうございました
0654デフォルトの名無しさん
垢版 |
2020/12/05(土) 08:56:44.63ID:F3hjf/ak
最近ずぶの素人にいきなりSTL教えたりする変な風潮、変なサイトが増えたせいで
こういうとこで初心者が苦労するんだよなぁ
ライブラリの使い方なんか、初心者がいきなりぶつかる"壁"であってはならんと思うんだが・・
先に言語自体の基本を学んでれば、>>634はここに聞きに来なくて済んでるはず
0657デフォルトの名無しさん
垢版 |
2020/12/05(土) 11:17:08.79ID:i8LYHGeY
そんなの意識する必要ない。"STL"なんて定義曖昧な言葉を使わなければよい。
0658デフォルトの名無しさん
垢版 |
2020/12/05(土) 11:41:24.32ID:f0cq7ZxN
C++を使わなくてもSTLを学ぶほうが良い。
それどころか、およそ学問というものに携わる者はSTLを学ぶべきだ。
なぜなら20世紀における抽象化最大の功績だからだ。
0659デフォルトの名無しさん
垢版 |
2020/12/05(土) 11:42:36.00ID:f0cq7ZxN
STLは宇宙人が教えた説があるほどクレバー、クレバー、そしてクレバーだ。
0660デフォルトの名無しさん
垢版 |
2020/12/05(土) 11:47:59.12ID:f0cq7ZxN
目からうろこですよ。
まじ鱗。
0661デフォルトの名無しさん
垢版 |
2020/12/05(土) 11:53:54.60ID:f0cq7ZxN
ムーブセマンティクスも感動したなあ。
あいつら本物の天才だな。
まじ鱗ですよ。
0662デフォルトの名無しさん
垢版 |
2020/12/05(土) 12:09:38.13ID:WVFX1CVk
unique_ptrとかthreadとかnumeric_limitsとかも"standard template library"だけどSTLとは呼ばれない
よく理解してないC++アンチが何となく叩きの槍玉に上げる時に使われる用語っていう印象
0663デフォルトの名無しさん
垢版 |
2020/12/05(土) 12:15:33.65ID:f0cq7ZxN
なんじゃそりゃ。
0665デフォルトの名無しさん
垢版 |
2020/12/05(土) 18:59:09.68ID:ynooL14Y
>>634
pairが初期化子リストによるコンストラクタを持たないから

c++ - emplace_back not working with std::vector<std::map<int, int>> - Stack Overflow
https://stackoverflow.com/questions/33207232/emplace-back-not-working-with-stdvectorstdmapint-int?answertab=votes#tab-top

似たような質問があって、mapだと初期化子リストのコンストラクタがあるから、initializer_listを使って初期化出来てる

この箇所あたりがそれ
https://cpprefjp.github.io/reference/map/map/op_constructor.html

map(initializer_list<value_type> init,
const Allocator& alloc); // (11) C++14 から

https://cpprefjp.github.io/reference/utility/pair/op_constructor.html
pairのコンストラクタにはinitializer_listは出てこない
0668デフォルトの名無しさん
垢版 |
2020/12/06(日) 08:19:51.08ID:tzyWxjgm
じゃあ、多数決で決めましょうや。
0669デフォルトの名無しさん
垢版 |
2020/12/06(日) 11:09:55.43ID:sjTPCZjA
>>667
違うんだったら何が正解だ?
0670デフォルトの名無しさん
垢版 |
2020/12/06(日) 13:55:38.68ID:hI81p89D
>>669
単純にemplace_backはコンストラクタに渡す引数を、push_backは生成済みの実体を受け取るという違いを
>>634が分かってないだけだろ

ついでに言えば、pairにinitializer_listを受け取るコンストラクタがあっても
emplaceは可変長テンプレート引数だから、推定に失敗してどっちにしてもエラーになる
多分。
0671デフォルトの名無しさん
垢版 |
2020/12/08(火) 20:44:18.72ID:efO/t6By
visual studio 2019でstd::filesystemを使いたいのですが、namespace"std"にfilesystemがありませんと言われます
ググた通りにC++言語標準をC++17にしても変わりません
どうすればいいですか?
0672デフォルトの名無しさん
垢版 |
2020/12/08(火) 21:02:15.62ID:O6ovwbXJ
上の方に
#include<filesystem>
と書く
0673デフォルトの名無しさん
垢版 |
2020/12/09(水) 01:24:22.81ID:WuZTb4kZ
なんだそりゃあ?!
0674デフォルトの名無しさん
垢版 |
2020/12/09(水) 06:50:42.80ID:OrjjObtT
>>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
0675デフォルトの名無しさん
垢版 |
2020/12/09(水) 08:05:49.03ID:TKgHvdMy
>>671
脱線の話だがappleのclangでfilesystem使おうと思ったら、
OSを10.15以降にしないと動かない上にビルドしたバイナリもそれ以降。
macだとintel版はhomebrewでgcc落としてビルドすれば旧いのでも動く。

日本語などのファイル名の扱いは、自分の試した範囲で、mac,linux,winで微妙に違ってた。
「wstring」、「stringでutf-8」のどっちかしか出来ん処理系があって、
複数機種用のコードは結局ifdefで分けるしかなかった。
そのうちライブラリが整備されるとは思うけど。
しかし「ハ゜」→「パ」のmacの仕様には参った。
0676デフォルトの名無しさん
垢版 |
2020/12/09(水) 09:04:33.91ID:bCzZQrOf
脱線路運動。
0680はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/12/13(日) 13:34:03.99ID:hv54fxHN
ブログホスティングサイトの系統だと RSS を提供してないところとかあんまりないと思うが。
0682デフォルトの名無しさん
垢版 |
2020/12/14(月) 19:00:34.80ID:mjvV58cu
std::vectorのメンバ関数にfind()とかrfind()がないのはなんでですかね?
string::find()みたいにあってもよさそうな気がするんですが・・・
0684デフォルトの名無しさん
垢版 |
2020/12/15(火) 09:25:27.40ID:rqj48Chi
>>682
#include <algorithm>のfind()を使えってことだ
何でもかんでもメンバに突っ込むのは悪い設計だからだ
この意味でstring::findは蛇足ともいえる
現実にはstring::findはiteratorではなくsize_typeを返すので
複数の文字列の同じ位置、のようなことがやりやすい
0685デフォルトの名無しさん
垢版 |
2020/12/15(火) 13:10:21.94ID:qBOs25Ot
UTF8とかだと単純に同じバイト値探せばいいわけじゃないからstringは特殊化してるんだよ
0686デフォルトの名無しさん
垢版 |
2020/12/15(火) 13:19:55.29ID:PHBBuZ6n
>何でもかんでもメンバに突っ込むのは悪い設計だからだ
こういう考え方いかにもCから入りましたって感じだな
0687デフォルトの名無しさん
垢版 |
2020/12/15(火) 13:21:51.75ID:gbeRTgGG
UTF-16(wchar_t)と違ってUTF-8(char)なら同じバイト列を探せばいいんじゃないの?
ASCIIと同じコーディングで済むのがUTF-8が普及した要因だと思ってた
0688デフォルトの名無しさん
垢版 |
2020/12/15(火) 13:36:54.46ID:8mWx/Grk
>>687
短い系列は特に、部分列が一致したからといっても、
デコードした時にその文字かどうかは保証出来ないんじゃ?
0689デフォルトの名無しさん
垢版 |
2020/12/15(火) 14:01:10.21ID:gbeRTgGG
std::stringってバイト単位で扱うものでしょ
本当に文字単位で扱いたいならstd::wstring
0696デフォルトの名無しさん
垢版 |
2020/12/15(火) 22:25:44.23ID:jc1ZwvrK
そもそもstring::findがあるのは文字列から文字列を探す需要が高いからじゃないですかね
vector含む各コンテナから探すのはほとんどの場合要素単位だから汎用的なstd::findを使えということと解釈
0697デフォルトの名無しさん
垢版 |
2020/12/16(水) 06:17:15.68ID:vxgFSXGy
>>696
だよね
std::stringのfindは要素を探すんじゃなくて、
要素(char)の連なり=部分文字列を探すもので
vectorとかのコンテナのそれとは異質だし蛇足とは思えない
0699デフォルトの名無しさん
垢版 |
2020/12/16(水) 09:05:13.62ID:9tcp04F0
まぁ汎用的というか、stlのアルゴリズムはほとんどが全コンテナに対して共通のコードに出来るからそうしてる(グローバルな関数にしてる)んじゃないかね
実際問題、共通のインターフェースを継承によって表現するのでない限り、同じコードをあちこちメンバ関数にするのは不自然
逆に共通のインターフェースにすべきクラスの機能を無理に普通の関数にするのも馬鹿げてる
0701デフォルトの名無しさん
垢版 |
2020/12/16(水) 11:28:07.30ID:Hv+rjawS
データ構造とアルゴリズムを合わせたものがクラスでありオブジェクト指向言語の特徴の1つと教わった
いまは汎用アルゴリズムが再び外部に分離されるようになってきてるのかな
テンプレート・ジェネリクス・インターフェースのおかげかな?
型Tに対する操作を外部化しておいたほうが汎用的で型Tを実装するすべてのクラスが操作を個別に持つのは無駄ってことか
0702デフォルトの名無しさん
垢版 |
2020/12/16(水) 11:50:27.11ID:uK3tjXUx
beginとendをペアで指定しないといけないポインタ的iteratorのせいで外部化せざるを得なかったという方が正しいんじゃないですかね
0704はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/12/16(水) 13:09:55.17ID:zkq7HUY5
>>701
オブジェクト指向にも種類がある。
ただひとつのオブジェクト指向がオブジェクト指向たる基準があるわけではなくて、
わりとふんわりした概念だよ……。
C++ の場合はカプセル化に軸があると思う。
隠されていないデータを処理する分にはメンバ関数にする必然性がない。
0706デフォルトの名無しさん
垢版 |
2020/12/16(水) 13:34:22.28ID:KCK/bj61
抜け道があるかって意味なら、java等もカプセル化できないってことになるけど
0707デフォルトの名無しさん
垢版 |
2020/12/16(水) 13:45:31.91ID:O+yPS5En
>>701
そういうことじゃねえよ
データ構造とアルゴリズムごちゃ混ぜにしたのをクラスと言い張る意味はない
1つの目的のためのお膳立てを揃えたものがオブジェクトでオブジェクトの種類がクラスだ

C++標準のライブラリではデータ構造はコンテナ、アルゴリズムは関数テンプレートとして分離されている
コンテナは配列やリストといったデータ構造を提供するまでにとどめ
それらを使って何かする応用までメンバにはせず関数テンプレートにしてある
0708デフォルトの名無しさん
垢版 |
2020/12/16(水) 13:50:56.36ID:j60AFdVm
>>706
Javaのリフレクションで何でも呼べる抜け道みたいな話ではなく
C++ってヘッダーファイルにprivateメンバー書かないといけないじゃん
そのせいで内部実装が変わったらライブラリ利用者にヘッダーファイルを差し替えてもらわないといけなかったりする
これってカプセル化できてないってことじゃない?
pimplとかテクニックがあるけどさ
0710デフォルトの名無しさん
垢版 |
2020/12/16(水) 13:55:52.62ID:KCK/bj61
なる。
そういうことならpmplかインターフェースクラスを定義するかしか思い浮かばないな
0711デフォルトの名無しさん
垢版 |
2020/12/16(水) 14:40:21.32ID:O+yPS5En
> 内部実装が変わったらライブラリ利用者にヘッダーファイルを差し替えてもらわないと

これ、そんなに深刻な問題か?
ライブラリの更新なんてリポジトリ決めてバージョン管理して
あとは勝手に落とせで運用できてるやん
0712はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/12/16(水) 15:35:04.62ID:zkq7HUY5
現実的な部分では運用でなんとかしてる部分はあるのも確かだが、
現実に対する妥協なのでパラダイム的な話とは区別が必要じゃない?
まあ不可分なところもあるんで微妙な話ではあるけども。
0714デフォルトの名無しさん
垢版 |
2020/12/16(水) 18:14:53.45ID:O+yPS5En
>>712
運用できていても、いささかでも無理があれば
まだ余裕があるうちでも将来を見据えて
議論する価値が出てくるね

問題は無理を全く感じていないことを
空想論的に問題視することだ
個人的に問題視するのは勝手だが
他人が付き合ってくれないときにしつこくすることだ
0716デフォルトの名無しさん
垢版 |
2020/12/16(水) 22:51:18.04ID:IUrbfkPB
C++はゼロコストで極力あらゆる制御をプログラマーに与えることを
使命ていうか至上命題にして至高のレーゾンデートルとみなしているように見えるので
プログラミングパラダイムを論じるにはいまいちに思はるる、

やっぱヘッダファイルとか批判者にとってかっこうの餌食でありその光景がまさに展開された、
0717デフォルトの名無しさん
垢版 |
2020/12/16(水) 22:58:46.39ID:IUrbfkPB
きちんとオブジェクト指向するんなら継承は全部virtualであるべきや
といってもC++だけにあてはまる批判ではないが

Base::Foo()とDerived::Foo()が異なる振る舞いで定義されているときに、
func(Base&)にDerivedを渡したらfunc()の中ではBase::Foo()が呼ばれるとか
危険極まりない
この基準で言ったらたいていの似非オブジェクト指向言語はNG
0719デフォルトの名無しさん
垢版 |
2020/12/16(水) 23:25:11.55ID:2c+prgNQ
クラスベースオブジェクト指向はすべて似非オブジェクト指向
アランケイ「C++のオブジェクト指向?知らない子ですね…」
0720デフォルトの名無しさん
垢版 |
2020/12/17(木) 01:05:17.90ID:X4tT/GwL
>>716
>C++はゼロコストで極力あらゆる制御をプログラマーに与えることを
>使命ていうか至上命題にして至高のレーゾンデートルとみなしているように見えるので
半分は正しいがそれならcでええやんてなる。
c++のc++たる所以(もしくは厨受けするところ)ってのは、ゼロコストなのにさらにどんなに高級な機能も入れられるんやで〜ってところだろ。
0722デフォルトの名無しさん
垢版 |
2020/12/17(木) 07:05:17.82ID:iG8ucCJK
非仮想だとそうなっちゃうっていう批判なんだろ
ハイディングなんかする方が悪いと思うけど
0724デフォルトの名無しさん
垢版 |
2020/12/17(木) 08:15:27.96ID:61mx8GyZ
>>720
「使った機能にあったコスト」だよ。
ゼロコストはあくまで機能を使わなかった場合の話。
cの機能しか使わなかったらcのコストしかかからないのが基本方針だろ。
0726デフォルトの名無しさん
垢版 |
2020/12/17(木) 14:49:46.67ID:4VSV+Zch
#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がおかしいんだよな?
バグレポ上がってたりする?
0729デフォルトの名無しさん
垢版 |
2020/12/17(木) 17:33:27.07ID:4VSV+Zch
>>728
23.20.1 Header <charconv> synopsisにはfloat, double, long doubleが挙がってるんだけど・・・
ああ、GCCがってことねthx
0730デフォルトの名無しさん
垢版 |
2020/12/17(木) 22:56:50.01ID:mqVedE2Y
gccの傾向として、熱烈な信者がいて、出来ないことを出来ると宣伝したり、劣っているものを優れていると宣伝したりする場合がある。
ところが、そのような場合、GNUのマニュアルは「出来ない」「劣る」と明言している場合が多い。
したがって、gccについてはみだりに検索せず、GNUのサイトを見ることをお勧めします。
0732デフォルトの名無しさん
垢版 |
2020/12/18(金) 01:16:51.95ID:UPU6Cu+L
ダメコンは、ダメージコントロールの略ですよ。
0733デフォルトの名無しさん
垢版 |
2020/12/18(金) 05:02:08.68ID:t+i2XnfT
継承使うと密結合になり変更に弱くなるし(実行時のオーバーヘッドにもなりそう)
規約で縛るというSTLの実装には好感が持てる
0734デフォルトの名無しさん
垢版 |
2020/12/18(金) 06:51:33.39ID:TZi3wQJw
>>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]':

まだまだ延々続くけど、こんくらいでいい?
0739デフォルトの名無しさん
垢版 |
2020/12/18(金) 13:23:30.53ID:2eIYLdZu
n要素のvectorをm要素に変えたいときって中身はどうでも良いって思ってれば
vec = vector<int>(m);

vec.assign(m);

vec.resize(m);
もコスト変わらない?
0741デフォルトの名無しさん
垢版 |
2020/12/18(金) 13:40:56.80ID:TZi3wQJw
>>737
何がしたいの?
元ソース貼ってるからそっちでコピペして
手元のGCCでコンパイルしてみれば再現するはずだよ
0744デフォルトの名無しさん
垢版 |
2020/12/18(金) 14:33:16.19ID:kYvjoJp5
>>729
gccではMLで夏くらいにfloat版の実装のコミットの話が出てたから次のリリースでは多分実装されてるんじゃないかな。
0745デフォルトの名無しさん
垢版 |
2020/12/18(金) 15:35:36.73ID:A9pQAhpY
>>729
23.20.1がHeader <charconv>のドラフトってどれだ?
0748デフォルトの名無しさん
垢版 |
2020/12/18(金) 17:24:37.67ID:TZi3wQJw
>>747
そうか、思考停止するのか
よかったね

何だか色々と前提置いてるけど
俺は知らんよ、おまえさんの前提なんぞ
イヤミ口調のくせに脇が甘いな
0749デフォルトの名無しさん
垢版 |
2020/12/18(金) 17:28:32.84ID:Mxkr6hqK
priority_queue<int>に比較関数を指定したいとき、
priority_queue<int, vector<int>, greater<int>>
のようにすると思いますが、内部コンテナ vector<int> は別にデフォルトのままで良いし書くのが面倒なので省略したいです
可能ですか?
■ このスレッドは過去ログ倉庫に格納されています

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