【初心者歓迎】C/C++室 Ver.104【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
2018/12/28(金) 06:04:52.38ID:ufThBpcD
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
http://codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
1917
垢版 |
2018/12/29(土) 13:51:03.81ID:Ol/xTs6w
>>18
selectは「複数ソケットのとき」という先入観があったのですが、
1ソケットのときでも使うんですね。
ありがとうございました!
2018/12/30(日) 13:06:57.06ID:bhbCdqKe
gccでしか確認してないが、warningは出るんだが
前にu8をつけない'あ' は int (4バイト)展開されるんだな
u8つけてしまうと下位1バイトしか処理されないんで正しく処理されない。

wchar_t buf[0x100];
としとくと
buf[i] == L'あ'
ではwarningすらでない.
21デフォルトの名無しさん
垢版 |
2018/12/30(日) 16:05:04.48ID:FqO1nm3e
文字リテラルにu8プレフィックスは使用できない。
22デフォルトの名無しさん
垢版 |
2018/12/30(日) 16:10:42.14ID:kRHvhG4M
【TOKIOがまた被曝を応援】 「不勉強」「操られている」のはローラではなく、安倍と食事した奴
http://rosie.5ch.net/test/read.cgi/liveplus/1546137382/l50
23デフォルトの名無しさん
垢版 |
2018/12/30(日) 16:13:30.28ID:Y/PcKL5Q
https://cpplover.blogspot.com/2012/02/blog-post_16.html
2018/12/30(日) 16:43:37.53ID:bhbCdqKe
>>21
いったいいつの時代の話してるんだ古すぎるんだよ情弱
C++17から問題なく使用できる
2018/12/30(日) 16:50:02.84ID:bhbCdqKe
情弱がねごとほざくからそのたんびにイラン労力強いられることとなる
ちったぁ情報収集してこいよダニ
2018/12/30(日) 16:50:18.97ID:bm6ZOgnS
どうせだったら、utf8専用のchar8_t型も用意しといてくれたら良かったのに。
ascii文字圏の連中にはどうでもいいことなんだろうけどw
2018/12/30(日) 23:19:20.59ID:+xBVE+bB
教えてください。
C++のvectorについてです。
あるvectorの要素を自分自身に追加したいとき、どうすればよいのでしょうか。
例えば、v.push_back(v[2]);のようなことをしたいのです。
2018/12/30(日) 23:25:38.38ID:fEPs2N4H
それでいいんじゃね?
2018/12/31(月) 07:35:40.55ID:fsnZuStD
>>27
それ以外の何を望むの?
特定場所への挿入v.insertぐらいしかないじゃん
2018/12/31(月) 07:57:31.16ID:kcuDnRZu
27です。レスありがとうございます。v.insertでうまく行きました。
v.push_back(v[i])だとなぜか空の要素が追加されてしまい、困っていました。
2018/12/31(月) 08:53:01.66ID:Ls1ZsSUM
>>27
https://stackoverflow.com/questions/18788780/is-it-safe-to-push-back-an-element-from-the-same-vector
2018/12/31(月) 09:18:55.86ID:Ls1ZsSUM
>>30
まともなpush_backの実装なら対策されているので問題ないはず。
無対策でも明示的にコピーコンストラクタを呼べばうまくいかくも。(要素の型をTとする)
v.push_back(T(v[2]));
2018/12/31(月) 09:25:50.67ID:rwDIj1dr
あ〜そういうことか
俺もハマりそうだなそれ
でもそれはvectorの実装側の責任になるか
2018/12/31(月) 10:05:21.41ID:fsnZuStD
>>27
意図しないエレメントが追加されてしまうC++は何?バージョンも併せて教えてよ
3527
垢版 |
2018/12/31(月) 10:10:54.60ID:kcuDnRZu
環境書くのを忘れてました。すみません。
Win7、Visual Studio 2008です。
2018/12/31(月) 10:19:59.32ID:fsnZuStD
>>32
まともでない実装ってのはどのテンプレート?つかコンパイラ?
2018/12/31(月) 10:27:09.66ID:fsnZuStD
>>35
thx
なるほど10年前のコンパイラならstlにバグ残ってる可能性あるわな
2011、2014、2017でずいぶん新しくなってるよ
仕事で2008指定されてるとかじゃなければ2017入れて損することあんまないと思うけど
2018/12/31(月) 10:27:22.88ID:Ls1ZsSUM
さすがにvectorではまともでない実装にお目にかかったことはない。
VisualStudio2010のMFC独自コンテナCArrayで同じ問題ではまったことがあっただけ。
2018/12/31(月) 11:04:33.38
マジかよ MFC 最低だな!
失望しました。WPF 使うの止めます
2018/12/31(月) 11:44:30.10ID:zd5ZDQG6
vsに2011ってのもあったのか、いやあ勉強になるなぁ
2018/12/31(月) 11:46:37.75ID:sEEumFv8
C++の規格と混同しているっぽい。
2018/12/31(月) 11:58:04.83ID:fsnZuStD
C++の規格の話
2018/12/31(月) 12:28:15.56
つまり江添亮の話
2018/12/31(月) 20:39:25.62ID:kcuDnRZu
>>31
参考になりました。ありがとうございます。
2019/01/01(火) 03:54:37.57ID:vBi+DP3M
元日記念カキコ
2019/01/01(火) 15:38:58.76ID:tgQbht6s
gnuのobstackってざっくり理解するなら普通にデータ構造としてのstackのいち実装って認識であってますか?
2019/01/01(火) 17:39:02.76ID:i/vicifv
うん
48 【大吉】 【249円】
垢版 |
2019/01/01(火) 18:06:26.08ID:kK3EzG3m
はっキネン
2019/01/03(木) 02:16:07.41ID:oIrbeINi
Privateにメンバ関数を置くのって別にいいですか?
2019/01/03(木) 02:25:02.88ID:rCo9hP60
いいんじゃね?
そのクラスの中のみでよく使われる関数とかprivateにする
2019/01/03(木) 03:52:58.78ID:moS/XERj
zen2 5GHz が来た!
https://wccftech.com/amd-ryzen-3000-zen-2-cpus-ryzen-9-3900x-ryzen-7-ryzen-5-listed-online/
2019/01/03(木) 15:12:15.57
誤爆しました
2019/01/04(金) 00:19:38.87ID:C/NwCX/x
デバッガってどう動いたら正常なんでしょうか
vscodeでハロワしてみてブレークポイントで止まる→これでいいんだよな?となりまして
2019/01/04(金) 00:50:16.36ID:ihBPygyi
リクツを語ると
デバッガにデバッガを適用するとバグかどうかを検出できない
2019/01/04(金) 20:57:44.72ID:leXZv0J4
Win32APIなんですが、
ウィンドウクラスにアイコンハンドルを設定してWS_OVERLAPPEDWINDOWスタイルで
CreateWindow()すると問題なくタイトルバーにアイコンが表示されるのですが、
WS_POPUPスタイルでCreateWindow()した後にSetWindowLong()でWS_OVERLAPPEDWINDOWスタイルに変更すると、
タイトルバーにアイコンが表示されません。
WM_SETICONをSendMessage()しても変わりませんでした。
どうすれば表示されるようになるでしょうか?
2019/01/04(金) 23:35:35.15ID:GKwYgY3X
>>55
つ Win32API質問箱
5755
垢版 |
2019/01/05(土) 00:28:56.43ID:1yzAmca9
>>56
そちらはスレが盛んでないので、こちらでお聞きしました・・・
2019/01/05(土) 08:53:49.71ID:b8ezfK6l
じゃあ自力で頑張って下さい
59デフォルトの名無しさん
垢版 |
2019/01/05(土) 12:19:51.40ID:wMTnOPNR
>>55
http://eternalwindows.jp/control/controlbase/controlbase06.html
http://chokuto.ifdef.jp/urawaza/api/SetWindowLong.html
SetWindowLong 関数で変更されたそのデータは SetWindowPos 関数が呼び出されるまで反映されません 👀
Rock54: Caution(BBR-MD5:79b7e0206b0fd5ffcfddd514fa488d36)
6055
垢版 |
2019/01/05(土) 22:25:41.89ID:1yzAmca9
>>59
SetWindowLong()後にSetWindowPos()はコールしていたのですが、
WM_SETICONをSendMessage()するときのアイコンハンドル取得方法がまずかっただけでした(汗)
(LoadIcon()のHINSTANCE引数が正しくなかった)
今は問題なくアイコンが表示できています。
お騒がせしました!
2019/01/06(日) 01:50:50.63ID:crl+XFhH
>>60
https://g.co/kgs/ZEZu9X 👀
Rock54: Caution(BBR-MD5:36abcc1a7fb24404caf692865ab3af18)
2019/01/06(日) 13:24:20.28
>>57
盛んでないなら先ず盛んにしろよ
欲しい者は先ず自ら与えると言うぞ
2019/01/06(日) 16:05:17.54ID:s8+QTrGL
難癖つけ太郎
2019/01/07(月) 19:00:48.26ID:29GPlbw0
ツケタロサァン
2019/01/09(水) 15:58:07.62ID:LoPBTm2D
C++て3年周期で新規格リリースされるんだなC++20が来年発表て、
えーかげんもうついていけんわ
家電のモデルチェンジじゃあるまいし。言語の追っかけなんかやってられん。
2019/01/09(水) 18:23:48.31ID:h/UgfZoi
C言語の需要はそういうところじゃねえの
もうこれ以上進歩しないが大抵のことはできる
適度に難しいところもある
2019/01/09(水) 18:30:18.01ID:wEN9wc2j
>>65
もしそうしたければ古い版の規格で書いてもええんやで。
C++20 が出ても C++11 が消滅するというわけでなし。
まあ主要なコンパイラがサポートしなくなったらしょうがないけど……
2019/01/09(水) 22:38:39.03ID:teyoDIou
C++11が神過ぎる。
それまでとは雲泥の差。
これだけでずっと戦える。
2019/01/10(木) 07:42:30.84ID:JUlDRUM2
>>67
言語って自分だけで済まんだろ
キャッチアップしていかんと人の書いたコードが読めなくなる
こんな短期間でアップデート繰り返すんじゃなくもっと精査した上で規格変更しろといいたい
アップデート繰り返す度にユーザ減少してるだろ
2019/01/10(木) 07:53:15.61ID:JUlDRUM2
>>66
new/delete無造作に使ったコードを組込なんかで書くと、
メモリフラグメント作りまくるだけだからな。
ハードウェアの一部としてRTOS上で安定動作させるためには、
ポインタ使いまくりのbetter Cとして書くしかない。
4kB メモリのRL78でコード書いてみろと
71デフォルトの名無しさん
垢版 |
2019/01/10(木) 11:58:03.74ID:+qf2Eno1
>>69
C++の良かったのは仕様が枯れてることだったのにな
今は逆を逝っててどんどん人が離れて逝ってる
2019/01/10(木) 13:39:40.00ID:AlpMGZ50
utf-8の文字コードが格納されてるchar配列から、デコードされた文字をstd::string型に入れる方法を教えてください
以下のような変換を実装したいです

