C++相談室 part141

■ このスレッドは過去ログ倉庫に格納されています
2019/02/22(金) 03:07:43.52ID:MgOIx7iK
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
https://mevius.5ch.net/test/read.cgi/tech/1538755188/
C++相談室 part140
https://mevius.5ch.net/test/read.cgi/tech/1547326582/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/

■長いソースを貼るときはここへ。■
 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
2019/03/23(土) 19:30:40.79ID:EB4wgvrK
>>613
コンセプトは最近出てきた概念じゃないぞ
C++11が0xとか呼ばれてた頃から言われてた話
2019/03/23(土) 21:03:26.04ID:16DhXZwe
>>614
vcはバグだらけで使い物にならない
2019/03/23(土) 21:40:53.85ID:eUSVaq66
>>598
嫌なら実体化しなければ良いんじゃ…
仮にFooのインスタンスを生成したとしても、Foo::InsertItem()を呼ばなければFoo::InsertItem()は実体化されないはず…
2019/03/23(土) 22:45:17.73ID:4cH0E/is
今思えばC++0xのコンセプト案はいろいろ酷かったな
あのまま入らなくてよかった
2019/03/23(土) 23:17:20.42ID:EB4wgvrK
コンセプトマップだとかコンセプトを満たすことを自己申告しなきゃいけないだとか
傍目に見て正直意味わからんかった
2019/03/23(土) 23:51:54.14ID:11jhwwP/
Axiomはとてもいいと思ったが、消えたのだな・・・
2019/03/23(土) 23:53:58.85ID:enzaJQTj
>>588
フーリエ変換の係数みたいなものは実行時には定数だけれど、事前に計算式で計算しておきたくはなる。
でもまあ普通に考えればビルド構成の問題だわな。
なぜコンパイラに無理やり突っ込むかと言えばまともにビルド構成を考える能力がないからっていうね。
2019/03/23(土) 23:54:27.98ID:4cH0E/is
axiomさんは契約アトリビュートとして生まれ変わったのだ
624デフォルトの名無しさん
垢版 |
2019/03/24(日) 00:40:12.28ID:7x4/H6l4
C++の複雑さはオナニー的なところがある
2019/03/24(日) 01:38:06.52ID:b8r3VMdD
コンパイル時に決定してることしかできないなら、コード書く必要あるか?
1+2しか計算できないんだろ、2+3の結果が欲しかったら、コンパイルし直しw
2019/03/24(日) 02:05:19.27ID:xAoD2jBj
狭義のアルゴリズム(有限ステップで終わる)を記述する分にはそれで十分
無限ループを含む手続きを記述したかったら無限再帰すればええ
と考えればメモリが無限にあればコンパイルが終わるまでに任意の処理ができる
627デフォルトの名無しさん
垢版 |
2019/03/24(日) 02:07:46.29ID:4oYv+rwZ
定数型プログラミングでコンパイラを創ろう。
2019/03/24(日) 02:16:59.70ID:9ZLLLplX
コンパイル時に畳み込んで定数にした方がよいかどうかはコンパイラの最適化で頑張って欲しい話で、
それで足りない、さらなるチューニングが必要なときの記法が統一的だったらうれしいねっていう程度の話じゃないかな。
普段からそんなにコンパイル時計算を意図したりはしないよ。
629デフォルトの名無しさん
垢版 |
2019/03/24(日) 02:25:38.27ID:Wmd2CxZH
P言語でC++中間コードを生成するスクリプトを書けばいいじゃない。
swigみたいな。
カスタムコンパイルやカスタムビルドはそのためにある。
630デフォルトの名無しさん
垢版 |
2019/03/24(日) 02:33:38.88ID:4oYv+rwZ
ヤック、レック相当をメタプログラミングで実現することができるのではないか。
スピリチュアルな方向性ではなく。
2019/03/24(日) 02:50:04.22ID:9ZLLLplX
PEG 相当のことを実現しているライブラリとしては Qi があるけど、
Yacc みたいに LALR をやってくれるのは知らないなぁ。
出来るのかな?
2019/03/24(日) 03:13:50.09ID:PmamUspu
>>628
個人的には、メタプログラミングで定数値のパラメータ作るのに構造体でメタプログラミングする必要が無くなったのはconstexprにかわしゃ
2019/03/24(日) 03:16:29.85ID:PmamUspu
ごめん間違って送信した、
constexprに感謝してるw
あとビット演算とか整数値の計算する関数もconstexprつけときゃテンプレートパラメータに渡せるし
高速化は二の次だと個人的には思ってる
634デフォルトの名無しさん
垢版 |
2019/03/24(日) 03:23:59.40ID:4oYv+rwZ
STLあっての私たち。
2019/03/24(日) 03:30:27.34ID:b8r3VMdD
STLって遅くて使えなくない
636デフォルトの名無しさん
垢版 |
2019/03/24(日) 03:32:16.98ID:4oYv+rwZ
確かに遅いね。
637デフォルトの名無しさん
垢版 |
2019/03/24(日) 03:37:58.18ID:4oYv+rwZ
テンプレートメタプログラミングは永久機関。
2019/03/24(日) 05:16:54.07ID:xAoD2jBj
STLにCStringを入れて欲しい
639デフォルトの名無しさん
垢版 |
2019/03/24(日) 05:41:26.93ID:NAaHZN6A
嫌です
2019/03/24(日) 05:51:09.56ID:0ur1Ot0v
男なら全部char[]
2019/03/24(日) 06:09:08.25ID:xAoD2jBj
sprintf_s()と_cuntof(array)がどこの環境でも標準で使えるならchar[]も悪くない選択肢ではある
2019/03/24(日) 08:26:16.35ID:3s1WkY0F
boost spiritはコンパイルが糞遅いし、何か間違えると何処が原因かさっぱりわからんし、
実用には程遠かったな。テンプレートでここまでできるという一発芸的な。
2019/03/24(日) 09:20:48.36ID:0R743LPx
テンプレートメタプログラミングって元々はアンチパターンとして提出した例だったんだけどね。
本当に愚者というのは度し難いというか。。
2019/03/24(日) 09:21:19.70ID:EkBj7yKG
CStringをこの世から完全に消し去って欲しい
せめてbasic_stringと互換性のあるインターフェースを持たせてからフェードアウトして欲しかった
645デフォルトの名無しさん
垢版 |
2019/03/24(日) 09:23:21.86ID:Wmd2CxZH
CStringT::Format()系関数は、sprintf()系関数を2回呼ぶので冗長。
利用バッファサイズを事前に指定できないことが原因。
2019/03/24(日) 09:27:05.22ID:EkBj7yKG
>>643
だから天井人がお前ら下々に分かるレベルにしてやるよってことで様々な改良が加えられてるんだよなあ
それでもまだ分からないとなったらどこまでレベルを下げればいいんだってなって頭抱えちゃうよ
2019/03/24(日) 10:26:38.44ID:a59b/YMZ
CStringってなに?
2019/03/24(日) 10:31:25.24ID:SVMO04Wq
CStringは、Windows用のC++のクラスライブラリ、MFCの文字列クラス。
2019/03/24(日) 10:45:02.21ID:myNgr9GS
>>645
冗長って言われても一度パースしないと必要サイズはわからんからしょうがないだろ
まあ1KB程度のバッファー持って処理中に足りなくなったらパースし直すとかでもいいとは思うが
2019/03/24(日) 10:47:24.53ID:0ur1Ot0v
便利さを求めるならなんかフレームワーク使えよ
軽さを求めるならchar配列でゴリゴリ書けよ
2019/03/24(日) 10:52:30.12ID:EkBj7yKG
性能も利便性も標準より低いフレームワークさん・・・
652デフォルトの名無しさん
垢版 |
2019/03/24(日) 11:06:49.87ID:Wmd2CxZH
>>649
素直にsnprintf()のように最大バッファサイズを指定するオーバーライド関数を追加すべきでしょ。
CStringT::Format()関数を呼び出す側は、あらかじめサイズを予想できる状況にあることが多い。
2019/03/24(日) 11:52:04.64ID:0R743LPx
>>646
天上人のつもりなのがそもそもの問題なんだがな。。
最近の標準委員は明らかにプログラム組んでなさそうな連中が決めてるような感じだし。
c++なんかは顕著だがそういうマウントの取り合いによる新機能拡充が一番現場を疲弊させてるっていうことを
なんでわからんかね。
2019/03/24(日) 11:52:05.81ID:EHuBBnjq
MFCが出来た頃のstd::stringはそりゃまあ酷いシロモノだったんじゃ
あまりCStringを責める気にはなれん
2019/03/24(日) 11:55:08.60ID:DVu1xjKe
いくらリリース時に型がすべて決まってるはずと言ったってDRYはそれなりに大事だろ
2019/03/24(日) 12:01:45.23ID:rLn5TxmP
>>653
標準化委員会の議論とまともに論理的な議論のできない5chを同一レベルで扱うなよ
657デフォルトの名無しさん
垢版 |
2019/03/24(日) 12:05:08.13ID:4oYv+rwZ
しかし旧石器時代にSTLが作られたことを思うと、オーパーツと言ってよいのではないか。
数学的に洗練されたこの美しさ。
古代人は数学が得意だったのでは。
2019/03/24(日) 12:09:06.38ID:EkBj7yKG
>>654
まあそれはある
でもstlが普及してからも互換性が全くないまま終了したので負債になってしまったのは悲しい
2019/03/24(日) 12:09:46.38ID:Wmd2CxZH
それにしてもiostreamの醜さよ。
2019/03/24(日) 12:37:41.11ID:NSjukkr5
>>652
C言語に毒された老害かよw
欲しけりゃ自分で実装しろよ
661デフォルトの名無しさん
垢版 |
2019/03/24(日) 12:46:47.36ID:DqM6OskA
>>648

