[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 08/08 21:46 / Filesize : 235 KB / Number-of Response : 1032
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part148



1 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 20:54:06.26 ID:Nt0XFA2s.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

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

■長いソースを貼るときはここへ。■
 codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)

705 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 21:51:16.94 ID:oMyz9pGE.net]
>>683
つまんないことでイキんなカス

706 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 21:51:26.11 ID:M5G7J8Pl.net]
bool b;
if (b == true) // コードスメルではあるがバグではない

BOOL b;
if (b == TRUE) // 正しいか正しくないかは状況による

707 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 21:53:08.25 ID:AZ4KAaI2.net]
>>685
C++スレでC++以外の言語という「つまんないこと」でイキってんのおまえだろ

708 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 21:53:54.97 ID:AZ4KAaI2.net]
おまえみたいの「いちびり」って言うんだけど意味わかる?w

709 名前: mailto:sage [2020/02/10(月) 21:55:45.19 ID:3bnN/FFY.net]
>>682
バグにならなければ問題ないのでは?
>if (b == true == true)
とは私も書きませんが、だからといって異常だとは思わない

というか、あなたの「異常」の定義が異常なのでは?

710 名前: mailto:sage [2020/02/10(月) 21:56:36.80 ID:3bnN/FFY.net]
>>688
いちびり、とは、あなた、関西人ですなぁ

711 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:02:36.14 ID:AZ4KAaI2.net]
>>689
正常と異常の境をおまえさんはどこだと思っている?

712 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:02:53.98 ID:VRCQc/iz.net]
>>674
Windowsしか知らないの?
世界が狭い

非常に多くの環境でBOOLを使う

713 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:03:55.09 ID:AZ4KAaI2.net]
>>690
ああ、おまえほんまは関西人ちゃうなw
俺もほんまの関西人ちゃうけどなw



714 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:04:40.63 ID:AZ4KAaI2.net]
>>692
大文字のBOOLを使う「非常に多くの環境」とは?

715 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:06:02.65 ID:VRCQc/iz.net]
>531や>>682が異常とは思えないって
まじかQZ

716 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:07:56.51 ID:M5G7J8Pl.net]
>>692
その定義を出してみなよ。
標準の仕様じゃないんだからその環境ごとの特殊な定義であることは変わらんだろ。

717 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:14:01.58 ID:VRCQc/iz.net]
本当に知らないんだ
まじか

718 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:22:07.37 ID:4ZzuDNO4.net]
>>697
その返しは口喧嘩に負けた小学生みたいだから、ちゃんと相手の質問に答えなよ

719 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:23:41.11 ID:1F9oSbm6.net]
非常に多いなら具体例2、3あげて終わりでしょ

720 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:24:53.62 ID:M5G7J8Pl.net]
もう自分で何を言っているのかわからなくなっているんだろうな。
BOOLやTRUEの定義が環境によって異なる場合があると認めた時点で

if (b == TRUE)

これが正しいと言えるかどうかはその定義次第だということになるのに。

721 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:29:19.34 ID:TAH0RZ5f.net]
俺の狭い経験だと
BOOLはintで、TRUEは1、FALSEは0
しか見たことないけど、他の定義の環境ってあるの

722 名前:ゥな? []
[ここ壊れてます]

723 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:33:34.58 ID:PZnoEIEf.net]
−1というか全ビットonは何かで見た



724 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:50:32.94 ID:Qny4UpdU.net]
windef.hのFALSEが-1とかに変更されたら、既存のソースは崩壊だろうな

725 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 23:14:46.53 ID:zaYnGTVS.net]
!FALSE

726 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 23:38:01.28 ID:yW0oU9fF.net]
typedef unsigned BOOL:1;
ならまだ救いがあった
なんでint型にしてんだろうな

727 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 00:40:44 ID:wwgXq7Q5.net]
>>705
それは BitField みたいだけど、構造体メンバ以外で使えるようになったんだっけ?

728 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 01:18:20 ID:wwgXq7Q5.net]
>>703
FALSEは絶対的に0のまま。

729 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 01:20:55 ID:wwgXq7Q5.net]
もしかしたら、Rubyが、0をtrueと解釈してしまうことから変なことを思ってる
人がいるのかもしれないが、C/C++においては、言語仕様的に条件式で偽と
解釈されるのは、古くから、唯一、整数の 0 しかないなかったので、言語仕様が
修正されない限り TRUE が 0 以外の値にマクロ定義されることは絶対に無い。

730 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 02:07:59 ID:iFdutQCH.net]
あれ?
もしかして私・・また同じ日を繰り返してる・・??

731 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 02:12:10 ID:lTJc7ZeR.net]
まだやってんのかお前ら
ゲハ厨みたいなスレだな

732 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 02:43:47.12 ID:wwgXq7Q5.net]
>>708
スマン:
誤:修正されない限り TRUE が 0 以外の値にマクロ定義されることは絶対に無い。
正:修正されない限り FALSE が 0 以外の値にマクロ定義されることは絶対に無い。

733 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 02:58:41.73 ID:f/mZFEPY.net]
>>681
if(b)で十分なのにif(b==true)と書くのはif((a==b)==true)と書くのと同じで冗長なんだよ
これがすぐに理解できないなら論理を簡潔にする能力が欠如してるのでプログラミングの才能はないね



734 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 03:04:36.42 ID:wwgXq7Q5.net]
>>712
しかも、b は、少なくとも見かけ上は int 型ではなく、BOOL 型だし。
それに他の言語の場合、if の条件式に入れられるのは唯一 bool 型の
場合があり、一番 if の条件式に入れ易い型。

735 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 03:08:16.20 ID:wwgXq7Q5.net]
>>713
他の言語の場合、例えば x, y が整数型の場合、
x == y
とした結果の型が bool 型。
そして、if の条件式に入れられるのは bool 型のみだったりする。
だから、もともと b が bool 型なのに、敢えて b == true と判定して
また bool 型に「直して」しまうのはとても奇妙な感じになる。
その文化との兼ね合いから、C/C++ でも、b が BOOL 型の場合は、
if (b) とするのが美しく見える。

736 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 03:33:01.69 ID:AiNLffgv.net]
MISRA-C でも、if( 変数 )で、変数が実質的にブール型の場合は、これでOK

int a = ( 5 < 10 );
printf( "%d", a ); /* 1 */

if( 5 < 10 ) と、if( a ) は同じ意味。
a は、実質的にブール型

737 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 06:36:51 ID:DrkniQZr.net]
bool型が存在しない時代に何故bool型になるのか

738 名前: mailto:sage [2020/02/11(火) 08:01:59.71 ID:Sh/x76Zj.net]
>>695
異常を「コンパイラがコンパイルできない」と定義していますから

739 名前: mailto:sage [2020/02/11(火) 08:02:50.77 ID:Sh/x76Zj.net]
>>712
コンパイルが通るんだったら異常ではないのでは?

740 名前: mailto:sage [2020/02/11(火) 08:03:52.59 ID:Sh/x76Zj.net]
>>712
>論理を簡潔にする能力が欠如してる
簡潔すぎてわかりにくいのも困りますね、プログラミングはまず他人への分かりやすさを優先するべきでは?

741 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 08:29:09.76 ID:lXsf9fbV.net]
簡潔過ぎて分かりにくいって何?

if (b) で分かりにくいなら
変数名が適切でないとかそもそも分かりにくい作りとか
他に問題があるんじゃないの?

742 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 08:33:12.52 ID:lXsf9fbV.net]
もしかして
if (a ==b)
よりも
if ( (a == b) == true )
の方が見やすいとかいっちゃう?

743 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 08:56:04 ID:tUwi24Vl.net]
そりゃ
if (a == 42)
よりも
if (a == 42 == true)




744 名前:フほうが見やすいし
if (a == 42 == true != false)
のほうがさらに見やすいのが異常者
[]
[ここ壊れてます]

745 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 08:58:48 ID:lXsf9fbV.net]
カッコも付けないと見にくいよな

if (((a == 42) == true) != false)

746 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 09:09:46 ID:Kcy+Q8b9.net]
どれだけ冗長に書けるか選手権?

747 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 09:15:23 ID:oAfdlMqH.net]
QZは変なこだわりに固執するやつだから、一般的な感覚とか常識とかについて議論しようとしてもそもそも議論が噛み合わないし、スレを無駄に汚すだけ

748 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 09:21:24 ID:tUwi24Vl.net]
if (true == true == true == b == true)
if (true == b == true == b == true)
int *p = &*&*(int *)&*&*&*&*&*(int *)&a;

749 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 09:34:27 ID:Gt4Evnq6.net]
ようちえんじがかんじをつかわないでってぐずってるのとおなじだね

750 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 10:19:17.04 ID:G5APdl5q.net]
異常とは、普通じゃないことだよ
少数派のこと
if (b == true == true) は明らかに異常
if (b == true) はたまに見るけど、まぁ異常かな

751 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 10:34:12.60 ID:lXsf9fbV.net]
つまりQZは異常

752 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 10:35:43.55 ID:Kcy+Q8b9.net]
boolやBOOLでない変数abcをif(a==b==c)と書きたい事はある。