char ai[] = {0xe3, 0x81, 0x82, 0xe3, 0x81, 0x84}; // "あい"のutf-8コード
std::string str = ??
std::cout << str << "\n"; // prints "あい"
2019/01/10(木) 14:15:08.46ID:XfqugDbL
>>72
aiの最後にnull文字は入れないの?
入れないなら
srd::string str { ai, sizeof(ai)/sizeof(ai[0]) };
74デフォルトの名無しさん
垢版 |
2019/01/10(木) 14:38:26.46ID:f6PjJx/6
>>72
wstringに入れろ
2019/01/10(木) 17:13:07.72ID:2cm4ZQb/
>>69
時間を掛けたら扱う項目 (提案) も増えるからどっちでも同じだよ。
一度の変更が大量になるよりは小さな変更を頻繁にした方が良いというポリシー。
その方が実際の運用で出た問題をフィードバックしやすいという利点もあるしな。

>>73
配列の大きさを知るには std::size か std::extent を使えよ。
2019/01/10(木) 17:38:07.90ID:d84NrtHP
C++ には C 以来伝統の sizeof / sizeof 以外に
配列の要素数を知る方法があったはず…と思ったが std::size だったか。
でも標準で使えるのは C++17 以降だよね。

「C++ならテンプレート使えばできますよ」的な情報は色々あるけど、
結局、移植性を考えると古典的な sizeof 割り算が便利だったり。
2019/01/10(木) 19:00:06.40ID:K/rzzMpV
ちょっと知ったかは、よくよく初心者を馬鹿にする。
自分も、初めは、初心者だったくせに。
2019/01/10(木) 19:11:35.64
スタティックおじさんにならないように戒めなければ
79デフォルトの名無しさん
垢版 |
2019/01/10(木) 20:37:36.88ID:WIE9C9TP
ヒカキンの年収が10億超え!?明石家さんま・坂上忍も驚愕の総資産とは??
https://logtube.jp/variety/28439
【衝撃】ヒカキンの年収・月収を暴露!広告収入が15億円超え!?
https://nicotubers.com/yutuber/hikakin-nensyu-gessyu/
HIKAKIN(ヒカキン)の年収が14億円!?トップYouTuberになるまでの道のりは?
https://youtuberhyouron.com/hikakinnensyu/
ヒカキンの月収は1億円!読唇術でダウンタウンなうの坂上忍を検証!
https://mitarashi-highland.com/blog/fun/hikakin
なぜか観てしまう!!サバイバル系youtuberまとめ
http://tokyohitori.hatenablog.com/entry/2016/10/01/102830
あのPewDiePieがついに、初心YouTuber向けに「視聴回数」「チャンネル登録者数」を増やすコツを公開!
http://naototube.com/2017/08/14/for-new-youtubers/
27歳で年収8億円 女性ユーチューバー「リリー・シン」の生き方
https://headlines.yahoo.co.jp/article?a=20170802-00017174-forbes-bus_all
1年で何十億円も稼ぐ高収入ユーチューバー世界ランキングトップ10
https://gigazine.net/news/20151016-highest-paid-youtuber-2015/
おもちゃのレビューで年間12億円! 今、話題のYouTuberは6歳の男の子
https://www.businessinsider.jp/post-108355
彼女はいかにして750万人のファンがいるYouTubeスターとなったのか?
https://www.businessinsider.jp/post-242
1億円稼ぐ9歳のYouTuberがすごすぎる……アメリカで話題のEvanTubeHD
https://weekly.ascii.jp/elem/000/000/305/305548/
世界で最も稼ぐユーチューバー、2連覇の首位は年収17億円
https://forbesjapan.com/articles/detail/14474
2019/01/10(木) 22:25:25.90ID:jgU/jZru
std::sizeが使えなかったとしても(主要なゲーム機の環境の1つはC++14止まりだし)、テンプレートで取得するのはC++の移植性には影響しなくないか?
2019/01/10(木) 22:41:00.66ID:poVh1zdG
ていうかGUIとかマングリングの統一とかvtblが最初に来ることとか
テンプレート周りばっかりじゃなくて解決して欲しい問題いっぱいあるんだけどなぁ
あと個人的にはプロパティとかも欲しい
2019/01/11(金) 00:50:02.24ID:le18Krsa
配列の要素数を取得するだけのものを自分で書くならこんな感じかな。