>>647 はそんなの百も承知で書いてると思うが
2019/03/24(日) 12:47:06.43ID:rmV9lt2O
<strsafe.h>を知らない人が多いのか?
663デフォルトの名無しさん
垢版 |
2019/03/24(日) 12:55:26.69ID:DqM6OskA
>>657
そうか?
全然そんなことないと思うぞ

MFCのはもっと酷かったからそれよりマシかなって程度
664デフォルトの名無しさん
垢版 |
2019/03/24(日) 12:57:50.08ID:Wmd2CxZH
>>660
簡単だから当然、実装はする。
下手にバッファサイズを測る手間をかけるくらいならバッファサイズを渡せという話。
バッファサイズを渡せば速度が通常のCStringT::Format()より30〜40%ほど改善するんだから、公式でも採用してもらいたいという趣旨。
665デフォルトの名無しさん
垢版 |
2019/03/24(日) 13:07:04.34ID:Wmd2CxZH
gccとvcでは vsnprintf()の挙動が違う。va_listの内部実装が異なるからだろう。
gccの場合、同じva_listを使ってvsnprintf()を複数回呼び出すと…
666デフォルトの名無しさん
垢版 |
2019/03/24(日) 13:26:03.77ID:tvGVd8WB
続きはCMのあとで!!
2019/03/24(日) 13:42:15.21ID:uLk8b7ur
>>664
どうせ弄るなら、va_listとか旧世紀の遺物つかわなくても、templateの可変長引数を使って1から作り直した方が良い。
2019/03/24(日) 13:44:34.27ID:EHuBBnjq
va_listを他の関数に渡した後で、va_startで初期化せずに再使用するのは未定義動作
何が起きても文句は言えないしコンパイラごとに挙動が違うのは当然というものだ
2019/03/24(日) 13:55:44.10ID:oV9fIVj4
string_viewはどうだろうか?
670デフォルトの名無しさん
垢版 |
2019/03/24(日) 13:56:05.38ID:Wmd2CxZH
>>668
それはつまり、gccではCStringT::FormatV()相当の実装が困難ということを意味している。
バッファサイズを自分で渡す仕様が最適解ということ。
2019/03/24(日) 13:59:03.55ID:myNgr9GS
>>664
そんな旧態依然のインターフェイス欲しけりゃ自分でやれやってことだろ
672デフォルトの名無しさん
垢版 |
2019/03/24(日) 14:13:40.53ID:Wmd2CxZH
それにつけてもostringstreamの醜さよ。
2019/03/24(日) 14:40:52.61ID:EkBj7yKG
streamサイコー<<<<<<
2019/03/24(日) 14:51:51.49ID:a59b/YMZ
clang++使ってみたら、std::async使えない・・・
さすが、フリーだな
2019/03/24(日) 14:52:15.46ID:b6oq5ESd
clang++使ってみたら、std::async使えない・・・
さすが、フリーだな
676デフォルトの名無しさん
垢版 |
2019/03/24(日) 16:30:35.16ID:4oYv+rwZ
>>672
何処がひどいですか?
2019/03/24(日) 16:50:49.33ID:GJPzxHHg
CStringのくそ設計にいまさら文句言ってもなぁ
そもそもメンバ関数、しかもdestination側と言う時点で使う側の利便性考えていない
2019/03/24(日) 16:55:28.18ID:xAoD2jBj
遅いしフラグがいっぱいあるし読みにくいし
ostream& T::operator<<(ostream&, const T&)やistream& T::operator>>(ostream&, T&)をTにつき一種類しか定義できないから
万全の汎用性を有しているかというとそうでもないし、