753 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 10:56:56.94 ID:0rT9FQIK.net]
QZってコイツ片山だっけ?



754 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 11:01:53.65 ID:u3DUqgh+.net]
if(b==true)
はifのなかには比較入れないとダメだと思っているんじゃね

そう言う言語もあるし

755 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 11:09:22.66 ID:IotAbjtu.net]
「rust が c++ を超えた!! 神!!」みたいな記事をよく見ますけど、今後c++がrustから学んでもっと良くなることって期待して良いですよね?
rustに勉強のコストを割くか迷っています

756 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 11:12:06.04 ID:HeZx7HUk.net]
>>731
片山はQZほど馬鹿ではない
まず国籍が違う

757 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 11:29:50.94 ID:Ci+AyeA2.net]
なぜ

if (a == true)

と書くやつがでてくるのか
それは条件式に食わせるためには比較演算子で値から「真偽値」に変える必要があると
思っていてそれがboolと同値と理解していないからだろ
だからそういうやつは

if (a == 42 == true)

とは書かない
この例はむしろboolを理解してるやつからしか出てこない発想
やつらはいったん「真偽値」になればあとは論理演算子でつなげると理解している
ある意味、条件式を作るときのイディオムに馬鹿正直に従っているわけで別に
異常だと騒ぐほどひどくはない

別の見方をすればboolを特別視しないで書いてるわけで、
冗長にはなるが共通のフォーマットで書ききるってことはほかでもあることだ
そう思えばやっぱりひどくはない
実際おれは特別読みにくいとは感じないし、この無駄は最適化で消える
何かの機会にこれ冗長だよねと教えてやるぐらいで十分

758 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 11:37:00.49 ID:kh2SGwFh.net]
ほんといつまでやってんの

759 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 11:38:29.11 ID:KQZ3+5BK.net]
冗長な書き方をする人の真意なんて測りようもないし理由が一つに決められるわけもないだろう。
想像するだけ無駄。

760 名前:はちみつ餃子 mailto:sage [2020/02/11(火) 12:17:11.73 ID:GpQNLMm4.net]
>>715
そう書くべきだしそれが普通ってことはわかってんだって。
自分で書く分にはそう書くよ。
でも、他者が書いたコードを読むときや利用するときは
> 変数が実質的にブール型の場合は
っていう前提を確信できない場合がある。

整数型で真偽値の代用にすることがある C/C++ では
型で判断できないことがあるから罠だよねって話をしてるんだよ。
真っ当なデザインではない場合があるから思い込まずにちゃんと確認しようねってこと。

761 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:09:17.27 ID:lXsf9fbV.net]
>>735
同値
意味

762 名前:オらないのね []
[ここ壊れてます]

763 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:15:33.26 ID:Gt4Evnq6.net]
> この例はむしろboolを理解してるやつからしか出てこない発想

そりゃそうだ
ifの制御式は比較でなければならないと言い張るやつへの皮肉なわけで



764 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:19:47.85 ID:QCVkc9h/.net]
operator =(BOOL value){
if(value==0){
return FALSE;
else if(value==1||value==2||...){
}

765 名前:デフォルトの名無しさん [2020/02/11(火) 15:21:35.11 ID:IKSpGnXe.net]
>>596
あったあった

今はわざわざそれ使う理由忘れた

766 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:25:53 ID:Uk2CrnAG.net]
Cだとそれで必ず0か1になるからTRUEと比較しても大丈夫!っていうクソみたいなバッドノウハウ

767 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:28:40 ID:QCVkc9h/.net]
operator ==(BOOL value){
 if(this->value == 0){
  if(this->value == value){
   return TRUE;
  }
 }
 else{
  if(value==1||value==2||...){
   return TRUE;
  }
 }
}

768 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:38:44 ID:KQZ3+5BK.net]
>>743
そもそもTRUEと比較する必要はないしWindowsから出てきたイディオムでもないと思うが。
どちらかというとtruthyな値からtrueを得るイディオムとして使われているような。
よく見かけるのはJavaScriptとか。

769 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:45:19.74 ID:Gt4Evnq6.net]
リターン式から返却値の型を推定させる場合にはautoが必要だ

770 名前:◆QZaw55cn4c mailto:sage [2020/02/11(火) 17:36:36 ID:Sh/x76Zj.net]
>>725
あなたのいう「一般的」というものが、実はそれほど一般的ではなかった、という可能性はありませんかね?
というか、まずあなたのいう「一般的」をあなたの言葉で定義するべきでしょう

あなたに定義できますか?

771 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 18:04:17 ID:G5APdl5q.net]
単語の意味は辞書引けよ
APIの仕様はヘルプ読め、と同様だな
なんで個人が定義するんだよ

772 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/11(火) 18:24:26 ID:GpQNLMm4.net]
get.secret.jp/pt/file/1581413018.png

773 名前:はちみつ餃子 mailto:sage [2020/02/11(火) 18:40:23.65 ID:GpQNLMm4.net]
true と比較したけりゃすればいいじゃないの。
そのプロジェクト内で一貫したポリシーがあるのならそれでいいよ。



774 名前:デフォルトの名無しさん [2020/02/11(火) 18:49:13.60 ID:TuMeiRsT.net]
ちゃうねん。

775 名前:デフォルトの名無しさん [2020/02/11(火) 18:52:49 ID:TuMeiRsT.net]
ストリーム遅いな。

776 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 20:44:57.22 ID:f/mZFEPY.net]
コード規約「if(bool)はif(bool==true)と書かなければならない」
やだよ、そんな規約ww
規約決めるまでに紛糾してプロジェクト始められねぇよw

777 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 20:57:43.57 ID:Z6POtQL5.net]
どっちでもええやん

778 名前:デフォルトの名無しさん [2020/02/11(火) 22:08:40 ID:Pk2ehCPz.net]
explicit operator boolだとラムダとかの戻り値強制したいときそうなっちゃわない?

value() && true か value() || false
static_cast<bool>(value())は好きじゃない

779 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 22:19:09 ID:Uk2CrnAG.net]
素直に戻り値boolに指定しろよ

780 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 22:21:59 ID:ggTX+OPA.net]
意味的にboolの型であればboolにキャスト
そうじゃないなら意味通りにboolに変換

781 名前:◆QZaw55cn4c mailto:sage [2020/02/11(火) 22:23:23 ID:Sh/x76Zj.net]
>>258
mmap を確かめています、なんだかすごく時間がかかってしまいました…
ideone はファイルを作らせてくれないみたいですね… https://ideone.com/zXFtEY

fd と fd に紐付いた mmap をつくっておいて、
?fd 側にデータを追加すれば mmap でも見えるのですが、
?mmap 側からデータを追加しても fd は増量しないようですね

今は cygwin で見てますが、ちゃんと linux をいれて確かめるつもりです…

782 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 22:24:35 ID:ggTX+OPA.net]
オンメモリで出来ることは素直にオンメモリでやれば

783 名前:デフォルトの名無しさん [2020/02/11(火) 23:36:09 ID:TuMeiRsT.net]
くじで決めてはどうか。



784 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 23:39:16 ID:RnNFx+rl.net]
モンテカルロ法やな

785 名前:デフォルトの名無しさん [2020/02/11(火) 23:56:08 ID:TuMeiRsT.net]
I/Oの遅さの陰に隠れてたけど。
ストリームよりSSDのほうが速いよって時代になって困る。

786 名前:デフォルトの名無しさん [2020/02/12(水) 01:53:51 ID:CB9IiDBv.net]
YouTuberは「最強の職業」である理由。
https://www.youtube.com/watch?v=XjV3Nb0-hgA
【事例付き】YouTuberは最強の副業である件について。
https://www.youtube.com/watch?v=wB8hNuNVoIw&t=267s
【初心者向け】YouTubeの始め方・稼ぎ方を徹底解説!
https://www.youtube.com/watch?v=YEw-a8qlADM
「YouTubeなんていつか稼げなくなる」という主張を論破する。
https://www.youtube.com/watch?v=VatNILApW4U
収益化から丸1年!YouTubeでいくら稼いだか公開。
https://www.youtube.com/watch?v=-zQxuQqZ5eA&t=103s
その動画で月商○○万!? YouTubeで稼ぐ裏技的アプローチ。
https://www.youtube.com/watch?v=7I4APU_6i9o&t=433s
【貧者の工夫で戦え】ガラケーだっていい。YouTube始めるのにパソコンはいらない!
https://www.youtube.com/watch?v=jYdWfjjzD7Y
【第一回】SNS、YouTube、ブログで稼ぐ方法を、丁寧に解説します!
https://www.youtube.com/watch?v=erNiLOncDnY

787 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 06:38:05.77 ID:m8mhjAm7.net]
>>763
グロ

788 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 10:03:09.83 ID:DWihvkH4.net]
https://qph.fs.quoracdn.net/main-qimg-2c09000282ddcbb32359dc242831a052

789 名前:デフォルトの名無しさん [2020/02/12(水) 16:01:35.18 ID:a1w2Xqz0.net]
>>743
ああなるほど
if(TRUE == !!b) のことか

