C++相談室 part137 ..
[2ch|▼Menu]
433:デフォルトの名無しさん
18/09/14 22:05:22.67 fXySkelb0.net
まず低学歴知恵遅れは日本語を読解する能力がない
ものごとも抽象的にみる能力もない
つまり認知機能に著しい欠陥がある

434:デフォルトの名無しさん
18/09/14 22:05:58.57 BDjkgOYf0.net
ID真っ赤にして火病起こしたか

435:デフォルトの名無しさん
18/09/14 22:06:56.64 fXySkelb0.net
静的にどう置換されるかコンパイル時に決定されてるからな
このスレに池沼たちは、いつもなにをいってるか意味不明なワケ

436:デフォルトの名無しさん
18/09/14 22:07:36.57 YK4Q2JFR0.net
>>420
こういうtypoをツッコむのは本来嫌いなんだが、せっかく燃料投下してくれたお礼に一応指摘。
「グローバルを定数値をもたせたい」
毎回言うけど、C言語の前に日本語勉強したほうがええで。

437:デフォルトの名無しさん
18/09/14 22:09:30.41 fXySkelb0.net
低学歴知恵遅れが指摘できるのはこの程度
自分の著しい頭の悪さを棚にあげるからな
グローバルに定数値をもたせたい
とまともな日本語読解能力があれば
普通に読めるからな

438:デフォルトの名無しさん
18/09/14 22:10:14.11 fXySkelb0.net
ともかくとてつもなく頭悪い
しかもとてつもなく頭悪いという自覚がない

439:デフォルトの名無しさん
18/09/14 22:10:23.49 YK4Q2JFR0.net
>>426
よしよし、今日は素直でよろしい。

440:デフォルトの名無しさん
18/09/14 22:11:29.39 fXySkelb0.net
で、オマエは自分の頭が
とてつもなく頭悪いのは自覚してんか
ゴミでクズな人間であることも自覚できてんのか

441:デフォルトの名無しさん
18/09/14 22:12:33.95 YK4Q2JFR0.net
さすがにもうワンパターンで飽きてきた。
もっと違う煽り方考えてよ。
ツンデレ的なのはどう?

442:デフォルトの名無しさん
18/09/14 22:14:52.54 fXySkelb0.net
煽り?
まず事実だからな
バカは自分がバカである自覚がない
だからバカが直らない
すべてゴミでクズな人間性の問題
ゴミクズには内省というもんがない

443:デフォルトの名無しさん
18/09/14 22:18:12.66 YK4Q2JFR0.net
最初は褒めて褒めて褒めちぎった上でミスリードを誘い、その上でボロクソに貶すとかどう?
さすがに皆そのやり方は飽き飽きしてるよ。

444:デフォルトの名無しさん
18/09/14 22:34:27.68 5DPUkElZ0.net
子猫がかわいくて甘噛みされたらちょっと叩いたあとで頭なでなでしてたら
大人になっても強くかむようになって困ったのを思い出した
なんだかなあ