template<class T, size_t N>
std::size_t size(T (&)[N]) {
return N;
}

実装自体には sizeof を使ったって害はあまりない (あえてする意味もないけど)。

template<class T, size_t N>
std::size_t size(T (&a)[N]) {
return sizeof a/sizeof a[0];
}

sizeof でのやり方を「そのまま」書く、またはマクロで覆うのは、
型チェックの支援を受けられないから変なミスをしやすい。

変数 a が (配列ではなく) ポインタのときに
sizeof(a)/sizeof(a[0]) という式がコンパイルは通っちゃったりするし。
変数名を二回書かなきゃならないのも、
何かの修正のときにうっかり片方だけ書き換えたりとか有りがち。

プログラミングをそれなりに長くやってると、
馬鹿みたいなつまらないミスをした経験のひとつやふたつやみっつや二百くらいはあるでしょ。
型システムはそういうのを多少なりとも事前に検出してくれるありがたい仕組みなんだから、
積極的に活用したいところ。
2019/01/11(金) 01:26:18.63ID:bUNhmYA9
C++標準じゃないけどVC++の_countofが重宝してる
2019/01/11(金) 07:47:16.24ID:PueFbUtC
>>75
>時間を掛けたら扱う項目 (提案) も増えるからどっちでも同じだよ。