if(!!b) は javascript の方だろ

790 名前:はちみつ餃子 mailto:sage [2020/02/12(水) 16:24:33.81 ID:KQxiYwOn.net]
! は見づらいから私は not と書くことにしてる。

791 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 17:16:20.22 ID:DU9qWhLl.net]
一応、alternative tokensに規定はあるが
使う奴の心は #define BEGIN { なんてやるやつと同質だね

792 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 17:20:59.01 ID:DU9qWhLl.net]
Cにも_Boolがなきゃヤダジタしてたやつとか
マジそういう言語へ行ったきり帰ってくるなって感じ

で結局BOOL < 0みたいなオカシイことが起き出す原因を作りやがる

793 名前:はちみつ餃子 mailto:sage [2020/02/12(水) 17:47:16.08 ID:KQxiYwOn.net]
C と C++ で解釈が違うのに結果として動作は同じみたいなのがたまにあってすげーなって思う。



794 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 18:09:20.78 ID:goJJte/u.net]
たとえば?

795 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/12(水) 19:09:04 ID:KQxiYwOn.net]
>>770-771
if 文の条件式を見てて思い出した。
C だと条件式の評価結果を 0 と比較するというルール
C++ だとブールに変換するというルール。

まあ整数をブールに変換する規則は結局のところ 0 と等しいかどうかなんで
ちょっと回りくどくなってるだけなんだけど、
そういう違いがあっても互換性が維持されるというのがどこかで検証されてるんだろうと思うと、
手間かかってんなぁという感想が浮かんだ。

他にも列挙定数の型が C と C++ では違うとか……。
私が把握してるのはそんくらいだけど、
探せばもっとあるんじゃないかな。

796 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 20:25:01 ID:ytylQgpT.net]
>>766
>if(TRUE == !!b) のことか

さすがにこんな意味のない書き方が人の目につくほど蔓延りはしないだろう。おそらく>>743の妄想。

!!b は、bool型(と、しばしばオーバーロード)を備えた言語で非bool型の値bをbool型に変換するテクニックだろ。

797 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 20:38:11 ID:rfok9Tr/.net]
b!=0 で良い

798 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:12:18 ID: ]
[ここ壊れてます]

799 名前:h1wCYtKx.net mailto: そういうゴミみたいな自己満テクニック()が積もり積もって誰も触れないスパゲティモンスターになっちまうんだよ
b!=0でも(bool)bでもいいからやるべきことを直接表現しろ
[]
[ここ壊れてます]

800 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:26:37 ID:rfok9Tr/.net]
(bool)b
はCへの移植の可能性があるならやっちゃダメ

801 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:31:03 ID:DU9qWhLl.net]
>>776
何で?
ISO/IEC 9899:2011 (E)
7.18 Boolean type and values <stdbool.h>
1 The header <stdbool.h> defines four macros.
2 The macro
bool
expands to _Bool.

802 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:34:37.96 ID:rfok9Tr/.net]
typedef char bool;
の可能性があるから

803 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:35:17.48 ID:ytylQgpT.net]
Cに移植する可能性があるならC++の機能を使っちゃダメなのは当たり前だよなぁ
C++スレで言うことではないと思うが



804 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:36:55.01 ID:rfok9Tr/.net]
>>779
問題点はそこじゃない
移植時にコンパイラが問題点を見つけられないのが問題

805 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:38:26.52 ID:rfok9Tr/.net]
コンパイラが問題点を見つけられない例は他に山ほどあるが
だからといってわざわざ増やさなくても良い

806 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:39:05.32 ID:ytylQgpT.net]
いや、問題があるなら移植する人が見つけろよ

807 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:40:47.83 ID:rfok9Tr/.net]
移植は完璧な人がする
なんて妄想は捨てた方が良い

808 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:42:13.60 ID:rfok9Tr/.net]
Cに移植する可能性が無いならどうでも良い
ちなみにキャストで警告が出る環境もある

809 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:42:36.95 ID:ytylQgpT.net]
だからそれは移植する側の問題だろ。勝手にやれよ

810 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:52:54.99 ID:DU9qWhLl.net]
>>778
マクロとtypedefが被った場合どうなるか解ってる?

811 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 22:12:26.79 ID:ecElmrkB.net]
もちろん

812 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 00:16:13.58 ID:X++L6urQ.net]
>>733
Rustを少し見てみたけど、書き方が全くC/C++とは違っていて、
全く異なる文化圏の言語になれた人が設計した臭がした。
これがC/C++の代替になるとは考えにくい。
はっきり行って、これを使えといわれると辛い。

813 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 00:26:27.60 ID:YbJF2Pjt.net]
テスト機能が標準で用意されてるのはいい



814 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/13(Thu) 00:45:52 ID:XX4mj9DD.net]
個人的には Rust は好感触。
型システムは ML 系言語で実績があるものを基礎にしてることもあって、C++ のグダグダな歴史を背負ったものよりはまとも。
ML 系はやっぱり高級路線の言語だし、インデントでブロックを表す系統なのがしんどいけど、
Rust は上手く低レイヤ用 (としても使えるよう) に着地させてるし、 C 風の外観を踏襲してもいる。

C++ が Rust から取り入れられるものはそんなに多くないと思う。
C++ は良くも悪くも互換性についてかなり強い要求があるので、
Rust 的な、カッチリと保護された仕組みを後付けするのはどう考えても無理。
C++ が Rust を参考にすることは間違いなくあるとは思うが、
全体の思想がまるで違うので限定的な範囲でしか取り入れられない。

もし取り入れらたらそれは C++ の新機能として新しく学ぶので十分でしょ。

Rust を学ぶのは間違いなく有用ではあるけども、
Rust の知見が C++ に取り入れられる可能性がありそうだからという理由ならそんなに意味ない。

815 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 01:02:46 ID:b1nbpqgi.net]
C++の配列は長さの情報を持ってないってことになってるけど
長さを与えなくてもdelete[]できるんだから、メモリのどこかにその情報はあるよね?
なんでその情報をプログラマが利用できないようになってるの?

816 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 01:06:29 ID:qzSQSiwu.net]
rustがかっちり保護してくれるとか低レイヤー向けとか馬鹿ほど信じてるよね。
ありゃ帯に短し襷に長しの典型言語だわ。

817 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 01:44:34.08 ID:X++L6urQ.net]
>>792
実際、Rustは、Cを簡単にするのではなく、Cを難しくしてしまっていて、Cのポインタが理解できない or 難しく感じる人には、Rustの特徴の核心たる所有権、借用などの部分はちんぷんかんぷんだと思う。

818 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 01:48:50.73 ID:X++L6urQ.net]
>>793
Cの問題点を取り除いたと言うより、ほとんど全てのプログラミング言語が暗黙のうちに用いている代入の概念をなるべく使わないようにして変数束縛などの全く異なる独自概念を用いようとしている。
しかし、これは、手続き型言語と関数言語の違いに匹敵するくらいのプログラミングの概念の変更になってしまうため、手続き型言語の中で改良された次世代言語と言うものではなくなってしまっているとも言える。

819 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 05:24:36 ID:AWnkBPoe.net]
変数束縛って右辺値参照でしょ

820 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 06:24:47.58 ID:fMXzK7Sc.net]
RustはC++なら簡単にできることをものすごく回りくどく書かないとコンパイル通らない感じだからとてもつらい

821 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 09:13:38.23 ID:6FSFTWhE.net]
>>790
RustがC++に取って代わることがあるか、というニュアンスの質問でした
今C++でやってる仕事がRustに置き換わる可能性が高いなら今から勉強しとこうか、と

822 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 12:35:22.33 ID:z5cRWLgY.net]
>>797
断言してもいいが、RustはC++に取って代わることは無い。
なぜなら、普通の手続き型言語での枠組みにすら入ってない書き方を強要されるから。
手短に言えば、単にC/C++と書き方が大幅に違っているだけではなく、書き方が他のどんな減の範疇にも属していない。

823 名前:はちみつ餃子 mailto:sage [2020/02/13(木) 13:30:24.18 ID:XX4mj9DD.net]
>>796
C/C++ でのオブジェクトの寿命の管理の難しさってのは
理屈が理解しづらいというよりはわかってても間違うという難しさなんだよね。
そして間違っていてもコンパイラは黙って通すことも多い。
C/C++ を長く使っていればそれを感じることって結構あるでしょ。
そういう部分のプログラムが正しいことはプログラマが保証しなくてはならんわけだ。
でも Rust では言語処理系の側でやってくれる。
C/C++ で面倒な部分を Rust では自動でやってくれる。
まわりくどいのは確かだけど、それで楽できるのも確かなので、
どっちを取るかって話だな。

オブジェクトをどこで後始末するか。
管理の主導権はどのモジュールに持たせるか。
そういうのって C/C++ でも考えてるよね。
C/C++ ではプログラムに書いてないだけで本来はあるはずのものなんだよ。
(C++ だとスマートポインタの導入で少し楽にはなったけど。)
自分が何を考えていたのか、そして何を考えられていなかったのが
明らかになるのはそれはそれで楽しいと思う。
まあ、それは俺が趣味でやってるからかもしれんな。