445:デフォルトの名無しさん
18/09/15 00:40:17.11 KIanXBkQ0.net
オレはこんなことはしてないからな
                        タカイ
                     ∧_∧ タカーイ
                  m⊂(´・ω・)⊃
                ⊂c  ノ__  ノ
             /⌒ヽ  | .|  | .|                /⌒ヽ
            ( ^ω^) i i二 .ノ               _( ^ω^) il|   死ね
          (´  二二二 ノ                (´ \   \|il |il il|
         /    /:                  /  \. \ノ\. \il| |il|
        i===ロ==/                   i===ロ== ヘ. \. i|!l !l\il|
       ノ:::::::::::::::::ヽ                  ノ:::::::::::::::::ヽ \ ヽη /')/')
      /:::::::::::へ:::::::::ヽ                /:::::::::::へ:::::::::ヽ  ヽ_,,..)  /
     /::::::_/   \:::::::)              /::::::_/   \:::::::)   )  ( / /
   /::_ '´      |::::|            /::_ '´      |::::| ⊂(v   )⊃
   レ          しつ           レ          しつ`) \ 〆 (´ ̄           
                                         /⌒Y⌒ヽ
ただの被害妄想
オレは事実を書き込んでるだけだからな
まず事実が事実であることを自覚するところから


446:デフォルトの名無しさん
18/09/15 01:10:27.96 FCP8vuXka.net
バイナリファイルの読み書きはfstreamとFILEどちらがオススメですか?

447:デフォルトの名無しさん
18/09/15 01:53:04.57 wlkSFfZ20.net
#include <iostream> is Forbidden

448:デフォルトの名無しさん
18/09/15 04:03:10.64 x4qTic2YM.net
FILE

449:デフォルトの名無しさん
18/09/15 06:14:52.60 /OsufeBT0.net
>>407 を虚心坦懐に読めば
「#defineじゃ定数値しか作れんのだから変数にする以外ない」
という身も蓋もない答えもありうるわな。
さすがにそんな揚げ足取りをする人はいないみたいだけど。
プログラム全体で参照する定数値をconstのグローバル変数にするか
#defineにするか、なら一般的にはconst変数の方が好まれるかな。
const変数の利点と言うより、#defineの弊害を避けるためって理由で。
その定数が整数値なら enum class も候補に入れてくれ。
static_castが面倒臭いかも知れんけど。

450:デフォルトの名無しさん
18/09/15 08:40:54.56 8TAknpK9d.net
ここまでconstexpr1つもなしなのはみんな意図的?

451:デフォルトの名無しさん
18/09/15 09:11:50.04 pVwVWDM8M.net
>>439
つ 408

452:デフォルトの名無しさん
18/09/15 09:12:10.24 hHXkfIbs0.net
>>439 >>408

453:デフォルトの名無しさん
18/09/15 09:39:05.72 u2jcQID60.net
整数の定数くらいならconstexpr付けても付けてなくても大して変わらなくない?
const int n = 42; と constexpr const int n = 42; って何が違うの
どっちも定数式文脈で使えるでしょ

454:デフォルトの名無しさん
18/09/15 10:09:16.49 8TAknpK9d.net
>>440
>>441
節穴だった申し訳

455:デフォルトの名無しさん
18/09/15 10:28:10.96 wlkSFfZ20.net
constexpってクソださい仕様だよな
勝手に推論して最適化しとけや

456:デフォルトの名無しさん
18/09/15 11:23:26.53 oMwX4DqWa.net
>>438
関連性のある定数群をまとめる為にはスコープがあるenum classはいいんだけど、
フラグとして使うのが難しいのがちょっと難点
enum class PNG_COLOR_MASK: uint8_t{
GRAY = 0b000,
PALETTE = 0b001,
RGB = 0b010,
ALPHA = 0b100
}
enum class PNG_COLOR_TYPE: uint8_t{
GRAYSCALE = PNG_COLOR_MASK::GRAY,//できない
RGBA = PNG_COLOR_MASK::RGB | PNG_COLOR_MASK::ALPHA//できない
}

457:デフォルトの名無しさん
18/09/15 14:56:24.44 u2jcQID60.net
フラグとして使うならoperator|と&をオーバーロードするのが良いけど面倒だね
PNG_COLOR_MASK operator|(PNG_COLOR_MASK e1, PNG_COLOR_MASK e2)
{
 using u_t = typename std::underlying_type<PNG_COLOR_MASK>::type;
 return PNG_COLOR_MASK((u_t)e1 | (u_t)e2);
}

458:デフォルトの名無しさん
18/09/15 15:34:42.86 oMwX4DqWa.net
ここまでやって更にstatic_castも必要となるという。

459:デフォルトの名無しさん
18/09/15 16:32:07.11 I8Ewbo070.net
>>444
むしろ俺はコンパイラでやらずビルドシステムで対応すべきことだと思っているが。
なんでもコンパイラに押し込もうとする悪しき風習に思う。

460:デフォルトの名無しさん
18/09/15 19:18:14.78 XFoW6siK0.net
fstreamでも結局writeするのでFILEと比較して都合のいい方を選べばいいよ。

461:438
18/09/15 19:36:37.14 /OsufeBT0.net
enum class はスコープを限定できる代わりに、個別の型として
ガチガチに保護されるせいで数値として使いにくい欠点はあるね。
namespace PNG_COLOR_MASK {
 enum {
  GRAY = 0b000,
  PALETTE = 0b001,
  RGB = 0b010,
  ALPHA = 0b100,
 };
}
 int grayscale = PNG_COLOR_MASK::GRAY;
 int rgba = PNG_COLOR_MASK::RGB | PNG_COLOR_MASK::ALPHA;
こんな感じにnamespaceで名前なしのenumを囲むか。
素直にconstexprを使えばいいんだけど、C++11以前でも可というニッチな提案。


462:デフォルトの名無しさん
18/09/15 20:20:12.42 MJTXjpFoa.net
その場合structで囲むのもありだね。二進数リテラルはC++11以前では拡張だけど。

463:デフォルトの名無しさん
18/09/15 21:04:37.66 V75GOAR/a.net
>>446の案を利用(C++17以降?)
URLリンク(wandbox.org)

464:デフォルトの名無しさん
18/09/15 21:10:11.77 V75GOAR/a.net
少し修正
URLリンク(wandbox.org)

465:デフォルトの名無しさん
18/09/15 22:39:15.30 oE5p8K2a0.net
ようわからんがプログラムを書き始めた当初
#define CONST_A 3
だったものを
extern int g_varA = 3;
#define CONST_A g_varA
とすれはCONST_Aは一瞬で値を変更可能な「変数」g_varAに設計変更になれるキモス
(CONST_Aは定数のつもりだったが後から変数に変えたくなった場合
ただしそうしてしまうとプログラムのどこでも書き換えられてしまって危険極まりないので、
めんどくさくない限りシングルトンすべしという神の啓示に聞こえなくも無い
プログラム起動時のみに値を設定する目的であってプログラム動作中は定数扱いなのだとすれば、
シングルトンのマルチスレッド対応は特に何もしなくても良い(クリチカルセクションやミューテック巣やLOCKとか不要
まあ質問に対しては例の図画の「営業の約束」の類やな

466:デフォルトの名無しさん
18/09/15 22:48:41.06 VQoTXRx30.net
2進数書けないのは不便だと昔からおもてた

467:デフォルトの名無しさん
18/09/15 22:56:14.72 oE5p8K2a0.net
接頭辞0bというのは十六進数と紛らわしいから02にしよう

468:さまよえる蟻人間
18/09/15 22:58:34.46 2Qh39GgFd.net
02だと、8進とかぶっちゃうよ。

469:デフォルトの名無しさん
18/09/15 23:02:11.85 bZY/rtks0.net
8進がおかしい
0Oにしろ

470:デフォルトの名無しさん
18/09/15 23:06:12.86 oE5p8K2a0.net
二進数が書けたら書けたで、長ったらしくなるから桁区切りを入れさせろという要求が出るのは必至
犯人の要求はエスカレートする一方や

471:デフォルトの名無しさん
18/09/15 23:07:07.35 5HUBWRKg0.net
誰かが仕込んだバグ以外で8進数が使われてるところを見たことがない。
パメ族以外で8進リテラル使ってるやつなんているのか?

472:デフォルトの名無しさん
18/09/15 23:07:30.30 V75GOAR/a.net
C++14で桁区切りも対応してるぞ

473:デフォルトの名無しさん
18/09/15 23:17:11.26 xQnt+Dhj0.net
>>458
賛成!

474:さまよえる蟻人間
18/09/15 23:29:24.44 2Qh39GgFd.net
ダブルオー

475:デフォルトの名無しさん
18/09/15 23:35:07.74 VQoTXRx30.net
マイコンベーシックで2進数のドット絵キャラを見たときは笑劇だった

476:デフォルトの名無しさん
18/09/16 00:46:24.98 JK7FzOgWM.net
>>461
アポストロフィーがどうにも気持ち悪くて…
慣れるのかね、そのうち

477:デフォルトの名無しさん
18/09/16 06:21:32.85 TERwdiOQ0.net
int a = 123; // a = 123
int b = 0123; // b = 83
ほんとクソ仕様だなこれ

478:デフォルトの名無しさん
18/09/16 06:35:39.96 Ch2PxBqj0.net
桁区切りってISOにのっとってるの?
国によって違うけど対応してるの?

479:デフォルトの名無しさん
18/09/16 06:35:52.88 NJnAChO90.net
Unix系のファイルパーミッションは今でもしぶとく8進数だよな
大嫌いだからあの習慣早く滅亡して欲しい

480:デフォルトの名無しさん
18/09/16 07:40:39.31 R+r0qoR6M.net
>>467
可読性を高めるためのもの
コンパイラはただ読み飛ばすだけなのでお好きな記方でどうぞ
だったはず

481:デフォルトの名無しさん
18/09/16 08:43:28.35 +ao0anr70.net
>>460
unix のファイルパーミッションが3bit単位だから昔のソースではcreat()の引数に0755とか0644とか普通に書かれてる
てかそのための8進数だと思う

482:デフォルトの名無しさん
18/09/16 08:47:08.77 SOVIz+sV0.net
rwxrwxrwx
421421421
8進数なのはアタリマエ
8進数以外で表現しようがない

483:デフォルトの名無しさん
18/09/16 09:04:46.04 J7jkqE/NM.net
intelチップのマシンコードは3bit単位で意味が変わるから
ハンドアセンブル出来るひとは普通8進数使えるよ

484:デフォルトの名無しさん
18/09/16 09:08:16.62 NJnAChO90.net
stickyビットとかsetuidビットとか増えてるから本来はもう8進数じゃ足りないんだぞ
未だに引きずられて無理矢理8進数で表現してるのは害悪だから

485:デフォルトの名無しさん
18/09/16 09:14:30.28 lOWFqhA+0.net
>>465
気持ち悪いよな
アンダースコアでよかったのに何でって思う

486:デフォルトの名無しさん
18/09/16 09:19:40.62 yGlb1wug0.net
どっかに書いてあった。ユーザー定義リテラルと衝突するんだと。

487:デフォルトの名無しさん
18/09/16 09:20:40.61 AHKBmQkKa.net
ユーザー定義リテラルが先にきてて、アンダースコアだと重複してしまうから。
案としてはアンダースコアも出てたはず。

488:デフォルトの名無しさん
18/09/16 09:24:34.63 AHKBmQkKa.net
これやな。
URLリンク(cpprefjp.github.io)

489:デフォルトの名無しさん
18/09/16 09:30:17.66 Z6oeOzwN0.net
日本の数勘定として、3桁区切りより4桁区切りのほうが良いと思うの。
100,000,000と書いててもぱっと1億って分からん。
1,0000,0000のほうが分かりやすい。
ってC言語関係ないけど。

490:デフォルトの名無しさん
18/09/16 09:40:48.27 M63m8fL00.net
>>478
万事、英米基準だから…

491:デフォルトの名無しさん
18/09/16 10:16:56.42 lOWFqhA+0.net
operator "" _000 () みたいなアホなこと書かれかねないからか
なるほどthx

492:デフォルトの名無しさん
18/09/16 11:19:42.15 +ao0anr70.net
>>471
4bit区切りでいいだろ
4bit目は予備として0固定にしちゃえばいいだけ

493:デフォルトの名無しさん
18/09/16 11:23:02.16 +ao0anr70.net
>>465, >>474
URLリンク(askul.c.yimg.jp)

494:デフォルトの名無しさん
18/09/16 14:03:39.12 cGCWO0MtH.net
>>478
一億ってかけ
それ以外は認めん

495:はちみつ餃子
18/09/16 14:41:57.29 iD6L9h5X0.net
ユーザー定義リテラルで 1_億 みたいには書けるじゃろ

496:デフォルトの名無しさん
18/09/16 14:43:54.49 lOWFqhA+0.net
constexpr unsigned long long operator "" _\u5104 (unsigned long long val)
{
return val * 10000 * 10000;
}

497:デフォルトの名無しさん
18/09/16 14:58:07.76 lOWFqhA+0.net
// Header <japanese> synopsis
constexpr unsigned long long operator "" _\u4e07 (unsigned long long);
constexpr unsigned long long operator "" _\u5104 (unsigned long long);
constexpr unsigned long long operator "" _\u5146 (unsigned long long);
constexpr unsigned long long operator "" _\u4eac (unsigned long long);
constexpr unsigned long long operator "" _\u5793 (unsigned long long);
constexpr unsigned long long operator "" _\u25771 (unsigned long long);
constexpr unsigned long long operator "" _\u7a63 (unsigned long long);
constexpr unsigned long long operator "" _\u6e90 (unsigned long long);
constexpr unsigned long long operator "" _\u6f97 (unsigned long long);
constexpr unsigned long long operator "" _\u6b63 (unsigned long long);
constexpr unsigned long long operator "" _\u8f09 (unsigned long long);
constexpr unsigned long long operator "" _\u6975 (unsigned long long);
constexpr unsigned long long operator "" _\u6052\u6cb3\u6c99 (unsigned long long);
constexpr unsigned long long operator "" _\u963f\u50e7\u7947 (unsigned long long);
constexpr unsigned long long operator "" _\u90a3\u7531\u4ed6 (unsigned long long);
constexpr unsigned long long operator "" _\u4e0d\u53ef\u601d\u8b70 (unsigned long long);
constexpr unsigned long long operator "" _\u7121\u91cf\u5927\u6570 (unsigned long long);

498:デフォルトの名無しさん
18/09/16 15:01:20.18 AX2qPX270.net
mjk

499:デフォルトの名無しさん
18/09/16 15:13:55.06 NJnAChO90.net
まあ64bit整数は垓でオーバーフローしちゃうけどな

500:デフォルトの名無しさん
18/09/16 15:19:22.27 un+A0LAL0.net
アンダーバー必須?

501:デフォルトの名無しさん
18/09/16 15:23:34.17 PDH9z/EW0.net
予約語なのでユーザー定義リテラルをユーザー定義するときはないとダメ

502:デフォルトの名無しさん
18/09/16 20:49:23.78 ecoXNuEUM.net
>>482
あー、既視感はこれか…

503:デフォルトの名無しさん
18/09/16 21:37:31.50 Lm7yQOTf0.net
全然関係ない話だが
めんどくさいC,C++を習得すると
他言語学習が簡単に進む

504:デフォルトの名無しさん
18/09/16 21:46:28.57 h2MQFGAYM.net
>>492
つ VLIW

505:デフォルトの名無しさん
18/09/16 23:31:10.84 V0g35lEl0.net
他言語すべてがザコに見える
特にJAVA

506:デフォルトの名無しさん
18/09/17 00:00:35.54 x38HLuISM.net
多言語使いは問題解決能力が無いのに偉そう
特にJava

507:デフォルトの名無しさん
18/09/17 07:23:44.67 EVO8AkN40.net
ところで、C++ってどんな開発に使ってるの?
Linuxのアプリ以外で。

508:デフォルトの名無しさん
18/09/17 07:48:33.15 oxQatDsR0.net
URLリンク(github.com)
こんな感じの物が作れるようになった。win32apiだ。
コアはそれなりにできたが、UI作ろうとしたらバグで死亡ちゅう。テストは良いけど過信しないで。
VBとかC#のビジュアル開発がどれだけ楽か身に染みてきた。
ところで、[0,1]の引数のみで使える面白関数しらないかい?
logとかは線形な気がするのでもっとおかしな奴ないかい?

509:デフォルトの名無しさん
18/09/17 09:36:25.88 dZ3SMulNa.net
edcb

510:デフォルトの名無しさん
18/09/17 13:09:26.75 9OAi7Hbk0.net
>>496
アルゴリズムベンチマーク。
リークしててもそこまで問題にならんし、速度が実際どれくらい出るもんか調べるには良い。
まあcでも良さげな使い方ばっかだけど、namespaceとか多少ね。

511:デフォルトの名無しさん
18/09/17 14:24:16.64 zCVYDMXL0.net
>>496
速度が求められるアプリはC++でしょ
大規模データでシミュレーションとかJavaでは遅くて無理

512:デフォルトの名無しさん
18/09/17 14:39:27.45 r6sTx27/r.net
リークしてても?

リークしてても……?

513:デフォルトの名無しさん
18/09/17 14:44:25.11 zCVYDMXL0.net
>>501
そうだなw
盛大にリークしてたら速度にめちゃ影響するわな

514:はちみつ餃子
18/09/17 15:02:34.85 O6rb8eh90.net
ものすごい潤沢にメモリがあって処理が終わるまでに使い切ることがないという確信があれば
メモリを解放する処理を入れずに速度を優先することは無いわけではないと思うが、
それが妥当かどうかいちいち検討するコストをかけるくらいならちゃんと解放しておいた方がよろしい。

515:デフォルトの名無しさん
18/09/17 15:32:46.89 t936AOdi0.net
なんで速度を要する処理の途中でメモリを獲得するん?
なんで速度を要する処理の途中でメモリを獲得するん? 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)


516:デフォルトの名無しさん
18/09/17 16:08:31.17 0/ju7MLa0.net
>>503
「ものすごい潤沢」では意味がない
処理が終わるまでに最悪何バイト使う可能性があり、
実装されているメモリは何バイトなのか、
需要と供給の具体的な比較あるのみ

517:デフォルトの名無しさん
18/09/17 16:22:22.61 kSBsQrFK0.net
サーバープログラムみたいなもんだったら
リークしてたらどこでシステム停止するかわからんし大問題に繋がるだろうが、
てきとうなベンチマーク検証ならリークしようと最悪落ちようとそこまで支障をきたすわけじゃ無いってことだよ。
てか実際問題


518:サのくらい実験的な意味合いの強いものじゃ無いとc++は苦しい気がするんだが。



519:デフォルトの名無しさん
18/09/17 17:13:04.47 EVO8AkN40.net
C++の生産効率、バク埋め込み率、デバックのしにくさを考えると、積極的にC++を採用すべき分野って限られてくるよね。
組み込みやドライバではCが主流だし、WindowsやスマホではほぼC++は使われないし、Webの世界ではスクリプト言語だし、計算分野ではPythonやMatlabやMathmaticaだし。
仕事でC++使う機会は最近めっきり減ったわ。

520:デフォルトの名無しさん
18/09/17 17:37:23.45 3kd9gc670.net
スマポとSTL使ってればリークなんかそうそう起こらんだろ
古臭いC++のイメージで語らないほうが良いよ爺さま方

521:デフォルトの名無しさん
18/09/17 17:41:18.57 qtGPC3c90.net
スマポと言っても一秒間に数千回数万回の確保とかしてたら流石に遅くなるんじゃね?

522:デフォルトの名無しさん
18/09/17 17:53:56.99 3kd9gc670.net
unique_ptrはナマポ使ってるのと一緒よ

523:デフォルトの名無しさん
18/09/17 17:55:45.86 SBpxj18K0.net
>>509
そんな機会はめったにないし、万が一あったらそこだけナマポとかで対処できるのはC++だけ

524:デフォルトの名無しさん
18/09/17 18:07:37.03 r6sTx27/r.net
>>502
いや、どんな場合でもリークしないように書けよと思って引っかかった

525:デフォルトの名無しさん
18/09/17 18:19:02.17 GutZ/6rY0.net
まあ趣味でない限り実用度が学習コストに見合わない感じはあるな
他に比べて

526:デフォルトの名無しさん
18/09/17 18:20:26.64 zCVYDMXL0.net
オブジェクトを1個1個newする?
でかいデータだと大量にnewするオブジェクトだったら配列で1MBとかまとめてnewしないと遅いでしょ

527:デフォルトの名無しさん
18/09/17 18:42:32.24 CEV1V8yd0.net
メモリ解放にも時間かかるけどそこは計測から外します
都合のいい計測をします

528:デフォルトの名無しさん
18/09/17 19:57:02.88 HG71i9DfM.net
>>508
それで安全になるかもしれないけど
コピーしまくり、newしまくりだったりとかよくあること
C++使う理由をよく考えたほうがいいと思うわ

529:はちみつ餃子
18/09/17 20:37:10.33 O6rb8eh90.net
>>516
ムーブの恩恵があるやで。

530:デフォルトの名無しさん
18/09/17 20:53:22.59 tpLtH4DE0.net
現代の C++ は処理系もライブラリもそれなりに賢いから、任せきりにしてもそれなりの効率になる。
ほとんど任せきりにできる高級言語としての面と、必要なとこは手動で書ける低級言語としての面を合わせ持つのが C++ の強み。

531:デフォルトの名無しさん
18/09/17 21:33:50.41 YgnM5prK0.net
>>512
お前は最低でも数万行くらいの規模のコード書いてから偉そうなことを言え

532:デフォルトの名無しさん
18/09/17 21:40:52.08 5VGXhp/T0.net
最近はC++もスマートポインタが主流で
メモリリークもツールでチェックすると聞いたが
現実はどんなもんなん

533:デフォルトの名無しさん
18/09/17 22:10:33.50 oxQatDsR0.net
VCには簡易メモリっチェックをするヘッダーがある。もちろん環境依存。
スマポでリークするのはかなり筋が悪い。

534:デフォルトの名無しさん
18/09/17 22:19:24.01 CEV1V8yd0.net
>>519
それはリークの言い訳にはならんで

535:デフォルトの名無しさん
18/09/17 22:33:55.31 SBpxj18K0.net
>>519
まあどんな場合でもは言いすぎだと思うが少なくとも正常系ではリークなしを目指すのは当たり前

536:デフォルトの名無しさん
18/09/17 22:36:30.00 oxQatDsR0.net
スマポでリークするケースというと、昔のインターフェースでスマポそのものが渡せないとかかなぁ。。。
希望としてはリファクタリングしてほしいところだけどね。

537:デフォルトの名無しさん
18/09/17 23:14:55.87 YgnM5prK0.net
>>522
誰が「規模が大きければリークしていい」と言った?
言ってないことを言ったかのように相手の主張を捻じ曲げるな
>>523
>アルゴリズムベンチマーク。
>リークしててもそこまで問題にならんし

538:デフォルトの名無しさん
18/09/17 23:17:40.96 2pCWAXV50.net
リークしたらヒープエリア毎Destroyすれば良いじゃない
@マリー・アンチョワネット

539:デフォルトの名無しさん
18/09/17 23:28:41.66 YgnM5prK0.net
あぁすまん、正常系について誤解してた
まぁ個人で使うレベルなんじゃないかね、本人が問題にならん言うてるし

540:デフォルトの名無しさん
18/09/18 00:08:27.62 z2qcvEfV0.net
ウィンドーズにはApplication Verifierがあります!!11!1!
>>521
malloc()とfree()が対応しているかはばっちりワカルのでかなり役に立つが
Win32APIで直接メモリ確保したりC++でメモリアロケータを0から自作した場合はどうなるかわからん…
perfmonで指定プロセスのprivate bytesの推移を取得しつつ長時間動かして直接消費状況を確認するというのがある意味最終手段だが
リークが無い(はずの)プログラムでもなかなか安定しないという印象
多分ユーザーコードからRAIIを排除しても拾ってきたライブラリがRAIIするとかそんな感じ!

541:
18/09/18 00:14:49.89 Iw2LHuqq0.net
>>528
グローバル new 演算子
グローバル delete 演算子
を malloc()/free() を使って定義して、かつ、未解放・二重解放を検出するようにポインタを線形リストに格納してチェックする、ということなら、簡単にできます
win32api でも、たとえば heapalloc() をラップすればいいかと
デバッグ初期の単純なミスならこれで大方弾けます

542:デフォルトの名無しさん
18/09/18 00:18:57.80 k3MAuD5K0.net
>>528
MS製だからWIN32位は拾ってくれると思ってたけど、なんだってー。Orz
俺は末端のユーザだからアロケータ書いたりしないのよね。
特に自作したらメンテとか自分でやんなきゃいけない負債になるのでやりたくないなぁ。

543:デフォルトの名無しさん
18/09/18 01:01:35.82 uOah9zOu0.net
>>530
application verifierはwin32apiをhookしてるよ。

544:デフォルトの名無しさん
18/09/18 01:07:33.27 7OxZ5HAL0.net
>>517
コンテナ形式のデータばかりと思うなよ

545:デフォルトの名無しさん
18/09/18 01:31:03.51 n7K73R0GM.net
hogeはdouble型で
int temp = int(hoge);
if (temp > 0)
return temp;
else
return 0;
このような処理をしたいのですが、何か良さげな内部関数とかないですかね

546:はちみつ餃子
18/09/18 04:24:56.90 CgLDhfQ00.net
>>533
C++17 の std::clamp みたいなことがしたいのかな

547:デフォルトの名無しさん
18/09/18 04:58:47.12 1zYpCWJ70.net
>>529
ランタイムのソース読んだ事無いの?

548:デフォルトの名無しさん
18/09/18 05:16:37.52 bwjvKD0M0.net
>>533
std::max(0, int(hoge))とか

549:デフォルトの名無しさん
18/09/18 06:06:39.75 mbB60zCK0.net
>>533
_mm_max_pd とかその辺

550:デフォルトの名無しさん
18/09/18 06:32:00.57 yg1A1NBg0.net
>>525
それはリークの言い訳にはならんで

551:デフォルトの名無しさん
18/09/18 06:35:34.10 BuheiE4nM.net
アルゴリズムベンチマークなんて長期間稼働するものでもないし、プロセス終わればリークも終わる。

552:デフォルトの名無しさん
18/09/18 06:55:51.70 1W/tmI+p0.net
>>533 の言う「内部関数」ってのは、
CPUのマシン語命令を直接利用するビルトイン関数みたいな感じかな。

553:デフォルトの名無しさん
18/09/18 09:38:53.59 GYwTywmv0.net
言い訳にならんよな
数万行って具体的な数値を出してきたのは奴だし

554:デフォルトの名無しさん
18/09/18 09:39:49.43 Zf2s67R20.net
勝手に察すると、単純な話だと思う
彼の把握では、おそらくは次のようになっているハズだ
内部関数=組み込み関数(あらかじめ用意されている標準の関数)
外部関数=自作関数、ユーザ定義関数
真意を勝手に忖度すると、「自作関数を作らずにそのまま使えるような便利な関数は既に存在してはいないだろうか」という質問に見える

555:デフォルトの名無しさん
18/09/18 09:40:00.14 GYwTywmv0.net
そもそも行数でどうたらって、いつの時代劇だよ

556:デフォルトの名無しさん
18/09/18 09:40:52.00 GYwTywmv0.net
>>542
俺もそう思った
だとすると536でFA

557:デフォルトの名無しさん
18/09/18 09:49:04.25 k3MAuD5K0.net
>>531
Yes、OK!

558:デフォルトの名無しさん
18/09/18 09:55:26.47 k3MAuD5K0.net
int ookii=...
int tiisai=...
int V=...
int x = std::max(tiisai,std::min(ookii,V));
ってやると、[min,max]区間内のVが取れたような気がする。
今度C++17で入るクランプがそれ。

559:デフォルトの名無しさん
18/09/18 11:57:01.55 9q1AFd5B0.net
>>543
>>512
>どんな場合でもリークしないように書けよ
リークしないようなコードを書くのは当たり前だが、どんなに注意してても起きるときは起きる
仮にこういう主張してるやつが居てもお前は俺と同じことを思わんのか?
「どんな場合でもバグらないように書けよ」

560:デフォルトの名無しさん
18/09/18 12:26:58.02 GYwTywmv0.net
車の事故と同じ
起きるときは起きるなんて言い訳は通用しない
まず起こすな
やっちまったら責任とれ
そういう緊張感がいるってことだ

561:533
18/09/18 12:44:39.79 TXDNyaJKM.net
ありがとうございます
max関数使わせていただきます
もう一つ別の質問なのですが、
2つのベクターの要素(1000個程度)の比較で、同じi番目の要素の内容差が10以上の要素番号(イテレータ?)を調べたいです
この操作は何回も繰り返すので出来るだけ高速化したいのですがなにか良い方法ありませんかね?
ベクターの要素はint型で内容は大体1000以下の整数です
vec1[100] = 100とvec2[100] = 300
vec1[102] = 100とvec2[122] = 300
なら100, 102のイテレータ(この後そのまま新しくforに投げるので)

562:デフォルトの名無しさん
18/09/18 13:14:20.96 l12yg0eyx.net
>>549
思わずC# LINQかPython使いたくなる内容だな。
やりたいことは結局のところ行列演算なのでEigen使うと何か方法ありそうだけど、高速化に寄与するかは不明。

563:デフォルトの名無しさん
18/09/18 14:20:03.27 Gab8FMClM.net
>>549
1000個を例えば4コアで250個ずつ並列化してさらにforの中でn個ずつ比較するとかかな…
intelは
_mm_cmpgt_epi16
armは
vcgt_s16
とかあるみたいだけど

564:デフォルトの名無しさん
18/09/18 15:33:22.77 UQgXz1AkM.net
普通MPIじゃね?

565:はちみつ餃子
18/09/18 16:41:03.37 CgLDhfQ00.net
>>549
新しく for に投げるっていうのがよくわからんのだが、
やりたいことをコードで (C++17 で導入された構造化束縛を使って) 表すと
for (const int& [element1, element2]: extract_if_big_difference(vec1, vec2)) { ほにゃらら }
みたいに書ける関数 extract_if_big_difference が定義できるといいなぁという感じ?
こうだとしたら、並列化するのは難しい気がするぞ。

566:デフォルトの名無しさん
18/09/18 16:42:40.86 l12yg0eyx.net
OpenCLでベクトル演算すれば速いんじゃね?

567:デフォルトの名無しさん
18/09/18 16:58:21.90 Zf2s67R20.net
こんなのだと速そうな気がする
vec3 = vec1 - vec2;
filter(vec3, 10, index);
void filter(const vector vec3, const int limit, int index[]){
int j=0;
for(int i=0; i<vec3.size(); i++){
if(vec3[i] >= limit){
index[j++] = i;
}else if(vec3[i] <= -limit){
index[j++] = i;
}
}
index[j] = -1;
return;
}

568:デフォルトの名無しさん
18/09/18 17:05:52.46 ZX8OqlLQd.net
データが多いならざっくり N (2〜8)分割して OpenMP とかで並列処理するのがいいよ
数百ミリ秒以上かかるなら他のコアを遊ばせておくのはもったいない
各分割の結果は独立して保持して後で統合する

569:デフォルトの名無しさん
18/09/18 17:06:36.21 GYwTywmv0.net
>>549
vectorじゃなくvalarrayだが。。。
int main()
{
int const n = 10; //おまえさんのリクは 1000 だったな
//このへん前置きは置いといて
mt19937 eng;
random_device dev;
eng.seed(dev());
uniform_int_distribution<int> dis(-20, 20);
auto rnd = [&eng, &dis]() { return dis(eng); };
auto print = [](auto& ct) { for(auto& x : ct) cout << x << '\t'; cout << endl; };
valarray<int> vec1(n);
generate(begin(vec1), end(vec1), rnd);
print(vec1);
valarray<int> vec2(n);
generate(begin(vec2), end(vec2), rnd);
print(vec2);
cout << endl;
//ここが本題
valarray<bool> mask = abs(vec1 - vec2) >= 10;
vec1[!mask] = 0;
vec2[!mask] = 0;
print(vec1);
print(vec2);
}
差が10以上のところを探して何か処理ならこっちのが楽だべ

570:デフォルトの名無しさん
18/09/18 18:11:51.89 H2d9f0sTa.net
>>533の質問のレベルを見ていると、
>>549も「実装完了しないうちから最適化必要と思ってたけど実はそんなこと必要なかった」なんて落ちにはならないかなとふと思った。

571:デフォルトの名無しさん
18/09/18 18:32:34.48 RR2nvfojr.net
boost の multi_array ってさ、添字の入れ替えってできる?
例えば要素 a[i][j][k] を a[k][i][j] に、全ての i, j, k について入れ替える操作
自分で実装しなきゃ駄目?

572:デフォルトの名無しさん
18/09/18 23:03:47.37 oE0uJFU60.net
boostみたいなインチキくさいライブラリは使ったことないが
オレだったらイチイチそんなムダな入れ替えが本当に必要なのかと
まずそこを疑う

573:デフォルトの名無しさん
18/09/18 23:14:12.21 yg1A1NBg0.net
行列でそんな演算あったような

574:デフォルトの名無しさん
18/09/18 23:30:40.91 GKhblNvIr.net
>>560
無駄の意味が分からない
テンソルの掛け算するときに行列積ライブラリ使うために足組み替えたりするだろ

575:デフォルトの名無しさん
18/09/18 23:35:47.30 Re9liTgW0.net
できた!
template<typename T>
class MyMatrix3D : Matrix3D {
...
virtual T get(size_t i, size_t j, size_t k) {
return get(k, i, j);
}
...
};

576:デフォルトの名無しさん
18/09/18 23:43:07.71 G/V6WyhFd.net
stack overflow

577:デフォルトの名無しさん
18/09/19 00:26:11.52 McwJY1yY0.net
わ、わざとだから!

578:デフォルトの名無しさん
18/09/19 00:33:47.86 dEko0zDA0.net
boostとか漏れも使ったことないわ(゚∀゚)人(゚∀゚)ナカーマ

579:デフォルトの名無しさん
18/09/19 04:24:37.15 2wyJ7zTj0.net
boostはbjamが糞すぎて入れるのめんどくさくなっちゃった

580:533,549
18/09/20 03:07:15.61 fZtZJGAwM.net
遅くなってすみません
処理が重くなったのは別の部分のせいでした…
Python的考えで5桁くらいインデントしてたので勝手に遅いと思ってましたが普通に高速でした
お騒がせしました

581:デフォルトの名無しさん
18/09/20 13:40:29.54 CPfoYuVJ0.net
たかだか1000回のループでそんなに速度気になるんか(というか並列化とかベクトル化とか大げさやろ)、
と思ってたけどやっぱりか
>>558の一人勝ちやな

582:デフォルトの名無しさん
18/09/20 21:36:12.15 zLqp8E230.net
低学歴知恵遅れなら
1回ループするのに1分かかるようなコードを書きかねない

583:デフォルトの名無しさん
18/09/21 00:16:00.80 4kzBlK6i0.net
再帰使ってみたが1分かからんかった
ゆ、許された…
URLリンク(ideone.com)

584:デフォルトの名無しさん
18/09/21 00:27:26.94 4kzBlK6i0.net
1分の壁を破るには、何度も何度もそれとわからずに同じ計算をするようなアルゴリズムにしないとだめだなあ…

585:デフォルトの名無しさん
18/09/21 03:21:51.90 xr3UMDDx0.net
boostをVS2017に入れられない

586:デフォルトの名無しさん
18/09/21 13:11:38.33 JwHgudh+H.net
関数A,B、C、D、EがあってAの中でBを呼んで、Bの中でCを……
って構造があって、例えばEでエラーが出るとします。大本のAにそれを伝えてエラーにしたいんですけどどうしたらいいでしょう
BCDEの戻り値全部boolにしてfalseを返すくらいしか思いつかないです

587:デフォルトの名無しさん
18/09/21 13:20:30.45 EQpNFWj/0.net
>>574
戻り値でもいいし、引数に参照やポインタを渡してもいいし
例外でもいい

588:はちみつ餃子
18/09/21 13:40:44.63 FzfC+eZt0.net
書く分には例外を投げるのが楽じゃないの。
関数 B, C, D ではそのエラーについて忘れておくことが出来るので。

589:デフォルトの名無しさん
18/09/21 13:41:36.51 IFsUWHdO0.net
>>574
例外を投げてキャッチさせる

590:デフォルトの名無しさん
18/09/21 14:25:47.49 wDeX8uPc0.net
例外はGOTOに迫りつつある

591:デフォルトの名無しさん
18/09/21 14:34:59.25 lJw3kOTN0.net
>>574
典型的な例外の出番だ
void E() { throw std::runtime_error("error at E()"); }
void D() { E(); }
void C() { D(); }
void B() { C(); }
void A() { try { B(); } catch(std::exception& err) { std::cerr << err.what(); } }

592:デフォルトの名無しさん
18/09/21 14:47:07.50 JwHgudh+H.net
皆様ありがとうございました。
別関数からのまでcatchできるとは知りませんでした。>>574を参考にしつつ書いてみようかと思います。
ファイル読み込みのときはあんま例外使わないなんて記述見たんですけど別に書いても大丈夫ですよね

593:デフォルトの名無しさん
18/09/21 16:31:17.28 vcIlO6Gbr.net
スッゲェ素人なんだけどよ、他人が作ったクラスに自作関数を付け加えたいときってどうすんの?
(例えば、行列クラスに特異値分解する関数を付け加える等)
継承ってやつを勉強して使うだけ?
C++ の言語仕様と常識を勉強したいという意味でもあるので、「その他人のコードを直接編集せよ」ってのはナシで頼む

594:デフォルトの名無しさん
18/09/21 16:50:36.52 K+jLUYtn0.net
>>581
機能を追加するために継承使うのは設計的によくないよ

595:デフォルトの名無しさん
18/09/21 17:01:37.16 pko5dpD3r.net
>>582
どうするべき?

596:デフォルトの名無しさん
18/09/21 17:06:42.97 OnuHA6YMx.net
>>581
クラスの親子関係がはっきりしてるなら継承。
機能が似てるだけなら移譲。
どちらか迷ったら移譲。

597:デフォルトの名無しさん
18/09/21 17:15:33.49 K+jLUYtn0.net
>>583
void svd(Matrix &pMtx);
みたいな関数ではダメなの?

598:デフォルトの名無しさん
18/09/21 17:45:50.45 nytN4gJ8r.net
>>584
移譲という用語は初めて知ったので、勉強してみます

>>585
ダメ、ということはないと思いますしこれまではそうしてきました
しかし、行列の特異値分解は配列ではなく行列に適用するべきだという意識が強くなりました
BLAS 等の多くてややこしい引数も、「行列を渡す」という形で書くことでもう少し自分にとって読みやすくなるのではないかとも思いました
クラスだとか他人のコードの拡張といったことを勉強してみたくなったということでもあります

599:はちみつ餃子
18/09/21 18:21:14.81 FzfC+eZt0.net
>>586
なんでもかんでもメンバ関数として持たせるのはダサいというのが近年の風潮。
設計方針にもよるんだけど、機能をちょっと増やすたびに新しい型を作るのも馬鹿馬鹿しいだろう。
単なる関数として作ればそれでよいはずのことにクラスの依存関係まで出てくるの、ホントに良くない。

600:デフォルトの名無しさん
18/09/21 18:35:46.91 nikK7GUa0.net
>>584
>どちらか迷ったら移譲
やめろ、割とマジで
本来継承が好ましいものに委譲を使うと後々になって必ず破綻する
お前D&E読んでないのか?
>>587
>ダサいというのが近年の風潮
そういう言い方・考え方もやめろ
かつてC++の継承は汚いからテンプレートで代用しろ、みたいな理屈があったが全くの空回りに終わった
その間初心者は嘘の情報に騙されたりオブジェクト指向を誤解したりして、結果C++から離れていった
>単なる関数として作ればそれでよいはず
これは正しい

601:デフォルトの名無しさん
18/09/21 18:37:09.46 MaoTi4980.net
>>587
完全に同意。
クラスの数が星の数ほどあるプロジェクトで、継承してメソッド一個追加してるだけとかの経年劣化したソース見たら目眩がするわ。
オブジェクト指向の初期啓蒙として「既存のクラスは変更するな」「機能追加は継承使え」って言ってた人を恨むわ。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

1257日前に更新/321 KB
担当:undef