同じ訳ないだろが、
仕様変更、追加したものの、さんざん使ったあげくそんなもん使うなってのはいくらでもあるだろ。
auto_ptrはどーした。
だから3年なんて製品のモデルチェンジ並の仕様変更じゃなく、言語オタク共がもっと時間をかけて精査して、
10年に一度ぐらいの変更にしとけってこった。
そもそもCのプリプロセスだったわけで、
Cとの整合性は確保した上で双方同時に仕様変更しろといいたい。
だいたいどっち見て仕様変更してんの?言語オタクのセンズリか?wwww
2019/01/11(金) 11:25:51.10ID:saOHWwmK
3年ごとなのはいいと思うけど、クラステンプレートの引数推定なんか
関数テンプレートみたいに推論できないテンプレート引数が残る形に出来ない上に
エイリアステンプレートには使えないしクラステンプレートの参照にも使えないし
デフォルトテンプレート引数では省略できないしで・・

便利だけど、あまりにも片手落ちじゃね?と思うことはある
2019/01/11(金) 13:40:13.69ID:le18Krsa
>>84
> 同じ訳ないだろが、
> 仕様変更、追加したものの、さんざん使ったあげくそんなもん使うなってのはいくらでもあるだろ。

同じだよ。
散々使ったからようやくわかったことで、ただの言語オタクどもがどんだけ理屈をこねた
ところで現実的なプロダクトの実際なんかわかりゃしない。
精査をしっかりすれば事前にどうにか出来てたと本当に思うのか?