824 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 13:34:58.25 ID:3lSBa444.net]
おまえの設計がヘタクソなだけだろ

825 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/13(Thu) 13:45:30 ID:XX4mj9DD.net]
>>800
そうだよ。
そんでもって大抵の人間は設計がヘタクソだし、
ヘタなところが検出されるなら検出されないより良い。

826 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 14:01:13 ID:z5cRWLgY.net]
>>799
変数束縛やら所有権や借用の概念が複雑すぎて、そっちの方が C/C++の
メモリ管理よりミスし易い。

827 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/13(Thu) 14:13:53 ID:XX4mj9DD.net]
>>802
間違いなくミスし易いけどミスした箇所が検出できないということはあまりない。

828 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 14:20:14 ID:3lSBa444.net]
設計がヘタクソなヤツが書いたソースのメンテやらされるのは最悪だけど自分で組み上げるならC++以外有り得ない
各々の力量が顕著に表れやすい最高の言語には違いない
バカも容易に炙り出せるしな

829 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 14:20:33 ID:z5cRWLgY.net]
>>803
仮にあなたはちゃんと理解できても、一般のプログラマは変数束縛やら所有権や借用の概念を理解することが難しすぎるので、C/C++を置き換える言語にはならない。
それらの概念は学習コストが高すぎるどころか、一生理解できないプログラマが多いだろう。

830 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/13(Thu) 15:53:13 ID:XX4mj9DD.net]
>>805
誤解のないように補足しておくけど、俺は Rust が C++ を置き換えるという主張はしてないからね。
C++ の重大な欠点を (実行コストをあまり払わない形で) 改善しているのは確かってだけ。
そんでもってそれが必要な場面は間違いなくあるってことも。

831 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 19:21:34 ID:b1nbpqgi.net]
>>791
わかる人いませんか?

832 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 19:29:34 ID:z5cRWLgY.net]
>>807
new TYPE[] のようにしてヒープから配列として確保されたメモリは確かに
要素数の情報を持っている。
しかし、new TYPEのように配列ではない場合は、高速化のために情報を
持ってない処理系もある。そのために 前者では delete[] を、後者では
deleteを使うことになっており、間違った組み合わせを使った場合には
不具合を生じる。

また、ポインタは、ヒープから確保された配列ばかりをポイントしているとは
限らず、例えばスタック上のローカルオート変数や、グローバル変数をポイント
していることもあり、その場合には、要素数の情報は全く持っていない。

さらに、Cの場合、関数の引数に TYPE buf[] のように配列を書いても、
TYPE *buf に自動修正される仕様となっている。
そのため、配列を受け取るのは、必ずポインタということになる。
しかし、ポインタで受け取るということは、そこには、&a のように、
ローカルオート変数も実引数として指定して呼び出すことも出来る。
その場合には要素数が無いので、あなたの望みをかなえる高速な
一般的方法が存在しない。

望みをかなえるためには、言語の拡張が必要となる。

833 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 19:33:05 ID:bRhYdbIA.net]
Rustっていろいろ清々しいよね
関数型言語に必須じゃねえのと思うリスト関係がぽっかり抜けてるのは不満だけど



834 名前:デフォルトの名無しさん [2020/02/13(Thu) 19:57:05 ID:WjLTLikp.net]
>>807
https://ideone.com/DfYRYS

835 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 20:01:17 ID:b1nbpqgi.net]
>>808
ヒープに確保した配列の要素数はやはりメモリ上にあるんですね
手段がないのは文法として一貫性をもたせられないからということでしょうか
なるほど、回答ありがとうございます

836 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 20:08:49 ID:J94ypinO.net]
delete [] pと同じように
sizeof [] pを用意すりゃいいのにね
pがnew []されてなかったら誤動作するって挙動ならdeleteと同じだろうに

837 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 20:15:32 ID:iivZofrB.net]
言いたいことは分かるが構文がきもい

838 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 20:17:34 ID:Y6SS1xK+.net]
欲しいなら作れば?
それができるのがc++じゃん

839 名前: mailto:sage [2020/02/13(木) 20:36:41.73 ID:ImKshd8q.net]
>>791
>C++の配列は長さの情報を持ってないってことになってるけど
>長さを与えなくてもdelete[]できるんだから、メモリのどこかにその情報はあるよね?

new したときは、その領域サイズが実行時にユーザーのみえないところに保存される、というだけなのでは?
C/C++ の配列は長さ情報を(自分でそう書かないかぎり)持たないとおもいますよ

840 名前:デフォルトの名無しさん [2020/02/13(木) 20:38:39.62 ID:WjLTLikp.net]
ちゃうねん。

841 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 20:50:05.52 ID:qzSQSiwu.net]
設計がダメな場合コンパイラにいくら指摘されようと根本的には治らんのだが、
(たいていそういう馬鹿はコンパイラ通すためにmut,RefCell,unsafeを使いまくる)
そういうのを少しもわかってないバカがrust推しなんだよなぁ。
構造体を1から作り直さなきゃならんかったり根本的に間違ってる。

842 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 21:00:18 ID:sl9OX6cI.net]
>>808
new TYPE[]するとき内部的にサイズ情報を持つ保証ってあったっけ?
例えば自前でoperator new []を実装するとき、予め2^nバイトのブロックを所定の数用意しておいて、要求サイズに応じて必要十分な大きさのブロックを返すなら、割り当て時に要求されたバイト数または要素数の情報を保持しないという実装も可能かと思う。

843 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 21:18:32.64 ID:9NIgZq2/.net]
>>811
いえいえ



844 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 21:37:18.24 ID:Y6SS1xK+.net]
>>818
デストラクタ呼ぶ必要ある

845 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 21:39:24.09 ID:J94ypinO.net]
デストラクタ呼ぶ必要ない型だと、size情報持ってないと言うことなんだろうね

846 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 21:40:36.17 ID:sl9OX6cI.net]
>>820
デストラクタの実装も、返ってきたアドレスの値でどのサイズの領域か(割り当て要求されたサイズではなく、自分で区切ったブロックのサイズ)が分かるようにしておけば大丈夫でないかな?

847 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 21:41:24.98 ID:sl9OX6cI.net]
>>822
すまん、勘違いでした。全部忘れてください

848 名前:デフォルトの名無しさん [2020/02/13(木) 22:02:22.87 ID:WjLTLikp.net]
はい忘れました。

849 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 22:06:16.93 ID:Bk3UL691.net]
アドレスだけじゃなくて長さも受け渡しするインターフェースにしましょうとしか。

850 名前:デフォルトの名無しさん [2020/02/13(木) 22:36:33.13 ID:WjLTLikp.net]
シリアル化の王道ってありますか?

851 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 22:45:19.55 ID:iq5JxXln.net]
オブジェクトならCORBA、データ構造だけでいいならASN.1とか。

852 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 22:54:55 ID:tx2lxPGZ.net]
>>822
TYPEがデストラクタを持つclassの場合に、ptr = new TYPE[n] で確保されたメモリ
を delete[] ptr とすると、 正確に n 回デストラクタを呼び出す必要がある。
new が n * sizeof(TYPE) より大きめのブロックを確保した場合でも、
delete[] ptr 時に正確な n の値を割り出す方法が必要となる。
なので、n の値は ptr の値さえあれば知ることが出来ることが必要条件となる。
つまり、少なくともデストラクタを持つ TYPE の場合に TYPE の配列をヒープから
確保した場合には、配列の要素数を必ず配列の先頭のポインタの値から「知る」事が出来る。

853 名前:デフォルトの名無しさん [2020/02/13(Thu) 23:01:33 ID:WjLTLikp.net]
>>827
もうちょっと簡単なのないですかね。
型情報要らないんで。



854 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 23:09:58 ID:iq5JxXln.net]
型情報が無けりゃデシリアライズしても使いようがあるまい。

855 名前:デフォルトの名無しさん [2020/02/13(Thu) 23:12:32 ID:WjLTLikp.net]
それがあるんですよ兄さん。

856 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 23:12:57 ID:ktN45haN.net]
双方向mapって何使うのがいいですか?boostのbimap?
それともこのくらいは自作してる人のほうが多いですか?

857 名前:デフォルトの名無しさん [2020/02/14(金) 00:05:24 ID:CPLKNT1n.net]
双方向Mapって何に使えるんですか?

858 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 01:54:24 ID:0WgbwkuV.net]
型情報ないならそもそもデシリアライズできないし
型情報なしで成り立つ、つまり型情報を事前に知っている前提なら
バイナリでそのまま送ればいいだろ

859 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 02:05:36 ID:raWqkpxU.net]
型がわかっててもコンテナはそのままではバイナリで送れない

860 名前:デフォルトの名無しさん [2020/02/14(金) 02:11:15 ID:CPLKNT1n.net]
>>834
そのやり方教えて。
あめさんあげるから。

861 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 07:52:45.40 ID:RsXMnrpQ.net]
ちゃんとやるならPODに詰め替えてからchar配列へreinterpret_cast