唯一の長所は型安全なところだが、意図通りの出力になるまでどうせトライ&エラーすることになるのだから
それ以下の工数でprintf()の書式ミスを発見できるわ;;
2019/03/24(日) 16:58:49.26ID:xAoD2jBj
CStringをdestination側に使うときの書き方はスゲーカンタン
 CString cstr;
 cstr = "Hello World!\n";
でおkコピー程度でCstring::Format()を使う必要はナス、

ソース側に使うときはむしろstd::stringよりカンタン
 printf("%s\n", cstr);
で通る
2019/03/24(日) 17:01:05.52ID:xAoD2jBj
まあ個人k的にはprintf("%s\n", (char*)cstr); ぐらいで手を打つが
2019/03/24(日) 17:10:19.89ID:b6oq5ESd
CStringなんて使うのはc言語だけだろ
2019/03/24(日) 17:19:45.54ID:PmamUspu
>>653
ここはマウント取りたいだけのバカが沢山居るけどさすがに標準化委員会は違うだろ
ただソフト開発者や標準・boost以外のライブラリ設計者はほぼ居ないんだろうなとは思うが
2019/03/24(日) 17:32:06.96ID:GJPzxHHg
標準化委員会はよくも悪くも開発者目線だなあとしか
提案者の用途さえ満たせれば良い的な仕様が多々見られる