> auto_ptrはどーした。

これはまあ……アレだ……
これ自体は擁護しようがないほどアレだけど、
一番アレなのを抜き出して言うのもちょっとどうかなって。

強いて言えば、当時としてはスマートポインタという概念を提示出来たという
成果といえなくもないんじゃないかな……。

> 10年に一度ぐらいの変更にしとけってこった。

https://i2.wp.com/ds3.jp/wp-content/uploads/2017/07/023.jpg

> だいたいどっち見て仕様変更してんの?言語オタクのセンズリか?

そうならないために言語オタクにゆだねない (実際の運用で見極める) という選択なのに、
お前はもっと言語オタクに活躍しろって言ってんだぞ。
おかしいだろ。
2019/01/11(金) 14:33:07.36ID:iMdUEP7b
仕様変更が止まってる言語はともかくとして仕様策定のない言語に比べればC++の更新スパンは割と長い方という認識がある

これより長いのメジャーどころだとC11(1,20年)/Fortran2008(5年)/Ada2005(10年)/Haskell(5年前後)くらい?
Haskellなんかは処理系拡張ゴリゴリだしアテにならないし他はもう古めかしさを感じるなぁ
88デフォルトの名無しさん
垢版 |
2019/01/11(金) 14:56:08.31ID:9UT8ehvY
これ以上Dをdisるのはやめて
2019/01/11(金) 16:08:50.25ID:c9plSaZI
まぁ、TypeScriptは年6回updateしてるけど次が待ち遠しいな。
2019/01/11(金) 20:26:13.94ID:KLK+GnJ4
426名無しでいいとも!@放送中は実況板で2019/01/10(木) 18:17:49.03ID:b7PfIJnh0

新しい物好きな人は、よく、古いもの馬鹿にする。
古いものに、大切なものがあることが、
よくあることを、知らない人が多い。
2019/01/12(土) 08:06:07.36ID:TXMmMfvK
古いという感覚を持つと話をしただけで古いものが悪いとは一言も言っていないが……?
一方でもしその良さが「新しい仕様を頻繁に覚えなくて良い」なら、言語に対して掛けるコストが減る事と、自身が怠惰である事の2面性を常に持つかもね

プログラマなんて怠惰でナンボだけど覚える事に怠惰か書く事に怠惰か人それぞれよね