862 名前:はちみつ餃子 mailto:sage [2020/02/14(金) 09:19:01.22 ID:nLeEzkye.net]
>>826
シリアル化ってのにどういう要件を置くかだな。
同じ環境でデシリアライズ出来ればよいのであれば >>837 で十分だろうし、
データ形式が決まってて (あるいはデータ形式の側を中心に策定したくて)
それのシリアライズとデシリアライズを (それぞれ別の環境で (ときには言語も違うかも)) やりたいということなら
protobuf などのツールを使うのはよい案だと思う。

863 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 13:35:07 ID:vZZ7SPTm.net]
boostにあるじゃないですか
googleのなんか使うんじゃありません



864 名前:デフォルトの名無しさん [2020/02/14(金) 13:41:23 ID:a5iC3cHy.net]
>>791
>>807
実装

865 名前:ヒ存だと思うけど hoge[-1] あたりに格納されてた []
[ここ壊れてます]

866 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 13:49:57 ID:rQdJoGM9.net]
>>840
VC++の場合、ptr = new TYPE[n] で確保された場合は、確かに
ptr[0] == n
になっていた気がする。
「確かに」というのは言葉のあやで、厳密には覚えてないが、
VC++の new で使われる組み込み関数のライブラリのソースコードを見ると分かる。

867 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 13:50:28 ID:rQdJoGM9.net]
>>841
すまん、
ptr[-1] == n
の間違い。

868 名前:デフォルトの名無しさん [2020/02/14(金) 14:03:39 ID:a5iC3cHy.net]
>>807
>>841
OSやコンパイラで違うんでしょ
https://ideone.com/DuTmC5

869 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 15:26:11.39 ID:rQdJoGM9.net]
>>842
あ、すまん、正しくは、大体、
 ((DWORD *)ptr)[-1] == n
だ。
ptr[-1] だと、sizeof(TYPE)分、アドレスが戻ってしまうし、
結果の型も DWORD とかではなく、TYPE 型になってしまう。

870 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 15:28:19.59 ID:rQdJoGM9.net]
>>843
言っておくが、new char[n] とかでは、駄目な可能性は有るよ。
話は、「TYPEがデストラクタを持つとき」のnew TYPE[n]に限定。

871 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 17:17:51.62 ID:jFoBh/u0.net]
一時オブジェクトの寿命について、ご教示ください。
例えば、以下のようなコードがあった時、

void foo(const char* c); // 外部ライブラリの関数につき変更不可とする
void main()
{
const std::string s = "aaa";
foo((s + "bbb").c_str());
}

一時オブジェクトstring(s + "bbb")の破棄が行われるのは、
関数foo()を呼ぶ前でしょうか、呼んだ後でしょうか。
調べた範囲では、「完全式の終わり」という話が出てきたのですが、
どこまでが完全式なのか判断できませんでした。

872 名前:はちみつ餃子 mailto:sage [2020/02/14(金) 17:22:07.67 ID:nLeEzkye.net]
>>846
この場合はその行の終わり。
セミコロンのところだと思っていい。

873 名前:はちみつ餃子 mailto:sage [2020/02/14(金) 17:34:07.49 ID:nLeEzkye.net]
すごくどうでもいい話なんだけど、
JIS では完結式という用語を使ってるのに完全式って言葉の方がよく使われているよね……。



874 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/14(金) 17:59:01 ID:nLeEzkye.net]
>>846-847
式の一部であるような式が部分式で、
そうでないような式が完結式って言う。

875 名前:デフォルトの名無しさん [2020/02/14(金) 19:29:16.13 ID:CPLKNT1n.net]
>>837-838
ありがとん。

876 名前:846 mailto:sage [2020/02/14(金) 19:44:55.13 ID:jFoBh/u0.net]
>>847-849
ご回答ありがとうございます。
大変勉強になりました。

877 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 20:52:54 ID:x/oqiD9H.net]
おいCぺろぺろ

878 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 20:58:59 ID:V/oEZCXU.net]
>>851
いえいえ

879 名前:デフォルトの名無しさん [2020/02/15(土) 10:34:21 ID:BMoFghq4.net]
newって意外と速いんだな。
アクセスは不利かもしれないけど。

880 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 12:11:39.70 ID:DzNKB5Jj.net]
>>854
速いよ。
高速なゲームでも普通に使える。

881 名前:デフォルトの名無しさん [2020/02/15(土) 12:12:59.04 ID:BMoFghq4.net]
でもスタックは常にキャッシュに乗ってるから、そこらへんでどう変わるのかな。

882 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 13:19:54 ID:J1bovO5o.net]
キャッシュに乗るくらいの量だったらそもそもクリティカルな重さにはならんだろ。
newで問題になるのは10万とかそのくらいのオーダーをがっつりfor文で呼ぶとかそれくらいのことする場合。

883 名前:デフォルトの名無しさん [2020/02/15(土) 13:21:27 ID:BMoFghq4.net]
スタックは常にキャッシュに乗ってる。



884 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 13:23:13 ID:lTU5fwx1.net]
>>857
風邪が騙りかけます

885 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 14:11:39.55 ID:DzNKB5Jj.net]
>>857
VC++の場合、コンストラクタが無い場合、new が必要とする時間は 170クロック。
3.0GHz の CPUの場合、1.7 * 10^7 回(1,700万回)くらい new してやっと一秒
位。
だから、問題になるのは、1万回ループではなく、100〜1000万回くらいのループ。

886 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 14:15:19.79 ID:DzNKB5Jj.net]
もちろん、スタック変数で済むならスタック変数の方がい

887 名前:い。
ただ、スタックは容量に限りがあるので全部スタックという訳にもいかない。
ヒープにも限りはあるにはあるが、それは OSやマシンの限界。
[]
[ここ壊れてます]

888 名前:デフォルトの名無しさん [2020/02/15(土) 14:25:57.86 ID:BMoFghq4.net]
そこでgotoなんですよ。

889 名前:デフォルトの名無しさん [2020/02/15(土) 14:43:25.87 ID:BMoFghq4.net]
コレクションがソートの有無でだいぶ変わる。
trie_base_benchmark__sorted_words_1
trie assign.
409ms
size : 466551
words : 466551

trie insert.
762ms
size : 466551
words : 466551

std::set insert.
69ms

std::unordered_set insert.
149ms

(assigned) trie find.
24ms

(inserted) trie find.
25ms

std::set find.
194ms

std::unordered_set find.
63ms

890 名前:デフォルトの名無しさん [2020/02/15(土) 14:44:57.19 ID:BMoFghq4.net]
trie_base_benchmark__random_words_1

trie assign.
2034ms
size : 466551
words : 466551

trie insert.
2026ms
size : 466551
words : 466551

std::set insert.
490ms

std::unordered_set insert.
146ms

(assigned) trie find.
158ms

(inserted) trie find.
169ms

std::set find.
477ms

std::unordered_set find.
62ms

891 名前:デフォルトの名無しさん [2020/02/15(土) 14:46:37.02 ID:BMoFghq4.net]
挿入速度が変わるのは仕方ないとしても、検索速度が変わるのは、キャッシュじゃないかと思うんだけど。

892 名前:デフォルトの名無しさん [2020/02/15(土) 14:49:41.43 ID:BMoFghq4.net]
std::sort: 306ms, (466551count).
先にソートしてから挿入したほうが速度的にお得っぽい。

893 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 16:03:09.29 ID:0hgUDlXi.net]
>>854
速いといっても
単純な演算と比べれば劇遅



894 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 16:18:40.81 ID:qSK05WKV.net]
>>867
とにかく、足し算/引き算が1クロック程度、new が170クロック程度だからね。
使い方を間違えなければ劇遅とはいえまい。

895 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 16:32:01.46 ID:4O8uAQVX.net]
auto hentai = SM(std::move(羞恥心));

896 名前:デフォルトの名無しさん [2020/02/15(土) 17:12:18.08 ID:BMoFghq4.net]
newより+のほうが速いってことか。

897 名前:デフォルトの名無しさん [2020/02/15(土) 17:25:57.34 ID:BMoFghq4.net]
+と-ならどっちが速いんだろう。

898 名前:はちみつ餃子 mailto:sage [2020/02/15(土) 17:49:06.00 ID:cwLPNCdO.net]
>>871
回路はほぼ共有してるんじゃないの?
2の補数を使うのもそれが理由なんだろうし。
少なくとも Pentium 時代まではクロックは同じだったはず。

近頃の事情は知らんけど
GCC あたりで強い最適化をかけてみても引き算か足し算を特に避ける様子もないので、
まあだいたい同じなんでしょ。

899 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 18:01:50.38 ID:zARYy4pH.net]
>>870
C++の場合、+ひとつだけでも裏でどんなコードが動くか油断ならない。

900 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 18:13:26.25 ID:2RWOAy2H.net]
>>871
+ と - で速度が違うCPUは見たことがない

- は順番が関係あるので
処理によっては遅い事がある

b = 1 + b
b = 1 - b

901 名前:はちみつ餃子 mailto:sage [2020/02/15(土) 18:14:19.52 ID:cwLPNCdO.net]
整数だけの話じゃなくてってことか。
ある程度の常識的判断が出来る場合もあるけど、
基本的には実装次第だわな。