最近だとto_charsとfrom_charsなんてまさにそんな感じ
2019/03/24(日) 17:44:39.67ID:6DYvLdXI
>>678
>フラグがいっぱいあるし

この i/o stream のフラグってきちんと定義されているのでしょうかね…
処理系に依存してテキトーな気がしてしかたがない
https://mevius.5ch.net/test/read.cgi/tech/1434079972/30 を書くときにさんざん調べたつもりなのですが、よくわからなかったことを記憶しています。
今みると、嫌々 stream.fail() でごまかしていたようです
2019/03/24(日) 21:04:38.58ID:0R743LPx
>>656
江添レベルの奴がやってる時点であんまここと変わらんだろ。
初心者に初めからautoで宣言させたコード実行させようとするような馬鹿だぞ。
初心者のためよりも自分のエゴ満たすためってのがあまりに優先されすぎてる。
2019/03/24(日) 21:11:22.21ID:EkBj7yKG
>>682
そんなわけないが
研究者だけでなく様々な企業のエンジニアも参加している
お前らの好きな組み込み業界や自動車業界も人を派遣してる
2019/03/24(日) 21:17:23.06ID:EHuBBnjq
つい最近まで「トライグラフは現場でバリバリ使いまくってるから無くしちゃダメー!」って必死に訴えてる人達がいっぱい居たのが標準化委員会だよ
2019/03/24(日) 21:37:39.78ID:GJPzxHHg
初心者にauto使わせるのは悪くないというかむしろそうすべきだろ。
現場が疲弊云々はそんな現場辞めてしまえとしか
標準化委員会はc++バリバリに使っている現場の意見が十分反映されているのだから

文句があるなら委員会に参加すれば良いんだよ
2019/03/24(日) 22:05:21.71ID:iBzlPNVB
>>687
IBMだけな・・・
2019/03/24(日) 22:08:27.13ID:zVUhrel1
>>688
C++を使わせないのが正しい。
691KAC
垢版 |
2019/03/24(日) 22:12:29.07ID:baOwhHMi
>>690
そうじゃない
688の思想は、Cにも取り入れる方向だろう
2019/03/24(日) 23:03:50.83ID:0R743LPx
あれで現場の意向が本当に入ってると思ってる奴がいるのか?
c++の衰退とかデータで見ても信じない連中なのかね。。
まるでどこぞの統計データを今でも信じてる連中みたいだ。
693デフォルトの名無しさん
垢版 |
2019/03/24(日) 23:18:22.54ID:Wmd2CxZH
メモリやCPUが安価で高性能になれば、コンパイル言語全般のシェアが下がるのは当然なのでは。
2019/03/24(日) 23:22:35.66ID:dT6Xb8jy
>>693
時代は静的型だよ
2019/03/24(日) 23:31:19.17ID:KmR/jJEd
現場にはcとc++が違うことを知らない奴も多いwww
2019/03/24(日) 23:38:44.81ID:GJPzxHHg
実際現場の意見入っている感じするじゃない?
どちらかと言うと実装側の都合でデグレードされたりすることが多い
コンセプトいい加減入れろよと
エラーメッセージわかりづらいし、SFINAE面倒くさいんだよ
2019/03/24(日) 23:40:40.71ID:PmamUspu
>>688
>初心者にauto使わせるのは悪くないというかむしろそうすべき
型や参照、ポインタ、修飾とかの違いでコンパイルエラーになるのを経験しないのは危険だと思うけどねぇ
推論された型を勘違いした上にたまたま通ってしまう可能性もあるわけだし