個人的には草案で嬉しそうな機能を追加します!って言いながら実際の仕様では無限に延期される方が嫌
92デフォルトの名無しさん
垢版 |
2019/01/12(土) 13:08:56.44ID:k/r1EiKa
これな
youtube
qqwgldvnNlk
#t=41m41s
93388
垢版 |
2019/01/12(土) 23:22:31.27ID:0iVYXuy3
>>82
配列の参照のsizeofは配列のサイズじゃないから害はあるな()
94388
垢版 |
2019/01/12(土) 23:28:35.62ID:0iVYXuy3
>>84 は面白いよな、散々使うことで問題が見付かるって自分で初っ端から言ってるのに「だからスパンを長くしろ」つまり散々使うことが出来ないようにしろって言ってる
そして最後には言語オタクのセンズリかって、言ってる事が弾けまくってるな。

言語オタクのセンズリになってるのが不味いから、積極的に一定毎に更新するようにしていってるんだがな
2019/01/13(日) 09:10:56.47ID:47MX21Fj
何が言いたいのか分らん
2019/01/13(日) 09:35:19.34ID:e8OabTpu
箇条書きでよろ
2019/01/13(日) 14:11:24.44ID:goGtxYMD
おれは >>84 に同意だな
数年で更新ってそれがどれだけワークしてるのさ
だいたいどれだけ認知されてるのかようわからん小さい機能追加が山盛りな一方で
大規模なconstexprとかひかえめにいって大クソじゃん?
理論もなければ、現実のワークフローなにも考慮にはいってない
結局オナニーでしょ、何オタクかはしらんが
2019/01/13(日) 15:03:59.93ID:lykUAvmZ
1.仕様が確定してからでなければ実務には使われない
2.実務で使われないと良し悪しは分からない

3-1.仕様確定のスパンが短いと、仕様に提案されてから試されるまでが短い(もし悪ければ次で撤回も可能)
3-2.仕様確定のスパンが長いと、提案されてから実務で試されるまでが長い(撤回されないと言えば聞こえは良いが、当然悪いものが残り続ける)

んで仕様策定を言語オタクのオナニーって言ってるのに、実務で試されない、策定の期間だけ伸ばして言語オタクなんとかしろって言ってるように聞こえるからよく分からんわけだ
だって君たち仕様確定してからじゃないとそうそう草案の機能なんて使わないでしょ?追わないでしょ?私だってそうだ

期間が長ければその間に普及する概念も多くなるし(少なくともc++はそれを取り込む方針の言語なので)あんまり長くすると大変だと思うよ
2019/01/13(日) 16:52:54.35ID:bhcZ5Z4Z
>>97
c++14のconstexprは条件分岐とかループにも対応してるから、そこそこ使えるよ。
文字列リテラルの長さを取得する関数とかも定数化できるし。
テンプレートの非型引数をあれこれする関数を定数化したりとか。
2019/01/13(日) 16:58:40.56ID:goGtxYMD
機能追加したい人が、ブランチして機能追加して実務で実証して、
それから正式に仕様を提案すりゃいいじゃん
なんで仕方なく業務でC++使ってるだけなのにベータテストみたいな
仕様更新に巻きこまれなきゃならないのさ
2019/01/13(日) 17:05:15.75ID:zLcYabhS
そんなことよりrvoを強制してほしい…
2019/01/13(日) 17:05:25.96ID:bhcZ5Z4Z
仕様を確定させないと各コンパイラでの実装と互換性チェックとか出来ないし、
既存のコードが動かなくなるわけでもなし、
10年くらい経って十分枯れた機能を使ってれば良いだけでは?
2019/01/13(日) 17:06:11.78ID:goGtxYMD
>>99
その程度の最適化はコンパイラが勝手にやればよくね?
もっと大規模なことしたいからわざわざconstexprなんてキーワード追加して
かつ人間様がわざわざそれを指定するんだろ?
で大規模なことをできる仕様か?あれが?
どうせみんなデバッグするときにconstexprをはずしてんだろ?
アホと思わないか?
2019/01/13(日) 17:10:55.99ID:bhcZ5Z4Z
>>103
Visual Studioでしか試してないけど、わざわざ外さなくてもデバッグビルドでは定数化されないのが普通じゃないの?
2019/01/13(日) 17:11:37.75ID:zLcYabhS
constexpr相当を勝手にやられたら、参照してるほうがリコンパイルが必要か判断できなくなるんじゃないの?
2019/01/13(日) 17:27:56.15ID:bhcZ5Z4Z
constexpr指定を使わずに同じような定数化を自動でやるとなると、
一度全ての関数を定数化可能か調べるためのプレビルドみたいなことをしないと無理だよね。
2019/01/13(日) 17:43:24.56ID:goGtxYMD
定数畳み込みなんて古典的な最適化手法だし、
gccはstrlenの最適化やるだろ
だからもっと大規模なことをやるためのconstexprだろと言ってる
2019/01/13(日) 17:50:38.42ID:bhcZ5Z4Z
その最適化をコンパイラ依存でなく標準規格化したことに意味があると思うんだけど。
gccで出来ればあとは何でも良いの?
2019/01/13(日) 18:13:13.67ID:goGtxYMD
珍説どうも
その程度の最適化技術を持たないコンパイラベンダなんてどうでもいいな
clangのバックエンド自分で作った方が早い
2019/01/14(月) 02:10:17.55ID:ybeYuaGe
constexpr 相当のことはコンパイラが最適化で頑張るのが筋だというのは
まったく正当な意見だと思うんだが、本当に速度が必要な個所のチューニング
をしたいとき、つまりコンパイラの最適化以上のことがしたいときに
打てる手段が無かったりだとか処理系の拡張構文を使わなければならないというよりは、
不格好でも constexpr の方がマシ。