902 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 18:19:46.61 ID:2RWOAy2H.net]
組み込み型じゃなけりゃそりゃね
+ でミサイル発射とか

903 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 19:02:33.35 ID:qSK05WKV.net]
>>870
new より + の方が 170 倍速いと言うことだ。



904 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 19:04:43.75 ID:cVttwiPD.net]
>>874
一度bをnegateしてから足す処理系があるかもな

905 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 19:30:46 ID:qSK05WKV.net]
>>874
確かに引き算には順序があるので、足し算より最適化に不利になることがある。

906 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 19:48:11.00 ID:x3vECiAE.net]
if(bReaZyuu){

907 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 00:34:55 ID:pXV6w9YM.net]
if (false != bReaZyuu) {

908 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 00:35:58 ID:pXV6w9YM.net]
newが常に数百クロックで済むと思ったら
間違いかもしれん…

909 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 01:50:35.50 ID:1DEBeg9G.net]
経験的にはnewが遅いと思ったことは無い。
なお、コンストラクタの処理時間以外はnewはmallocと同じ速度。
ゲームメーカーでも必要な場合に malloc を使うことは問題

910 名前:ネいとされている。 []
[ここ壊れてます]

911 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 02:03:13.40 ID:MPWqg8uW.net]
new からしてmallocを呼んでる実装が多い気がする。

912 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 02:34:52 ID:yR2k1LO6.net]
そりゃnew用とmalloc用でヒープ別けたら無駄だし

913 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/16(日) 02:36:27 ID:VK9AAsv4.net]
ヒープからの割り付けをする機会を減らすことで実行速度を上げる工夫はよく聞く話ではあるよな。
ただ、そこまでギリギリのチューニングが必要ってことがあまりないだけで。



914 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 07:37:50.08 ID:Rlzwkt+8.net]
newは最悪値が読めないからなぁ
組込とかシビアなゲームでは使い辛い

915 名前:デフォルトの名無しさん [2020/02/16(日) 08:25:44.50 ID:Yy7z+EdH.net]
具体的な数字が出てるとイメージが湧く。

916 名前:デフォルトの名無しさん [2020/02/16(日) 08:45:53 ID:Yy7z+EdH.net]
170クロックならあんまり気にする必要ないな。

917 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 10:26:07.87 ID:w0IbR+6u.net]
組み込みでc++がそもそもおかしい

918 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 11:00:34.43 ID:1DEBeg9G.net]
>>887
よっぽどでない限り、AAAゲームでも使われてるよ。

919 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 11:01:02.59 ID:B02+i8yM.net]
最近では小規模組み込みでもC++を使う事はあります

new / deleteやヒープを無効にしたり
newのみでdelete出来ないようにしたり
なんてこともあります

920 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 11:03:58.49 ID:+vprjU7s.net]
>>890
視野狭すぎ

921 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 11:12:03 ID:w0IbR+6u.net]
また馬鹿が無駄に一般化してできるワイ言ってんのか。。相変わらずだな。

922 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 11:20:41 ID:+vprjU7s.net]
日本語でおk

923 名前:デフォルトの名無しさん [2020/02/16(日) 11:23:16 ID:Yy7z+EdH.net]
ストリームってなんで遅いんだろね。



924 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 11:39:47 ID:Rlzwkt+8.net]
>>891
そりゃそういう例もあるわな
だから何?w

925 名前:デフォルトの名無しさん [2020/02/16(日) 11:42:38 ID:Yy7z+EdH.net]
スレで、do{}while()はダメっぽいこと書いてあったけど、なんでダメなの?

926 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 12:30:30 ID:q7JzY0gs.net]
>>887
でもお前は組み込みにもゲーム開発にも携わってないじゃん

927 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 12:42:15 ID:Rlzwkt+8.net]
>>899
ごめんねー、俺はプリンタ屋さんなのw
ゲームは知り合いの話ね

928 名前:デフォルトの名無しさん [2020/02/16(日) 12:54:36 ID:Yy7z+EdH.net]
プリンタ屋さんってどんな仕事ですか?

929 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 12:58:53 ID:Rlzwkt+8.net]
>>901
俺は制御周り、上位インターフェースからのデータを描画ルーチンにに渡したり、下位インターフェースにデータ渡したり、パネルとかの制御をやってる
描画部分はまた別の人がやってる

930 名前:デフォルトの名無しさん [2020/02/16(日) 12:59:56.11 ID:Yy7z+EdH.net]
なんか難しそうですね。

931 名前:デフォルトの名無しさん [2020/02/16(日) 13:01:18.53 ID:Yy7z+EdH.net]
プリンタってプロセッサはどんな感じのを使うんですか?
newってあるんですか?

932 名前:デフォルトの名無しさん [2020/02/16(日) 13:02:40.97 ID:Yy7z+EdH.net]
プリンタのヘッドについてる穴の数は決まっているんだから、あまりヒープが必要無さそうな気もする。

933 名前:デフォルトの名無しさん [2020/02/16(日) 13:03:59.79 ID:Yy7z+EdH.net]
std::vectorの上にヒープを作っても速度的に大丈夫なことは確認した。



934 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 13:07:31.29 ID:Rlzwkt+8.net]
昔はSHシリーズとかR2000とか
今はARMもそれなりに使ってる
制御だとnewは基本使わない
あと俺がやってるのは業務用のLBP

935 名前:デフォルトの名無しさん [2020/02/16(日) 13:08:47.09 ID:Yy7z+EdH.net]
ってことはキャノンですか。

936 名前:デフォルトの名無しさん [2020/02/16(日) 13:10:53.15 ID:Yy7z+EdH.net]
メモ問題は結局ホワイトボード買ってきた。
ホワイトボードをワンノートに撮影するという昔っぽいことに。

937 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 13:11:07.93 ID:Rlzwkt+8.net]
流石に社名までは出せんわw

938 名前:デフォルトの名無しさん [2020/02/16(日) 13:12:13.52 ID:Yy7z+EdH.net]
ワンノートのアンドロイド版はカメラにホワイトボードのモードがあるんだけど、テカリ消してくれないし、ホワイトバランスも調整してくれない。

939 名前:はちみつ餃子 mailto:sage [2020/02/16(日) 13:12:31.37 ID:VK9AAsv4.net]
PostScript くらいならプリンタの側で処理することもあるし、
世間で想像されているよりは高級なことをやっているんじゃないかなぁという気もする。

940 名前:デフォルトの名無しさん [2020/02/16(日) 13:16:21 ID:Yy7z+EdH.net]
ってことは、別の人がnew使いまくり

941 名前:なのでは。 []
[ここ壊れてます]

942 名前:デフォルトの名無しさん [2020/02/16(日) 13:17:17 ID:Yy7z+EdH.net]
テカテカしないホワイトボードないのかな。

943 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/16(日) 13:20:18 ID:VK9AAsv4.net]
>>914
https://www.google.com/search?q=%E3%83%9B%E3%83%AF%E3%82%A4%E3%83%88%E3%83%9C%E3%83%BC%E3%83%89+%E3%83%9E%E3%83%83%E3%83%88%E3%82%BF%E3%82%A4%E3%83%97



944 名前:デフォルトの名無しさん [2020/02/16(日) 13:20:51 ID:Yy7z+EdH.net]
ありがとん。

945 名前:デフォルトの名無しさん [2020/02/16(日) 13:27:19 ID:Yy7z+EdH.net]
モーター動かしたりするのはnew使ったらダメなんだろな。

946 名前:デフォルトの名無しさん [2020/02/16(日) 13:52:37.96 ID:Yy7z+EdH.net]
リアルタイムOSはヒープあるんだろか。

947 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 14:03:56.47 ID:1DEBeg9G.net]
>>900
ゲームに関しては、かなりちゃんとした現場で昔から malloc は使われていたし、全社的に使っても問題ないとされていた。

948 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 14:33:04.16 ID:Rlzwkt+8.net]
>>919
で?
使われてる例も使われない例もあるよ
タイミングにシビアなゲームだと使い辛いと言うだけ

949 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 14:34:24.22 ID:Rlzwkt+8.net]
>>918
最大実行時間が読める専用のヒープを持ってたりするよ

950 名前:デフォルトの名無しさん [2020/02/16(日) 14:44:07.47 ID:Yy7z+EdH.net]
あるんだ。

951 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 14:49:10.64 ID:B02+i8yM.net]
>>918
ヒープを使うかどうか選べるものが多い

952 名前:デフォルトの名無しさん [2020/02/16(日) 14:53:55.58 ID:Yy7z+EdH.net]
選べるってことは、用途によって使い分けが必要って事なんだろな。

953 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 14:59:29.04 ID:D2RmZx9z.net]
ループ内で可変長のvector使っているようなのは、外に出してループ始めにclearする方がいい
ループごとにvector出力しなきゃいけない場合も、moveしないでcopyした方がいい



954 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:03:54.38 ID:k775l7KG.net]
>>920
意見されたら喧嘩売りたくなる病気なの?