便利なのは否定しないけど静的型付け言語であるC++のパラダイムを変えるような機能ではない
2019/03/24(日) 23:46:22.50ID:dT6Xb8jy
>>697
そういうことを言っていいのは出来合いのtypedefを使わないで全ての型名を愚直に書いている奴だけ
2019/03/24(日) 23:53:18.03ID:PmamUspu
>>698
重箱の隅
>>685から読み直してみ
700デフォルトの名無しさん
垢版 |
2019/03/24(日) 23:56:09.01ID:4oYv+rwZ
キリバンゲット!!
2019/03/25(月) 00:05:20.37ID:lHhl7aCC
>>685
この書き込み自体がもうね
江添の考え方に反対するならそう言えば良いのに、エゴとか完全に個人攻撃しちゃっているじゃない
2019/03/25(月) 01:23:08.49ID:dMeCWU6I
結局ビャーネって何を作ったの?
言語の仕様なんかは磯さんが決めてんでしょ
2019/03/25(月) 01:44:06.00ID:/j2VHiDc
すべてはユダヤの陰謀だあぁぁ!!!
704デフォルトの名無しさん
垢版 |
2019/03/25(月) 01:47:24.45ID:LV8gdQ4G
陰謀論を唱えるような人は、先入観が強すぎて不具合の原因を見つけ出せずに時間を浪費するタイプの人だから、プログラマをやめるべき。
2019/03/25(月) 07:31:49.87ID:+RmEIgLd
政治なんですよ政治
2019/03/25(月) 07:46:27.12ID:mW0SiMKO
MISRA-C 2004 の本は、トヨタなど大企業の50人が書いた本だけど、
ドワンゴ江添の本は、彼1人で書いたから、超人技!

Linux プログラミング・インタフェース、Michael Kerrisk、2012

この本とともに、神の書と言える!

KADOKAWA が言ってる。
当社はプログラミングの会社ではないけど、
なぜか、プログラマーが多いし、募集もしていますw
707デフォルトの名無しさん
垢版 |
2019/03/25(月) 11:25:12.65ID:MuEFgcsw
>>686 裁判費用をクラウドファウンディングで捻出する予定はありますか
2019/03/25(月) 11:39:13.03ID:LV8gdQ4G
首都は「ヌルスルタン」、前大統領の名前に改称 : 国際 : 読売新聞オンライン
https://www.yomiuri.co.jp/world/20190325-OYT1T50119/
2019/03/25(月) 21:09:33.79ID:DI1df1TX
ファンクタって1回だけ使うならインスタンス生成する分関数より高コストで繰り返し使うなら生成済みのインスタンスを再利用できるから低コストという認識であってます?
2019/03/25(月) 21:21:15.56ID:CfE+HAKL
一切知りません
2019/03/25(月) 21:21:26.20ID:8+7iDICf
あってません
2019/03/25(月) 22:35:05.39ID:8zmAEr9n
>>701
あの教え方が本当に初心者のためになると思ってんの?
完全に書く側の都合による本にしかなってない。
ああいうメモリ意識の低い本で教えることはc++を使わせる上でマイナスにしかならん。
2019/03/26(火) 00:05:13.64ID:Pu4N06vt
>>712
なるだろ?
想定している利用者像が違うだけ
始めにauto使わないように慣らされたら、どうでも良い場面で型指定するバカに育って逆に面倒臭いだろ

まあ一番の害悪はnewやdelete、果てはmallocやfree使わせる奴だが

動的多次元配列でnewをループで入れ子にするのとか最悪
2019/03/26(火) 00:09:39.69ID:Xorohn3v
昨今のスクリプト言語は大抵autoじゃねえの
そうすりゃ初心者と型システムの都合なんてのはクソくらえ、だ
入門者にゃ型なんて意味無しじゃん
それに初心者にどうやってマイナスかどうか確かめたのか怪しい

ついでに型&autoとメモリ意識とは違うからな
2019/03/26(火) 00:12:14.24ID:Pu4N06vt
大体intとかあまり生で使わんよね
少なくともtypedefしておくもんじゃね
716デフォルトの名無しさん
垢版 |
2019/03/26(火) 00:29:37.47ID:otrrnTwO
このスレ住民は、 auto によってコンパイル時には分からない意図せぬ動作で困った経験ってある?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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