[過去ログ] C++相談室 part134 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
453(1): (ワッチョイ df60-k3ZN) 2018/03/06(火)23:42 ID:xvhpcg6j0(3/3) AAS
>>452
数学方面の書き方を源流にしていると思います
[x, y) は x は含み、y は含めない半開区間を示しますが、それを類推したものでしょう
454(1): (ワッチョイ 07eb-n++H) 2018/03/06(火)23:43 ID:ey0B6I8l0(1) AAS
>>452
範囲の数学的な書き方、半開区間とかなんとか
それだとfirst以上last未満の範囲、ということ
455: (ワッチョイ a7b3-m1UI) 2018/03/06(火)23:47 ID:MSLc23us0(2/2) AAS
外部リンク[html]:ttsuki.github.io
前方宣言ってしたほうがいいのか、しないほうがいいのかどっちなんですかね
456: (アウアウウー Sa2b-wl/W) 2018/03/06(火)23:50 ID:pZOZvbRza(2/2) AAS
>>453,454 数学でしたか!勉強になります。
457: (ワッチョイ 2723-SQy9) 2018/03/07(水)00:29 ID:+JS1hm360(1) AAS
mutex g_Mtx;
int g_Val = 0;
int Func( int A, int B )
{
int Val = A * B;
lock_guard<mutex> Lock( g_Mtx );
return g_Val = Val;
}
省17
458(1): (ワッチョイ dfbd-lEE9) 2018/03/07(水)00:29 ID:6+ILModc0(1) AAS
endならともかくlastは区間内の最後の要素なんじゃ…
459(2): (アウアウウー Sa2b-m1UI) 2018/03/07(水)10:09 ID:ukyKg6LAa(1/5) AAS
基本的な質問なのですが、以下のプログラムがエラーになるのはなぜでしょうか?
char* pc = "abc";
pc[0] = 'z';
cout << pc << endl;
以下のプログラムでは意図通りに動きます。
char ac[] = { 'a', 'b', 'c', '\0' };
cout << ac << endl;
ac[0] = 'z';
cout << ac << endl;
460(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ bf6f-m1UI) 2018/03/07(水)10:14 ID:TWOfgg7C0(1/8) AAS
>>459
上は変数 pc はリテラル文字列の先頭を指すポインタ。
下の変数 ac は配列で、それを文字列 "abc" で初期化するって意味。
リテラルの破壊は未定義。
破壊しないことをあてにして破壊不可能なセクション (メモリ領域) に配置されたりすることもあるので、アクセスエラーが生じる。
あくまで未定義だから出来ちゃうこともあるし、コンパイラオプションで制御できたりもするけど、基本的にはあかんやつ。
461: (ワッチョイ e75b-m1UI) 2018/03/07(水)10:30 ID:ylRgY7un0(1/6) AAS
>>458
仮引数名をendにすると関数名のendと紛らわしいからだよ
説明の文中にendが出てくる度毎にいちいち仮引数か関数か断るハメになる
462(1): (アウアウウー Sa2b-m1UI) 2018/03/07(水)10:35 ID:ukyKg6LAa(2/5) AAS
>>460
ありがとうございました。
Pythonでimmutableとかいうのがありますが、それでしょうか?
463(2): (アウアウウー Sa2b-m1UI) 2018/03/07(水)11:10 ID:ukyKg6LAa(3/5) AAS
すみません、また、ベーシックな質問です。
char* pc1 = 1; → エラー
char* pc2 = NULL; → OK
char* pc3 = 0; → OK
なぜ、2番目と3番目はOKなのでしょうか?
char* pc1 = 1;
がエラーになるのは、 int 型の値で char* 型の変数を初期化できないからだとすれば、
省2
464(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ bf6f-m1UI) 2018/03/07(水)11:10 ID:TWOfgg7C0(2/8) AAS
>>462
Python なんか知らんがな。
Python の immutable は Python の immutable であって、それが C++ の何物かであったりはしないよ。
C++ のリテラルを破壊した結果は未定義というのは C++ のリテラルを破壊した結果は未定義という規則であるだけ。
似て感じられたとしても一対一に対応付くような単純なものではないので、
背景にあるメカニズムを理解せずに翻訳して理解しようとするような方法はお勧めできない。
465(1): (アウアウウー Sa2b-m1UI) 2018/03/07(水)11:14 ID:ukyKg6LAa(4/5) AAS
>>464
なるほど、そういう規則だからリテラルを破壊しようとするとコンパイルエラーにするわけですね。
ありがとうございました。
466(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ bf6f-m1UI) 2018/03/07(水)11:22 ID:TWOfgg7C0(3/8) AAS
>>465
書き忘れてたけど、 C++ の文字列リテラルの型は const char[] なので、
const 付きでないポインタに渡すと単純に型が合わなくてエラーになるはず。
C だと型に const が付いてないのに破壊するのは未定義ってことになっててあまりにもクソだったから改められた。
467(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ bf6f-m1UI) 2018/03/07(水)11:32 ID:TWOfgg7C0(4/8) AAS
>>463
0 はポインタに型変換可能で、型変換した結果が空ポインタと等しいことが保証されてる特別な存在。
(ビットパターンが等しいとは限らないことには注意が必要。)
互換であることが保証されているので、処理系によっては
#define NULL 0
として定義していることもある。
余談だが、これはオーバーロードされた関数でうっかりしやすいので気を付けた方がいい。
たとえば関数 foo が以下のような型でオーバーロードされている場合、
void foo(int);
void foo(int*);
省5
468(1): (アウアウウー Sa2b-m1UI) 2018/03/07(水)12:03 ID:ukyKg6LAa(5/5) AAS
>>466-467
ありがとうございました。
>>466
Visual Stuidoを使っていますが、以下でエラーは発生しませんでした。
char* pc = "abc";
cout << pc << endl;
469(1): (ワッチョイ e75b-m1UI) 2018/03/07(水)12:29 ID:ylRgY7un0(2/6) AAS
>>468
それはISO/IEC14882:1998の4.2で許されていたことに由来する
その後ISO/IEC14882:2011のC.1.1で廃止されたが
古いソースを通すために故意に違反状態のままにしている
470: (アウアウカー Sabb-5mf3) 2018/03/07(水)16:15 ID:nnB4Kxzea(1) AAS
c++の規約に違反にしないためには一度変数に代入する必要があるという事?
471: はちみつ餃子◆8X2XSCHEME (ワッチョイ bf6f-m1UI) 2018/03/07(水)16:24 ID:TWOfgg7C0(5/8) AAS
オプションで指定できるんじゃね?
俺は GCC を使ってるから知らんけど。
472(1): (ワッチョイ e75b-m1UI) 2018/03/07(水)16:29 ID:ylRgY7un0(3/6) AAS
違う
char const* cc;
cc = "abc"; //完全に合法
char* pc;
pc = cc; //不適格
pc = "abc"; //CとC++98では非推奨、C++11以後では不適格
pc = &"abc"[0]; //左辺値変形でこう解釈されていて
非constへのポインタに、constへのポインタを代入することになり、
暗黙のconst外しにあたるので、C++11が正論
pc = const_cast<char*>("abc"); //C++11以後ではこう書く
473(1): 2018/03/07(水)17:54 AAS
>>472
それもだめじゃね?
const領域に非constでアクセスするなんて罪深いことなんだから、ちゃんと別領域にコピーしてから扱わないと。
474(1): (ワッチョイ df80-zeCZ) 2018/03/07(水)18:18 ID:TnxtYBSc0(1) AAS
>>459
>char* pc = "abc";
文字列リテラルは不変だから、const を付けないといけない
古いライブラリで、const を付けていないものを動作させるために(互換性)、
例外的に使う場合だけに許される
>>463
>char* pc3 = 0; → OK
この0 は、数値型の0じゃない。
予約語を増やすのが嫌だから、= 0 と書いたら、特別な意味に解釈する。
分かりにくい、クソ仕様
省3
475: はちみつ餃子◆8X2XSCHEME (ワッチョイ bf6f-m1UI) 2018/03/07(水)18:49 ID:TWOfgg7C0(6/8) AAS
>>473
書き込まなければ問題は無い。
が、 const 外しが必要な状態ってのが良くないことは確か。
476(1): (ワッチョイ e75b-m1UI) 2018/03/07(水)20:52 ID:ylRgY7un0(4/6) AAS
>>474
いいや数値型の0だ
翻訳時に0と確定できる汎整数型の定数に限り
ポインタに暗黙変換できるという特例になっている
純粋仮想関数と関連付ける条項はない
477(2): (スップ Sdff-WWZl) 2018/03/07(水)22:07 ID:eXkgxxlqd(1/3) AAS
純粋仮想関数と関連付けてはいないだろう
それはともかくとして
char * p = 7-7; // no error
class T {
virtual void f() = 7-7; // error
};
となる気がするので言ってることは合ってるか
478: (ワッチョイ 5f7e-m1UI) 2018/03/07(水)22:10 ID:NKcGF/Sn0(1) AAS
C言語でNULLが0をdefineしたものだったというだけだろ
479(1): (スップ Sdff-WWZl) 2018/03/07(水)22:12 ID:eXkgxxlqd(2/3) AAS
C言語では ((void*)0) だった気がする
480: (ワッチョイ e75b-m1UI) 2018/03/07(水)22:34 ID:ylRgY7un0(5/6) AAS
>>477
7-7は定数式なので0と完全に等価
純粋仮想関数の = 0 はA.8のpure-specifierで=0という特定のスペルと規定されているので7-7がエラーになるのは当然
481: (スップ Sdff-WWZl) 2018/03/07(水)22:41 ID:eXkgxxlqd(3/3) AAS
いや疑問も呈していないし否定しているわけでもないのに当然と言われてもな…
482: (ワッチョイ e75b-m1UI) 2018/03/07(水)22:52 ID:ylRgY7un0(6/6) AAS
じゃあ何のために、7-7とか言い出したんだ?
483(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ bf6f-m1UI) 2018/03/07(水)23:02 ID:TWOfgg7C0(7/8) AAS
>>479
それはあかん。
ひょっとしたら古い処理系でやってるのはあるかもしれんが、
規格違反のはず。
484(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ bf6f-m1UI) 2018/03/07(水)23:12 ID:TWOfgg7C0(8/8) AAS
>>483
と、思って調べてたんだけど、 C++ だと確実にあかんようだけど C だとアリなのかもしれない。
485: (ワッチョイ 078a-Jyeh) 2018/03/07(水)23:58 ID:/Jrz1mw60(1) AAS
offsetof()がどう実装されているかやね
486: (ワッチョイ 6a33-hn8E) 2018/03/08(木)02:18 ID:BQ11IIJi0(1) AAS
>>476-477
C++14 からリテラルだけに限定されてるよ。
外部リンク:d.hatena.ne.jp
487: はちみつ餃子◆8X2XSCHEME (ワッチョイ 666f-uQtz) 2018/03/08(木)03:31 ID:+04GXVK30(1/2) AAS
おっ、こんな基本的なことで変更が入ってたのか。
でも当然といえば当然の処置よな。
488: (ワッチョイ e6e7-frl3) 2018/03/08(木)06:41 ID:DSeYC6Qd0(1) AAS
Cの無意味な汚いゴミが掃除されるのは良いことだ
489(1): (ワッチョイ 7f23-6rgV) 2018/03/08(木)07:33 ID:dmEui5aT0(1) AAS
>>484
しっかりして
流石にこの件では C と C++ 混同されたら対話が成り立たないよ
490: (ワッチョイ 2a8f-HFNi) 2018/03/08(木)18:35 ID:uuOHCrug0(1) AAS
C++の勉強+機械学習も勉強しようとVisual Studio 2017でtiny-dnnを用いたいのですが、tiny-dnn内でコンパイルエラーが発生します。
具体的にはxcontainer.hpp内でC3203というエラーが頻発したり、feedfoward_layer.hppではC2760というエラーが発生したりしています。
環境はWindows 7でVisual Studio 2017 communityです。
プロジェクトはwindowsデスクトップアプリケーションを用いています。
tiny-dnnのインクルードはプロパティのインクルードディレクトリに追加しています。
どなたか心当たりのある方がいらっしゃれば教えていただけると嬉しいです。
491(4): (スプッッ Sd2a-dsCQ) 2018/03/08(木)19:27 ID:i2S5Knpdd(1) AAS
linux windows両対応のコードを考えている最中の質問です
unsigned int型の変数xの32bitに、char型の配列y[4]の8bit×4を当て込みたいです
y[0]から順にxの先頭ビットに入れたいのだけど
そういう時はどのようなコードになるのでしょうか
符号の問題で単純に24bitシフト+16bitシフト...みたいなことをすると期待の値にならないときが存在してます
492: (アウアウカー Sa7b-ccCq) 2018/03/08(木)19:50 ID:2k5PL6f/a(1) AAS
unionでどう?
493: (スッップ Sd8a-6rgV) 2018/03/08(木)20:26 ID:FhiFltVyd(1/2) AAS
>>491
シフトする前にunsigned charにキャストする
494: (スッップ Sd8a-6rgV) 2018/03/08(木)20:29 ID:FhiFltVyd(2/2) AAS
参考
外部リンク:stackoverflow.com
495: はちみつ餃子◆8X2XSCHEME (ワッチョイ 666f-uQtz) 2018/03/08(木)22:47 ID:+04GXVK30(2/2) AAS
>>489
スマソ
496(3): (ワッチョイ caaf-+ocK) 2018/03/09(金)11:50 ID:XHk1xHdH0(1/2) AAS
ヘッダーファイルの関数定義から関数ポインタをtypedefする事は可能ですか?
C++98辺りのコンパイラです。
497: はちみつ餃子◆8X2XSCHEME (ワッチョイ 666f-uQtz) 2018/03/09(金)12:25 ID:nl8HCt1x0(1/2) AAS
>>496
昔の C++ には decltype が無いもんな。
出来ないと思うよ。
498(1): (スップ Sd2a-O8QP) 2018/03/09(金)12:57 ID:zqzgOSq4d(1) AAS
テンプレート使えないかな?
499: (ワッチョイ caaf-J0+d) 2018/03/09(金)13:06 ID:XHk1xHdH0(2/2) AAS
出来ませんか。ありがとう。
再定義が面倒だったので楽したいだけだったんですけどね。
500: はちみつ餃子◆8X2XSCHEME (ワッチョイ 666f-uQtz) 2018/03/09(金)13:35 ID:nl8HCt1x0(2/2) AAS
>>498
その手があったか。
でも C++98 で自動で推論させようとするとヘルパー関数を使う必要があるじゃろ。
意味のないオブジェクト生成 (最適化で消えるかもしれんけど) がださい感じはするよね。
501: (ドコグロ MM8a-3fsH) 2018/03/09(金)19:06 ID:CekgNpjOM(1) AAS
>>496
たくさんあるなら
> ヘッダーファイルの関数定義から関数ポインタをtypedefする
コードを生成するツールを作るとか
502: 2018/03/09(金)22:17 AAS
>>496
マクロ駆使すれば
TYPEDEF_FUNC_DECL(なんちゃら);
FUNC_DEF(かんちゃら)
{
return;
}
みたいな書き方できないのかな?
なんちゃらは識別名と戻り値と引数
かんちゃらは識別名を指定するイメージ
503(1): (ワッチョイ 0b9f-uQtz) 2018/03/09(金)23:46 ID:yn7GHiyb0(1) AAS
>>491
unsigned int x;
char y[4];
.
.
.
memcpy(&x, y, 4);
504: (ワッチョイ 4abd-RZSe) 2018/03/09(金)23:57 ID:5+PoAx/E0(1) AAS
>>491
xの先頭ビットとはMSBなのかLSBなのか
505: (スップ Sd2a-6rgV) 2018/03/10(土)00:45 ID:8ENKFfsbd(1) AAS
メモリ上でのレイアウトとかもあるのでuint8_t経由でのシフトがいい
クロックが(メモリアクセスが問題にならない程)低くてシフトが遅いマイクロプロセッサは別
506(1): 2018/03/10(土)04:49 AAS
>>503
x = ntohl(x);
も忘れずに
507: (ワッチョイ 6a34-e70/) 2018/03/10(土)06:32 ID:Tg3hDFxK0(1) AAS
>>491
先頭ビットって32ビット目のことか?
508: (ワッチョイ 0b9f-RK0z) 2018/03/10(土)17:21 ID:a2p+alti0(1) AAS
>>506
それが必要になるかどうかは場合による。
509: ◆QZaw55cn4c (ワッチョイ 8a60-hn8E) 2018/03/10(土)17:42 ID:+Ww908Qw0(1/2) AAS
ネットワークバイトオーダーがここで関係あるのだろうか?
510: 2018/03/10(土)19:22 AAS
>unsigned int型の変数xの32bitに、char型の配列y[4]の8bit×4を当て込みたいです
>y[0]から順に
っていう要件だから、ホストバイトオーダーがビッグエンディアンかリトルエンディアンか分からない以上は常にntohlを付けるべき
511: 2018/03/10(土)19:24 AAS
char y[4] = { 0x12, 0x34, 0x56, 0x78 };
unsignd in x = 0x12345678;
これを等価にしたいという意味だろうから。
512(2): (ワッチョイ fb93-Ni5c) 2018/03/10(土)21:52 ID:My21AM/A0(1/2) AAS
独習c++終わりそうなんだが次によむべき本とかある?
513(1): ◆QZaw55cn4c (ワッチョイ 8a60-hn8E) 2018/03/10(土)22:03 ID:+Ww908Qw0(2/2) AAS
>>512
2chスレ:tech
あと STL の教科書、これもC++11以前のもの
外部リンク:www.amazon.co.jp
514: (ワッチョイ 8af9-G5w4) 2018/03/10(土)22:09 ID:Tk41qGXE0(1) AAS
本ばかり読まず実践しよう
515: (ワッチョイ da7e-uQtz) 2018/03/10(土)22:09 ID:lWictyCS0(1) AAS
>>512
cpprefjp
516: (ワッチョイ 260e-hn8E) 2018/03/10(土)22:28 ID:tBgkA+tH0(1) AAS
プログラミング言語C++とかどうやろ
517: (ワッチョイ fb93-Ni5c) 2018/03/10(土)22:50 ID:My21AM/A0(2/2) AAS
ありがとうございます
ひとまず>>513の本にしてみます
518: (ワッチョイ da7e-uQtz) 2018/03/11(日)00:41 ID:6KlfnVLZ0(1/5) AAS
そういえば最新版のEffective STLみたいな本って無いのか?
519: (ワッチョイ 6a34-e70/) 2018/03/11(日)00:53 ID:Bd/2u4u/0(1/3) AAS
あると思うが訳者がへたくそで右辺値左辺値あたり意味ワカランかったぞ
520: (ワッチョイ 6a34-e70/) 2018/03/11(日)00:57 ID:Bd/2u4u/0(2/3) AAS
その辺りの参考にするなら下手な日本語文献探るよりか英文そのまま読んだ方がいい希ガス
なんでもかんでも日本語訳してあるとほんと意味ワカランから
521: (ワッチョイ 7323-Ik1A) 2018/03/11(日)01:11 ID:n48SUKtd0(1) AAS
cpprefjpのstd::min_elementとstd::max_elementの例文が間違ってるので誰か直してください。
自分はGitHubのアカウント持ってないので編集できません。
外部リンク[html]:cpprefjp.github.io
外部リンク[html]:cpprefjp.github.io
誤:return a > b;
正:return a < b;
522: (ワッチョイ 0b9f-uQtz) 2018/03/11(日)01:22 ID:ry5KQfC80(1) AAS
unsigned int x;
char y[4];
.
.
.
x = ((y[0] & 0xff) << 24) | ((y[1] & 0xff) << 16) | ((y[2] & 0xff) << 8) | (y[3] & 0xff);
523: (ワッチョイ 6a80-csLy) 2018/03/11(日)01:34 ID:P1lOCLpn0(1) AAS
Scott Meyers
Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)、2014
Effective Modern C++ ―C++11/14プログラムを進化させる42項目、2015
Effective C++ は、昔の本のリバイバルかな?
内容が新しいかどうかまでは、分からないけど
524: (スップ Sd2a-A/UC) 2018/03/11(日)08:34 ID:XWEx9Mlwd(1/3) AAS
テンプレートを使ったメタプログラムの有用性が分からん。コンパイル時処理で定数の階乗を計算してるけど実行時に値を変えれないなら、答えをベタ書きすればいいだけでは?
525: (アウアウカー Sa7b-7AdS) 2018/03/11(日)08:43 ID:zMqNV6vza(1/3) AAS
その値をベタ書きする手間をコンパイラにまかせることが出来るのが利点だと思うよ。
526(1): (スップ Sd2a-A/UC) 2018/03/11(日)08:48 ID:XWEx9Mlwd(2/3) AAS
3の階乗を、tmpするより6とタイプした方が早いだろ
527: (ワッチョイ da7e-uQtz) 2018/03/11(日)09:03 ID:6KlfnVLZ0(2/5) AAS
>>526
3ならいいけど10の階乗は?15の階乗は?21の階乗は?
それは整数型で表現できるか?
それは何桁になるのか?
適切な型をどうやって選ぶのか?
その値を静的な配列のサイズにしたいが数値を変えるたびに電卓で計算はしたくない
ならばfactorial<N>::valueと表現できれば便利ではないか
ということ
528: (ワッチョイ fb7f-uQtz) 2018/03/11(日)09:03 ID:0BygLdlM0(1/2) AAS
その3という数値が別のファイルの特定の値に依存してる場合もあるし
529(2): (ワッチョイ da7e-uQtz) 2018/03/11(日)09:08 ID:6KlfnVLZ0(3/5) AAS
意地悪するのはこの辺にしておいて
それはメタプログラミングでこいういうこともできるよ程度のものにすぎない
テンプレートメタプログラミングとはテンプレートを使ってソースコードを生成することだ
ソースコードを作るためのプログラミングだと思ってくれてかまわない
一般的な目的としてはジェネリックプログラミングを実現するために使われる
標準ライブラリではvectorからchoronoやtupleまでテンプレートメタプログラミングありきの設計になっている
530: (アウアウカー Sa7b-7AdS) 2018/03/11(日)09:08 ID:zMqNV6vza(2/3) AAS
値が小さいうちはそうかもしれんが16の階乗とか値が大きくなってもベタ書きが良い?
ちなみにconstexprが使えるc++11以降の話と考えてOK?
531: (ワッチョイ e6e7-frl3) 2018/03/11(日)10:19 ID:i1Cv6XBY0(1/3) AAS
階乗の例はいい例とは言えんな
TMPで操作したいのはメインは型の方だからな
値も出来るよって例が階乗なだけで
532(1): (ワッチョイ 6ab3-3fsH) 2018/03/11(日)10:40 ID:z1FVyjSJ0(1/2) AAS
>>529
> ソースコードを作るためのプログラミングだと思ってくれてかまわない
そこまでやるならPL/Iみたいに%FOR %SELECTみたいな普通の制御構文で書ける方がいいわ
533: (アウアウカー Sa7b-7AdS) 2018/03/11(日)10:50 ID:zMqNV6vza(3/3) AAS
そんな貴方にtemplate+constexpr(c++14以降)
534(1): (ワッチョイ da7e-uQtz) 2018/03/11(日)10:58 ID:6KlfnVLZ0(4/5) AAS
>>532
頑張って古代人用のコンパイラ作ってくれ
535(1): (ワッチョイ 6ab3-3fsH) 2018/03/11(日)11:03 ID:z1FVyjSJ0(2/2) AAS
>>534
お前アホだろ w
方向性がおかしいって話だぞ
536(1): (ワッチョイ da7e-uQtz) 2018/03/11(日)11:13 ID:6KlfnVLZ0(5/5) AAS
>>535
現代の言語でジェネリクスをサポートするのは一般的
テンプレートをこねくり回して整数演算をするのはおかしいという意味なら、普通の構文で書けるconstexprが追加されたからそっちを使うように
537: (ワッチョイ 4abd-RZSe) 2018/03/11(日)11:58 ID:TvwI/h8S0(1/2) AAS
テンプレートで再帰ができたらナア…('A`)
538: (ワッチョイ 4abd-RZSe) 2018/03/11(日)12:00 ID:TvwI/h8S0(2/2) AAS
とわいいつつ、実はC++のテンプレートはチューリング完全になってしまっていた(らしい
外部リンク[html]:cpplover.blogspot.jp
539: (ドコグロ MM8a-3fsH) 2018/03/11(日)12:05 ID:93lmuZEGM(1) AAS
>>536
costexprで階乗書いてみてから言えよ
540(1): (ワッチョイ e6e7-frl3) 2018/03/11(日)16:36 ID:i1Cv6XBY0(2/3) AAS
constexpr unsigned long long factorial(int n){
unsigned long long r=1;
for(int i=1;i<=n;++i){r*=i;}
return r;
}
うん、簡単だね!
541: (ワッチョイ 6a34-e70/) 2018/03/11(日)16:41 ID:Bd/2u4u/0(3/3) AAS
毎回毎回コンパイラが計算するのか
542: (ワッチョイ 4acb-dpuX) 2018/03/11(日)17:05 ID:6zDmjp+70(1) AAS
たまにソースコードを見て、あ、この数字なんだっけって考えるよりも
10000回コンパイルさせるほうが早いと思うよ
543: (ワッチョイ 7e32-uQtz) 2018/03/11(日)17:18 ID:Dtt3qpb50(1) AAS
マジックナンバーの本質
544: 片山博文MZ◆T6xkBnTXz7B0 (スフッ Sd8a-f9jl) 2018/03/11(日)17:51 ID:4ez4tjCrd(1/2) AAS
>>540
オーバーフローのチェックがないからやり直し。
545: (ワッチョイ e6e7-frl3) 2018/03/11(日)18:36 ID:i1Cv6XBY0(3/3) AAS
はーい
constexpr unsigned long long unsafe_factorial(int n){
unsigned long long r=1;
for(int i=1;i<=n;++i){r*=i;}
return r;
}
constexpr int min_factorialable(){
for(int i=1;;++i){
if(unsafe_factorial(i) > unsafe_factorial(i+1)){ return i; }
}
省5
546: (ワッチョイ 2fe3-uQtz) 2018/03/11(日)18:40 ID:i3q5YI3y0(1) AAS
コンパイルエラーになるほうがいいなぁ
547: 片山博文MZ◆T6xkBnTXz7B0 (スフッ Sd8a-f9jl) 2018/03/11(日)19:45 ID:4ez4tjCrd(2/2) AAS
static_assert使え。
548(3): (スップ Sd2a-A/UC) 2018/03/11(日)20:16 ID:XWEx9Mlwd(3/3) AAS
>>529
実行時計算で答え算出してそれを貼った方が楽じゃね?
549: (ワッチョイ 8af9-G5w4) 2018/03/11(日)21:15 ID:ezoYy+fr0(1) AAS
>>548
それで事足りるケースならそれでいいよ
550: (ワッチョイ fb7f-uQtz) 2018/03/11(日)21:19 ID:0BygLdlM0(2/2) AAS
>>548
なんでそんなめんどくさくてミスしそうな方法をチョイスするんだよ
551: 2018/03/12(月)01:21 AAS
>>548
計算&書き換え手順をマニュアル化して、何十種類の仕向け別にバージョンアップの度に人海戦術で計算&書き換え&コードレビュー&テストするんですね、わかります
552: (ワッチョイ fb93-ao9L) 2018/03/12(月)05:00 ID:kBVT8YZa0(1) AAS
min_factorialable() は、階乗を正しく計算できる最大の値を返す
constexprな関数(コンパイル時にint定数に置き換えられることを期待)、
と読み取ったんだけど、なぜにmin_なの?
上下前次1-新書関写板覧索設栞歴
あと 450 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.039s