955 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:10:11 ID:D2RmZx9z.net]
mallocは使い方が余程ひどく無ければ、性能上問題になることはない
問題になっている場合もプロファイラでその部分だけ対策すればどうにでもなる
断片化やmalloc自体の管理領域容量が気になるほどの環境では使わない方がいいが

956 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:11:53 ID:+ZTPu1gL.net]
>>926
それお前じゃね?

957 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:13:28.86 ID:+ZTPu1gL.net]
>>927
リアルタイム系の仕事したことないならそう言う考え方でもいいと思うよ

958 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:17:30.49 ID:D2RmZx9z.net]
そもそもリアルタイム系の処理で、実処理部分でmallocするってのは普通しないよね

初期化時に必要なバッファはあらかじめ確保しておくものでしょ
そこはmallocだろうが静的確保だろうが変わらないし

959 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:23:06.64 ID:8bxeBykO.net]
>>929はループの中で毎回malloc freeしてるからそりゃ性能が気になるよね

960 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:24:31.11 ID:1DEBeg9G.net]
>>925
std::vector<TYPE> は、リンクリストではなく、「可変長配列」なので、std::list<TYPE> に比べて、TYPE のコンストラクタがデコボコした頻度で
多めに呼び出されてしまう傾向がある。TYPEのコンストラクタの中で何かをnew していると、new が呼び出される回数をグラフにした場合、
デコボコになるため、速度的に滑らかさがなくなってしまう可能性が考えられる。
それは、newの速度がデコボコなのではなく、std::vector が持つ悪い性質の一つ。
速度的に「滑らか」にしたいならば、std::list の方が適している。
そもそも、C言語がポインタを用意したのは、リンクリストを使いたかったからで、Cはデータ集合用のデータ構造として動的リストではなくリンクリストを用いるのが伝統。
Cの高速性とはリンクリストによるものと言っても過言ではない。
newも、mallocもコンストラクタも、リンクリストと最も相性が良い傾向がある。
cppreferenceなどでも、std::vectorが出てくることが多いが、Cの新かを発揮するにはstd::listの方が良い。

961 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:25:54.32 ID:1DEBeg9G.net]
>>932
誤:Cはデータ集合用のデータ構造として動的リストではなくリンクリストを用いるのが伝統。
正:Cはデータ集合用のデータ構造として動的配列ではなくリンクリストを用いるのが伝統。

962 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:27:49.69 ID:D2RmZx9z.net]
いやいや、速度がシビアならreserveしとけと
cとの親和性考えなきゃdequeも良いが、cのAPI呼び出し考慮すると結局vectorをうまく使うのが一番良い

963 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:28:20.99 ID:1DEBeg9G.net]
>>929
std::vector<TYPE>を使っていて、TYPEのコンストラクタの中でnewするのはリアルタイム処理には向きません。
その場合、std::list<TYPE>に変えれば劇的に速度が安定するはずです。



964 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:30:12.10 ID:1DEBeg9G.net]
>>934
CのAPI呼び出しで集合を渡す場合、通常、集合の要素はコンストラクタを持ちません。
その場合は、std::vectorは適すでしょう。
ところが、要素がコンストラクタを持つ場合は、std::listが適します。

965 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:32:54 ID:D2RmZx9z.net]
vectorで再配置する際にmoveされない前提なのね

966 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:33:13 ID:1DEBeg9G.net]
>>936
補足すれば、APIは、リング0のシステムランドで実装されていることが多いため、
リンクリストの様な複雑な構造が用いられることが少ないのです。
しかし、それはAPIに限った話で、Cは誕生したときから、要素数が変化する
集合には、動的配列よりもリンクリストを用いるのが伝統でした。
伝統と言うよりも、リンクリストこそがCの核心・本質といっても過言では有りません。

967 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:35:27 ID:1DEBeg9G.net]
>>937
C言語とはリンクリストのことです。
動的配列は、Cの文化ではありません。

968 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:36:04 ID:MPWqg8uW.net]
アドレスで直にアクセスできる言語の強みはリンクリストで活きるからごもっとも

969 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:40:23 ID:+ZTPu1gL.net]
>>930
そう言う事
平均的には間に合っても確保や解放にかかる時間が読めなくなる
100万回に1回でもダメならダメっていう世界だしね

>>931とかはそう言うことがわかってないので頓珍漢なレスになってるw

970 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:40:27 ID:pXV6w9YM.net]
>>934
reserveしただけだとOSによっては実メモリ確保しなさそう…
で初回アクセスでおもむろにページが用意されれる
ヨカン

971 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:42:34 ID:D2RmZx9z.net]
それだとmalloc使うこと自体不味いだろ
確率でmmapしちゃうのだから

972 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:44:00.56 ID:pXV6w9YM.net]
別に
>>925の前半でおk

973 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:46:21.91 ID:D2RmZx9z.net]
もちろん初期化時以外でね



974 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 16:01:46.00 ID:1DEBeg9G.net]
>>937
moveを使いたい場合、要素の TYPE クラスに move 用の記述が必要となるため、手間がかかります。

975 名前:デフォルトの名無しさん [2020/02/16(日) 16:01:54.10 ID:Yy7z+EdH.net]
is_pod_vで事前条件を確認してるけど、PODはなくなるんだってね。

976 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 16:02:29.34 ID:Rlzwkt+8.net]
>>935
まあお前がそう思うならそうなんだろうな
お前ん中ではな…

977 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 16:07:00.64 ID:D2RmZx9z.net]
listで美味しいのはsplice使いたい時くらいだろ
multi threadのログ統合したい時とかに、lockに必要な時間を最小化出来る

978 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 16:26:27.54 ID:c8Po0Swg.net]
>>947
POD = trivialかつstandard_layout
だから後者を使うようにすればいい

979 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 17:05:35.53 ID:+vprjU7s.net]
子スレッドを休眠状態で作る方法ない?
起動直後にcondition_variable::waitとかじゃなく
初期状態として

980 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 17:13:29.37 ID:YrNuZAe7.net]
何のために?それによる

981 名前:デフォルトの名無しさん [2020/02/16(日) 18:53:05 ID:Yy7z+EdH.net]
>>950
ありがとん。

982 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 21:26:26 ID:D0JJuQrX.net]
>>953
いえいえ

983 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 23:16:48.80 ID:B02+i8yM.net]
>>924
まあそりゃね

使えるようにしてもPCやスマホのように自由には使えないぞ
こまめに確保解放なんてことはしない
基本最初に確保して終わり
解放はしない
だから確保しか出来ないヒープも選べる



984 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 23:20:30.34 ID:B02+i8yM.net]
>>927
それはPCやスマホなどリッチな環境の場合

>>931
一見軽そうで重い関数があったりするから
同じ人が同じ時に作ってたらそんな処理にはしないだろうけど

985 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 00:08:48 ID:U44ZlMgK.net]
白物家電のマイコンやら、pfcのマイコンやらもやったが、そんなのはそもそもmalloc使うような環境じゃなかったしなぁ
RAMもkB単位で少ないし、自由に関数呼べるほどスタックも無いし
割り込み部分はアセンブリで書いてた

986 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 00:14:53 ID:/jKzm6f9.net]
今は冷蔵庫や電子レンジもAI積んでネットワークに繋がるIoT時代だけど
それでも組み込みって未だにそんな感じなの?

987 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 00:16:48 ID:U44ZlMgK.net]
まあそれは特に東南アジア向けだったし
日本よりさらにチープだったのかも

988 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 00:19:59 ID:uafn9Eqq.net]
>>958
そんなのごく一部

989 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 00:20:59 ID:uafn9Eqq.net]
いまだにチープな8bit CPUもたくさん使われている

990 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 00:23:25 ID:U44ZlMgK.net]
cortex-m0とか載ってたらもう小躍りしちゃうくらいのリッチさだよね

991 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 00:34:16.83 ID:H8nvOahp.net]
リッチなCPUを使うって事は
それだけ求められる事が大きいわけで

992 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 07:41:59.44 ID:xyBTOgD8.net]
でもCPU節約するために人件費かけて結局商品高いじゃん

993 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 09:22:40.01 ID:usLteeFN.net]
趣味じゃないんだから
当然トータルで考えるよ

開発工数、単価、機能性能、信頼性、供給、大人の事情、...



994 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 10:36:24 ID:sgjaAMaL.net]
ゲーム業界の人だけど
new使っても問題ないってのはおれの常識とは異なる

まず問題が広すぎる
言いたいことはデフォルトのグローバルヒープを無邪気に使っていいか
ということだと仮定すると
AAAクラスでそんな杜撰なことしてるところはないと思う

組み込みもそうだがリアルタイム性が必要とされるところでは、メモリ予算というものがある
グラフィック、オーディオ、ネットワークなどのモジュールごとにメモリいくらと決められる
モジュールの責任者はその中でやりくりする
ここで大事なのはメモリの最大使用量を保証しなければならないってこと

必要ならローカルのヒープは作ったりするが、この時点で担当者が気ままにnewってのは認められない
基本的にすべてコントロールされる
現実的に最大量が正確に見積もれないものもあるがそれでも最大量は決める