C++ は現実的に使えることを指向した言語で、現実はクソなんで、
クソを少しマシに書けるようにするってのは妥当な選択肢。
コンパイラが十分に賢いだとかいうような
理想的な世界で生きてる人は別に constexpr を使わなくてもいいよ。
2019/01/14(月) 06:19:38.07ID:S0iGLcvV
pythonやmatlabみたいに配列やvectorを:とかでスライス抽出できないんですか?
2019/01/14(月) 07:17:53.28ID:4qrkuOlT
技術スキンだけ高い奴が、できる奴と思い込んでるチキン。
2019/01/14(月) 09:22:28.84ID:UgNfZwvf
>>111
それをアセンブラで書いてみてくれ
2019/01/14(月) 10:26:42.41ID:3TGcl/LH
++20のfilterでスライスみたいな事ができるようになる
しばし待たれよ
2019/01/14(月) 13:02:31.28ID:BcFaCsuL
>>110
constexpr指定はコンパイラにはわからない関数呼び出し先で
定数化できる計算であるとコンパイラに教えられるので
指定できるならした方がいいだろうけど

>本当に速度が必要な個所のチューニング
そういう個所がコンパイル時にわかってる定数だけで構成されてる例なんて
まず滅多にないんだけどね
2019/01/14(月) 13:29:30.02ID:ybeYuaGe
>>115
>> 本当に速度が必要な個所のチューニング
> そういう個所がコンパイル時にわかってる定数だけで構成されてる例なんて
> まず滅多にないんだけどね

constexpr はコンパイラに対するヒントであるだけでなく、プログラマにとっての制約でもある。
「そういう (速度が必要な) 箇所」であるにもかかわらず実行時の値に依存しているということを
プログラマが気づくことが出来る (ので分離するなどの工夫をする機会があるかもしれない)
というのは十分に便利だよ。
2019/01/14(月) 13:39:03.52ID:BcFaCsuL
わかってないな
本当に解決しなきゃいけないボトルネックが、たかだか定数の畳み込みだけで
解決出来ることなどまず無いと言ってんの

ただの数回、数十回の普通の演算はそのままやっても十分速いんだよ
むしろ定数化できるとこを全部定数化したせいで、(即値にならないような構造体の場合)定数を読みに行くコストの方が大幅に高くなる可能性もある
constexprというか言語の機能を盲信しすぎ
2019/01/14(月) 13:47:53.15ID:BcFaCsuL
あと、
>「そういう (速度が必要な) 箇所」であるにもかかわらず実行時の値に依存しているということを
ファイルから読んだ内容、mainに渡された引数、ネットワークから受け取ったデータ
そういうの(および一度でもそれらと関わった変数)全て実行時の値だってわかってる?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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