995 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 10:57:08.38 ID:sgjaAMaL.net]
といってもグローバルヒープを使わないわけじゃない
オープンソースのもので無邪気にmallocするものは多数あるが、それほど荒ぶらなければそのまま使う
(リアルタイム性が不要なら仮想メモリに任せる)

あとmalloc遅くないという論調の人がいるけどそれはベストケースの話でしょう
ヒープメモリが不足したり一度に巨大なメモリを確保する場合はシステムコールになるからずっと遅くなる
ワーストが見積もれないものはリアルタイムで使いづらい

まぁ昨今は仮想マシン上で動くゲームが多数あるわけで気にしなくていいレベルという意見はある
ただesports系で一瞬カつくとか商品性に関わるわけで
また後から直すのも地獄なので
最初から計画的に作るべきだろう

996 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 11:06:49.04 ID:tDJaHp5K.net]
ここC++スレだよね、つかぬことだけど
記憶管理はいつでも如何様にもカスタマイズできるようにtypename Allocatorになってるわけじゃん
なんでいきなり組み込みには向かないとかキリッてんの?

997 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 12:20:34.06 ID:ipOy1V1j.net]
>>968
typename Allocatorとかすげぇ初心者っぽい
キリってるのはお前だ

998 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 12:22:54.84 ID:tDJaHp5K.net]
>>969
kwsk

999 名前:デフォルトの名無しさん mailto: []
[ここ壊れてます]

1000 名前:sage mailto:2020/02/17(月) 12:39:53 ID:sgjaAMaL.net [ >>968
標準ライブラリでもallocatorが指定できないものもあるんだよ
もはや今のc++で標準ライブラリを全面的に使いつつ、ヒープを個別に差し替えるのはかなり非現実的だ
allocatorを差し替えられてもnewするタイミングや量はリバースエンジニアリングしないとわからない
それが問題になることもある ]
[ここ壊れてます]

1001 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 12:48:18 ID:2c+OKT/4.net]
てか、静的確保したメモリブロック使うアロケータ書いてそれで標準コンテナ使うのが基本じゃね
まあeastlでも良いが

1002 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 12:51:50 ID:tDJaHp5K.net]
>>971

> 標準ライブラリでもallocatorが指定できないもの
例えば?

newだってoperator newですぐカスタマイズできるし
placementで環境依存の細かい設定もできる

ライブラリはISO/IEC14882に固執する必要はなく
サードパーティでも内製でもより都合のよいほうを使えばいい
というだけの話

1003 名前:969 mailto:sage [2020/02/17(月) 12:56:55 ID:nfQInp9b.net]
カスタマイズの話なら真っ先にnewの話をすべきなんだが順番おかしくね?
ていうか今時はallocatorより先にpolymorphic resourceだと思うが

というかそもそもmallocの速度の話からであって、いきなりallocatorの話したり
C++全体を否定されたかのように過剰反応するとか・・



1004 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 13:12:34.13 ID:y136Nw0W.net]
仕様通りに書けばいい感じにうごいてくれて、責任は俺にはないとか
思い込んでんじゃってるキッズなんだろう。
デバッグするなんてことはもちろん頭にない。

1005 名前:865 mailto:sage [2020/02/17(月) 13:34:28 ID:FC0zZXW0.net]
>>890からの流れでは直後からnewが出てきてたろ
C++が組み込みに向かないという主張の
理由がmallocじゃおかしいだろ
それしか使えんわけでもなし

1006 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 13:44:11 ID:nfQInp9b.net]
>>968に突っ込むと>>890に同意したことになるのか

1007 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 14:00:21 ID:sgjaAMaL.net]
>>973
> > 標準ライブラリでもallocatorが指定できないもの
> 例えば?

でしょ?
お前さんは人並み以上にc++知ってると思うけどこの事実知らない
どこで使われてるか知らなきゃ置き換えができないよね

答えはあえて教えない
標準ライブラリのヘッダーをnewでgrepすればallocatorを通さないものが見つかるさ
自分で確認してこりゃ置き換え無理だわと悟って欲しいw
もし見つからないなら後で書くよ

ちなみにグローバルにnewを置き換えるぐらいならmallocのバイナリを差し替えた方が早いし確実

1008 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/17(月) 14:31:40 ID:qpTD/rYC.net]
おっ。
野党みたいなことを言い始めたぞ。

1009 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 14:37:47 ID:nfQInp9b.net]
>>979
横からだが、具体的に誰のどこを指してそう思ったのかよろしく

1010 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 14:59:36 ID:QYRwM+i2.net]
>>966
もちろん、むやみやたらと使って全く問題ないわけではない。
が、本当に必要な箇所で使う程度なら(多くの場合)余り問題ないという程度。
大体ゲームの場合のnewやmallocは、敵や弾やイフェクト、3Dオブジェクトなど
を1つずつ収めるために使うことが多いが、ゲームの1シーン内に登場する個数が
newやmallocが問題ない程度に元々なっている事がわりと多いと言うだけ。
3Dの雑草の葉っぱ一枚単位で new したりすると問題になってくるかもしれない。

1011 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 15:51:15.09 ID:sgjaAMaL.net]
>>981
なんとも感覚的な話だね
だいたい動けばOK!って感じ?
おれは仕事でそういうもの作りはしない

1012 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 16:08:54 ID:HCTe1ZqE.net]
コンシューマかPCかでも違うだろうし
(自分はさほど詳しくないが、基本コンシューマは標準ヒープ使わないはず)
ジャンルによっても違うんじゃね
PCのMMORPGなんかだとシーン中のメモリ確保は必須だろうし
あと草は普通同じメッシュやテクスチャ使うだろうし、揺れを入れるにしても一つ一つにデータ持たせるなんてアホなことしないだろ

1013 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 16:15:08 ID:tDJaHp5K.net]
>>978
「後で」かw
もう1000間近だし期限切らないでおけば時効だろってか?



1014 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 16:32:36.59 ID:y136Nw0W.net]
いやそれくらい調べろって話だろ。。馬鹿が。

1015 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 16:44:43.28 ID:tDJaHp5K.net]
>>985
sgjaAMaLが、自分の話に傾聴してきた人の質問に答えなかった
つまり自分の考えを伝える努力を中止したということでしかない

何人も自らの意見を他人に伝えるには
その意見を説明するしかなく
説明をやめることは沈黙に等しい

1016 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 16:55:56.23 ID:9WiS2n1W.net]
黙って調べてくれば?
調べて無いと結論づけられればまた偉そうに出来るだろw

1017 名前:デフォルトの名無しさん [2020/02/17(月) 17:15:39.87 ID:9Dh9neDd.net]
ちゃうねん。
僕が組み込みいうたのはArduinoのことな。
RAM2KBやし。

1018 名前:デフォルトの名無しさん [2020/02/17(月) 17:31:33 ID:9Dh9neDd.net]
Arduino面白いよ。

1019 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 18:25:59 ID:sgjaAMaL.net]
>>984
条件は明示してるんだからおれが書くかはお前に委ねられている
1000が迫っているぞw

1020 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 18:30:32 ID:T3Z0MUY2.net]
この手の人最後まで答えないか
答えても的外れなのしか見たことないわ

1021 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 18:32:18 ID:wtNXL+i7.net]
だね
消えて良いよ

1022 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 19:27:27 ID:XybgTXf7.net]
>>978
std::arrayとか言わないよね

1023 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 19:33:45 ID:nfQInp9b.net]
arrayのどこに動的メモリ確保が出てくるんだよ
アホか



1024 名前:デフォルトの名無しさん [2020/02/17(月) 19:46:45 ID:9Dh9neDd.net]
なぞなぞですか。

1025 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 23:00:17 ID:HZSaiYXA.net]
漏れはnewのときたまの遅さの可能性に警鐘を鳴らしたからセフセフ、

1026 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 23:06:03 ID:HZSaiYXA.net]
やっぱnew/deleteのレイテンシーを設計に乗せるには非ページプールメモリにアロケートするべきですよねー

1027 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 23:19:17 ID:sgjaAMaL.net]
なんかスレ止めてたら悪いから書いておくよ
ひとつは17からallocatorがdeprecatedになったstd::functionね
これは結構知られてるばずだ
定期的にこれ濫用する人が現れるんだけど中身理解してから使うか判断しろと職場では言っている代物

もうひとつあげるなら、
処理系によってかなり違うかもだけどstd::threadも中でこっそり内部クラスをnewしてるはず
ただスレッド間で引数を引き渡すためのものでサイズは小さいしスレッド作るコストの方が遥かにでかいから問題にはなりにくい

他にもあるけどとりあえずこんなもんで

1028 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 23:46:06.60 ID:HZSaiYXA.net]
std::functionを使わないと1 bitもプログラムが書けなくなった漏れガイル、
クロージャをいちいちクラス定義から手で書く日々に戻るのはいやじゃー

1029 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 23:54:13.03 ID:HCTe1ZqE.net]
1000なら>>986, >>991-992が土下座

1030 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 17日 3時間 0分 7秒

1031 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<235KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef